: '\u003CrootDir\u003E\u002Fsrc\u002F$1'\n },\n transform: {\n '^.+\\\\.js
: '\u003CrootDir\u003E\u002Fnode_modules\u002Fbabel-jest',\n '.*\\\\.(vue)
: '\u003CrootDir\u003E\u002Fnode_modules\u002Fvue-jest'\n },\n testPathIgnorePatterns: [\n '\u003CrootDir\u003E\u002Ftest\u002Fe2e'\n ],\n snapshotSerializers: ['\u003CrootDir\u003E\u002Fnode_modules\u002Fjest-serializer-vue'],\n setupFiles: ['\u003CrootDir\u003E\u002Ftest\u002Funit\u002Fsetup'],\n mapCoverage: true,\n coverageDirectory: '\u003CrootDir\u003E\u002Ftest\u002Funit\u002Fcoverage',\n collectCoverageFrom: [\n 'src\u002F**\u002F*.{js,vue}',\n '!src\u002Fmain.js',\n '!src\u002Frouter\u002Findex.js',\n '!**\u002Fnode_modules\u002F**'\n ]\n}\n","id":"277e8a19-355a-4ebc-bd36-c143840d79f9","is_binary":false,"title":"jest.conf.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"BkEMKsZ0VbD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"B13KjZAEWw"},{"code":"{\n \"env\": { \n \"jest\": true\n },\n \"globals\": { \n }\n}\n","id":"e4c59f75-8d13-4343-8e11-402b2c845fc3","is_binary":false,"title":".eslintrc","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"Bk7MKi-RNZv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"B13KjZAEWw"},{"code":"\u002F\u002F For authoring Nightwatch tests, see\n\u002F\u002F http:\u002F\u002Fnightwatchjs.org\u002Fguide#usage\n\nmodule.exports = {\n 'default e2e tests': function (browser) {\n \u002F\u002F automatically uses dev Server port from \u002Fconfig.index.js\n \u002F\u002F default: http:\u002F\u002Flocalhost:8080\n \u002F\u002F see nightwatch.conf.js\n const devServer = browser.globals.devServerURL\n\n browser\n .url(devServer)\n .waitForElementVisible('#app', 5000)\n .assert.elementPresent('.hello')\n .assert.containsText('h1', 'Welcome to Your Vue.js App')\n .assert.elementCount('img', 1)\n .end()\n }\n}\n","id":"020eed6f-44cb-4dd3-9ecf-545c8d484a1f","is_binary":false,"title":"test.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"SkzMFobRNWP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"SkoFsb0VbD"},{"code":"\u002F\u002F 1. start the dev server using production config\nprocess.env.NODE_ENV = 'testing'\n\nconst webpack = require('webpack')\nconst DevServer = require('webpack-dev-server')\n\nconst webpackConfig = require('..\u002F..\u002Fbuild\u002Fwebpack.prod.conf')\nconst devConfigPromise = require('..\u002F..\u002Fbuild\u002Fwebpack.dev.conf')\n\nlet server\n\ndevConfigPromise.then(devConfig =\u003E {\n const devServerOptions = devConfig.devServer\n const compiler = webpack(webpackConfig)\n server = new DevServer(compiler, devServerOptions)\n const port = devServerOptions.port\n const host = devServerOptions.host\n return server.listen(port, host)\n})\n.then(() =\u003E {\n \u002F\u002F 2. run the nightwatch test suite against it\n \u002F\u002F to run in additional browsers:\n \u002F\u002F 1. add an entry in test\u002Fe2e\u002Fnightwatch.conf.js under \"test_settings\"\n \u002F\u002F 2. add it to the --env flag below\n \u002F\u002F or override the environment flag, for example: `npm run e2e -- --env chrome,firefox`\n \u002F\u002F For more information on Nightwatch's config file, see\n \u002F\u002F http:\u002F\u002Fnightwatchjs.org\u002Fguide#settings-file\n let opts = process.argv.slice(2)\n if (opts.indexOf('--config') === -1) {\n opts = opts.concat(['--config', 'test\u002Fe2e\u002Fnightwatch.conf.js'])\n }\n if (opts.indexOf('--env') === -1) {\n opts = opts.concat(['--env', 'chrome'])\n }\n\n const spawn = require('cross-spawn')\n const runner = spawn('.\u002Fnode_modules\u002F.bin\u002Fnightwatch', opts, { stdio: 'inherit' })\n\n runner.on('exit', function (code) {\n server.close()\n process.exit(code)\n })\n\n runner.on('error', function (err) {\n server.close()\n throw err\n })\n})\n","id":"b04e1cb9-aa67-4f3e-87a9-c2b9f79c770f","is_binary":false,"title":"runner.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"SyWGKoZ0NWP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"SJFYobAV-v"},{"code":"require('babel-register')\nvar config = require('..\u002F..\u002Fconfig')\n\n\u002F\u002F http:\u002F\u002Fnightwatchjs.org\u002Fgettingstarted#settings-file\nmodule.exports = {\n src_folders: ['test\u002Fe2e\u002Fspecs'],\n output_folder: 'test\u002Fe2e\u002Freports',\n custom_assertions_path: ['test\u002Fe2e\u002Fcustom-assertions'],\n\n selenium: {\n start_process: true,\n server_path: require('selenium-server').path,\n host: '127.0.0.1',\n port: 4444,\n cli_args: {\n 'webdriver.chrome.driver': require('chromedriver').path\n }\n },\n\n test_settings: {\n default: {\n selenium_port: 4444,\n selenium_host: 'localhost',\n silent: true,\n globals: {\n devServerURL: 'http:\u002F\u002Flocalhost:' + (process.env.PORT || config.dev.port)\n }\n },\n\n chrome: {\n desiredCapabilities: {\n browserName: 'chrome',\n javascriptEnabled: true,\n acceptSslCerts: true\n }\n },\n\n firefox: {\n desiredCapabilities: {\n browserName: 'firefox',\n javascriptEnabled: true,\n acceptSslCerts: true\n }\n }\n }\n}\n","id":"af1d49b8-ff0f-4870-9988-8ad92d8b4853","is_binary":false,"title":"nightwatch.conf.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"HkgzFs-CVZD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"SJFYobAV-v"},{"code":"\u002F\u002F A custom Nightwatch assertion.\n\u002F\u002F The assertion name is the filename.\n\u002F\u002F Example usage:\n\u002F\u002F\n\u002F\u002F browser.assert.elementCount(selector, count)\n\u002F\u002F\n\u002F\u002F For more information on custom assertions see:\n\u002F\u002F http:\u002F\u002Fnightwatchjs.org\u002Fguide#writing-custom-assertions\n\nexports.assertion = function (selector, count) {\n this.message = 'Testing if element \u003C' + selector + '\u003E has count: ' + count\n this.expected = count\n this.pass = function (val) {\n return val === this.expected\n }\n this.value = function (res) {\n return res.value\n }\n this.command = function (cb) {\n var self = this\n return this.api.execute(function (selector) {\n return document.querySelectorAll(selector).length\n }, [selector], function (res) {\n cb.call(self, res)\n })\n }\n}\n","id":"5c23aa34-e106-4b4e-8f11-3e4769c803e3","is_binary":false,"title":"elementCount.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"BkJMYiZAVbP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"rJcYiWA4-v"},{"code":"import { Machine, actions, spawn } from 'xstate'\nconst { assign } = actions\n\nconst todoItemMachine = Machine({\n id: 'todoItem',\n initial: 'completed',\n states: {\n completed: {\n on: {\n completeTask: { actions: 'completedTodoAction' }\n }\n },\n pending: {}\n },\n actions: {\n completedTodoAction: assign((context, event) =\u003E {})\n }\n})\n\nconst createTodo = (data) =\u003E {\n console.log('createTodo', data)\n return {\n title: data.title,\n project: data.project,\n done: false,\n new: true\n }\n}\n\nexport const todoMachine = Machine(\n {\n id: 'Todo',\n initial: 'list',\n context: {\n user: null,\n todoList: [\n {\n title: 'Todo A',\n project: 'Project A',\n done: false\n },\n {\n title: 'Todo B',\n project: 'Project B',\n done: true\n },\n {\n title: 'Todo C',\n project: 'Project C',\n done: false\n },\n {\n title: 'Todo D',\n project: 'Project D',\n done: false\n }\n ],\n delay: 0\n },\n states: {\n idle: {\n on: {\n fetch: 'list'\n }\n },\n list: {\n entry: 'fetchList',\n always: 'todoItemActions'\n },\n resolved: {\n type: 'final'\n },\n rejected: {\n on: {\n fetch: 'list'\n }\n },\n todoItemActions: {\n type: 'parallel',\n states: {\n createTodoItem: {\n initial: 'add_details',\n states: {\n add_details: {\n on: {\n fillDetails: { actions: ['createNewTodoItem', 'persist'] }\n }\n }\n }\n },\n deleteTodoItem: {\n initial: 'deleteItem',\n states: {\n deleteItem: {\n on: {\n delete: { actions: ['deleteCurrentTodoItem', 'persist'] }\n }\n }\n }\n },\n editTodoItem: {\n initial: 'edit_details',\n states: {\n edit_details: {\n on: {\n editItem: { actions: ['editCurrentTodoItem', 'persist'] }\n }\n }\n }\n }\n }\n }\n }\n },\n {\n actions: {\n fetchList: assign({\n todoList: (context, event) =\u003E {\n return context.todoList.map((todo) =\u003E ({\n ...todo,\n ref: spawn(todoItemMachine.withContext(todo))\n }))\n }\n }),\n createNewTodoItem: assign({\n todoList: (context, event) =\u003E {\n let newTodo = createTodo(event.payload)\n return context.todoList.concat({\n ...newTodo,\n ref: spawn(todoItemMachine.withContext(newTodo))\n })\n }\n }),\n\n deleteCurrentTodoItem: assign({\n todoList: (context, event) =\u003E {\n return context.todoList.filter((todo) =\u003E {\n if (todo.title !== event.payload.title) {\n return true\n }\n })\n }\n }),\n editCurrentTodoItem: assign({\n todoList: (context, event) =\u003E {\n let todoIndex = context.todoList.indexOf(event.payload)\n context.todoList[todoIndex].done = true\n return context.todoList\n }\n })\n }\n }\n)\n","id":"c79d1857-d03a-44f5-a43a-f013e7702893","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"B10WFib04WP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"S1vFjbA4WD"},{"code":"import { todoMachine } from '.\u002Findex'\nimport { useMachine } from '@xstate\u002Fvue'\nimport { reactive, computed } from '@vue\u002Fcomposition-api'\nimport { store } from '..\u002Fstore\u002FtodoActions'\n\nexport default function stateMachineActions() {\n const { state, send } = useMachine(todoMachine)\n\n let todoActionStore = reactive({\n store\n })\n\n function setCurrentState(state) {\n store.commit('setState', state)\n }\n function stateTransitions(action, payload) {\n send({ type: action, payload })\n }\n\n return {\n state,\n stateTransitions,\n todoActionStore,\n setCurrentState,\n todoList: computed(() =\u003E state.value.context.todoList)\n }\n}\n","id":"76526fde-551a-4eb0-92b2-caad2a4aa2c0","is_binary":false,"title":"generateTodoStateMachine.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"BkTWKsZCNbw","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"S1vFjbA4WD"},{"code":"import Vue from 'vue'\nimport Vuex from 'vuex'\nimport { todoMachine } from '..\u002Fxstate-todo\u002Findex'\nVue.use(Vuex)\n\nexport const store = new Vuex.Store({\n state: {\n currentState: todoMachine.initial,\n service: {}\n },\n mutations: {\n transitions(state, action) {\n state.currentState = todoMachine.transition(\n state.currentState,\n action\n ).value\n },\n setState(state, nextState) {\n state.currentState = nextState\n },\n services(state, payload) {\n state.service = payload\n }\n }\n})\n","id":"44891fea-75a0-440a-aabd-34da2997a31a","is_binary":false,"title":"todoActions.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"r12bFsZCNWD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1LKjbC4WD"},{"code":"import Vue from 'vue'\nimport Router from 'vue-router'\nimport HelloWorld from '@\u002Fcomponents\u002FHelloWorld'\n\nVue.use(Router)\n\nexport default new Router({\n routes: [\n {\n path: '\u002F',\n name: 'HelloWorld',\n component: HelloWorld\n }\n ]\n})\n","id":"74e262f4-c015-4fe4-9b82-2645feb4a1a4","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"rJoWFo-C4bv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"BJBYjZ0EZP"},{"code":"\u002F\u002F The Vue build version to load with the `import` command\n\u002F\u002F (runtime-only or standalone) has been set in webpack.base.conf with an alias.\nimport Vue from 'vue'\nimport App from '.\u002FApp'\nimport { store } from '..\u002Fsrc\u002Fstore\u002FtodoActions'\nimport VueCompositionApi from '@vue\u002Fcomposition-api'\n\nVue.use(VueCompositionApi)\n\n\u002F* eslint-disable no-new *\u002F\nnew Vue({\n el: '#app',\n components: { App },\n store,\n template: '\u003CApp\u002F\u003E'\n})\n","id":"8453f8e1-191d-491e-95e5-3e18c3fc6d01","is_binary":false,"title":"main.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"rycZtib0EWD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"rkxYiW0VWD"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv\u003E\n \u003Cp class=\"tasks\"\u003E\n Completed Tasks:\n {{\n todos.filter((todo) =\u003E {\n return todo.done === true\n }).length\n }}\n \u003C\u002Fp\u003E\n \u003Cp class=\"tasks\"\u003E\n Pending Tasks:\n {{\n todos.filter((todo) =\u003E {\n return todo.done === false\n }).length\n }}\n \u003C\u002Fp\u003E\n \u003Ctodo\n v-on:delete-todo=\"deleteTodo\"\n v-on:complete-todo=\"completeTodo\"\n v-for=\"(todo, index) in todos\"\n :key=\"index\"\n :todo.sync=\"todo\"\n \u003E\u003C\u002Ftodo\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript type=\"text\u002Fjavascript\"\u003E\nimport swal from 'sweetalert'\nimport Todo from '.\u002FTodo'\nexport default {\n props: ['todos'],\n components: {\n Todo\n },\n setup(props, { emit }) {\n function deleteTodo(todo) {\n let currentItem = todo\n swal({\n title: 'Are you sure?',\n text: 'Once deleted, you will not be able to recover this todo item!',\n icon: 'warning',\n buttons: true,\n dangerMode: true\n }).then(() =\u003E {\n emit('delete-todo', currentItem)\n swal('Poof! Your imaginary file has been deleted!', {\n icon: 'success'\n })\n })\n }\n function completeTodo(todo) {\n emit('complete-todo', todo)\n swal('Success!', 'To-Do completed!', 'success')\n }\n\n return {\n deleteTodo,\n completeTodo\n }\n }\n}\n\u003C\u002Fscript\u003E\n\n\u003Cstyle scoped\u003E\np.tasks {\n text-align: center;\n}\n\u003C\u002Fstyle\u003E\n","id":"9b3770dd-229f-486b-b7b9-dbe17428af2c","is_binary":false,"title":"TodoList.vue","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"S1FWKsZCNbw","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"HyVFi-RVZD"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv class=\"ui centered card\"\u003E\n \u003Cdiv class=\"content\" v-show=\"!isEditing\"\u003E\n \u003Cdiv class=\"header\"\u003E\n {{ todoItem.title }}\n \u003Cdiv class=\"tag active\" v-if=\"todo.new\"\u003ENew Task\u003C\u002Fdiv\u003E\n \u003Cdiv class=\"tag\" v-else\u003EOld Task\u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"meta\"\u003E\n {{ todoItem.project }}\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"extra content\"\u003E\n \u003Cspan class=\"right floated edit icon\" v-on:click=\"showForm\"\u003E\n \u003Ci class=\"edit icon\"\u003E\u003C\u002Fi\u003E\n \u003C\u002Fspan\u003E\n \u003Cspan\n class=\"right floated trash icon delete\"\n v-on:click=\"deleteTodo(todo)\"\n \u003E\n \u003Ci class=\"trash icon\"\u003E\u003C\u002Fi\u003E\n \u003C\u002Fspan\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"content\" v-show=\"isEditing\"\u003E\n \u003Cdiv class=\"ui form\"\u003E\n \u003Cdiv class=\"field\"\u003E\n \u003Clabel\u003ETitle\u003C\u002Flabel\u003E\n \u003Cinput type=\"text\" v-model=\"todoItem.title\" \u002F\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"field\"\u003E\n \u003Clabel\u003EProject\u003C\u002Flabel\u003E\n \u003Cinput type=\"text\" v-model=\"todoItem.project\" \u002F\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"ui two button attached buttons\"\u003E\n \u003Cbutton class=\"ui basic blue button\" v-on:click=\"hideForm\"\u003E\n Close X\n \u003C\u002Fbutton\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv\n class=\"ui bottom attached green basic button\"\n v-show=\"!isEditing && todo.done\"\n disabled\n \u003E\n Completed\n \u003C\u002Fdiv\u003E\n \u003Cdiv\n class=\"ui bottom attached red basic button\"\n v-on:click=\"completeTodo(todo)\"\n v-show=\"!isEditing && !todo.done\"\n \u003E\n Pending\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript type=\"text\u002Fjavascript\"\u003E\nimport { useService } from '@xstate\u002Fvue'\nimport { ref, computed } from '@vue\u002Fcomposition-api'\nexport default {\n props: ['todo'],\n setup(props, context) {\n let { state, send } = useService(props.todo.ref)\n\n let isEditing = ref(false)\n\n function completeTodo(todo) {\n send('completeTask')\n this.$emit('complete-todo', todo)\n }\n\n function deleteTodo(todo) {\n this.$emit('delete-todo', todo)\n }\n\n function showForm() {\n this.isEditing = true\n }\n\n function hideForm() {\n this.isEditing = false\n }\n return {\n state,\n send,\n todoItem: computed(() =\u003E state.value.context),\n isEditing,\n completeTodo,\n deleteTodo,\n showForm,\n hideForm\n }\n }\n}\n\u003C\u002Fscript\u003E\n\u003Cstyle scoped\u003E\n.header {\n display: flex !important;\n justify-content: space-between;\n}\n.tag {\n font-size: 12px;\n border: 2px solid gainsboro;\n border-radius: 20px;\n color: gainsboro;\n padding: 2px 8px;\n}\n.active {\n color: green;\n border: 2px solid green;\n}\n.delete {\n cursor: pointer;\n}\n.edit {\n cursor: pointer;\n}\n\u003C\u002Fstyle\u003E\n","id":"b4636b14-8b23-4d3e-a698-57337465d41d","is_binary":false,"title":"Todo.vue","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"HJubFoWCV-P","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"HyVFi-RVZD"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv class=\"ui basic content center aligned segment\"\u003E\n \u003Cbutton\n class=\"ui basic button icon\"\n v-on:click=\"openForm\"\n v-show=\"!isCreating\"\n \u003E\n \u003Ci class=\"plus icon\"\u003E\u003C\u002Fi\u003E\n \u003C\u002Fbutton\u003E\n \u003Cdiv class=\"ui centered card\" v-show=\"isCreating\"\u003E\n \u003Cdiv class=\"content\"\u003E\n \u003Cdiv class=\"ui form\"\u003E\n \u003Cdiv class=\"field\"\u003E\n \u003Clabel\u003ETitle\u003C\u002Flabel\u003E\n \u003Cinput v-model=\"titleText\" type=\"text\" \u002F\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"field\"\u003E\n \u003Clabel\u003EProject\u003C\u002Flabel\u003E\n \u003Cinput v-model=\"projectText\" type=\"text\" \u002F\u003E\n \u003C\u002Fdiv\u003E\n \u003Cdiv class=\"ui two button attached buttons\"\u003E\n \u003Cbutton class=\"ui basic blue button\" v-on:click=\"sendForm()\"\u003E\n Create\n \u003C\u002Fbutton\u003E\n \u003Cbutton class=\"ui basic red button\" v-on:click=\"closeForm\"\u003E\n Cancel\n \u003C\u002Fbutton\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nexport default {\n data() {\n return {\n titleText: '',\n projectText: '',\n isCreating: false\n }\n },\n methods: {\n openForm() {\n this.isCreating = true\n },\n closeForm() {\n this.isCreating = false\n },\n sendForm() {\n if (this.titleText.length \u003E 0 && this.projectText.length \u003E 0) {\n const title = this.titleText\n const project = this.projectText\n this.$emit('create-todo', {\n title,\n project,\n done: false,\n new: true\n })\n this.titleText = ''\n this.projectText = ''\n this.isCreating = false\n }\n }\n }\n}\n\u003C\u002Fscript\u003E\n","id":"c292f77e-255a-44ab-8f5a-71d666f44705","is_binary":false,"title":"CreateTodo.vue","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"SJvbKs-AEbP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"HyVFi-RVZD"},{"code":"\u003Ctemplate\u003E\n \u003Cdiv id=\"app\"\u003E\n \u003Ch1 class=\"ui dividing centered header\"\u003EVue.js Todo App\u003C\u002Fh1\u003E\n \u003Cdiv class=\"ui three column centered grid\"\u003E\n \u003Cdiv class=\"column\"\u003E\n \u003Ctodo-list\n v-bind:todos=\"todoList\"\n @delete-todo=\"deleteTodoItem\"\n @complete-todo=\"completeTodoItem\"\n \u003E\u003C\u002Ftodo-list\u003E\n \u003Ccreate-todo v-on:create-todo=\"createTodo\"\u003E\u003C\u002Fcreate-todo\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n \u003C\u002Fdiv\u003E\n\u003C\u002Ftemplate\u003E\n\n\u003Cscript\u003E\nimport sweetalert from 'sweetalert'\nimport TodoList from '.\u002Fcomponents\u002FTodoList'\nimport CreateTodo from '.\u002Fcomponents\u002FCreateTodo'\nimport { onMounted } from '@vue\u002Fcomposition-api'\nimport stateMachineActions from '.\u002Fxstate-todo\u002FgenerateTodoStateMachine'\n\nexport default {\n name: 'app',\n components: {\n TodoList,\n CreateTodo\n },\n setup(props, context) {\n let {\n state,\n stateTransitions,\n todoActionStore,\n setCurrentState,\n todoList\n } = stateMachineActions()\n\n onMounted(() =\u003E {\n let currentState = state.value\n setCurrentState(currentState.value)\n })\n\n function deleteTodoItem(todoItem) {\n setCurrentState('deleteTodoItem')\n stateTransitions('delete', todoItem)\n }\n\n function completeTodoItem(todoItem) {\n setCurrentState('editTodoItem')\n stateTransitions('editItem', todoItem)\n }\n function createTodo(newTodo) {\n setCurrentState('createTodoItem')\n stateTransitions('fillDetails', newTodo)\n sweetalert('Success!', 'To-Do created!', 'success')\n }\n\n return {\n state,\n createTodo,\n todoActionStore,\n todoList,\n deleteTodoItem,\n completeTodoItem\n }\n }\n}\n\u003C\u002Fscript\u003E\n","id":"1c648712-afb0-4811-8091-f5b9ae935f81","is_binary":false,"title":"App.vue","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"r1U-YiW0Nbv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"rkxYiW0VWD"},{"code":"{\n \"name\": \"xstate-app\",\n \"version\": \"1.0.0\",\n \"private\": true,\n \"description\": \"A Vue.js project\",\n \"author\": \"buckleader \u003Cjasmin28virdi@gmail.com\u003E\",\n \"scripts\": {\n \"build\": \"node build\u002Fbuild.js\",\n \"lint\": \"eslint --ext .js,.vue src test\u002Funit test\u002Fe2e\u002Fspecs\",\n \"dev\": \"webpack-dev-server --inline --progress --config build\u002Fwebpack.dev.conf.js\",\n \"e2e\": \"node test\u002Fe2e\u002Frunner.js\",\n \"start\": \"npm run dev\",\n \"test\": \"npm run unit && npm run e2e\",\n \"unit\": \"jest --config test\u002Funit\u002Fjest.conf.js --coverage\"\n },\n \"dependencies\": {\n \"@vue\u002Fcomposition-api\": \"^1.0.0-beta.1\",\n \"@xstate\u002Fvue\": \"^0.2.0\",\n \"sweetalert\": \"^2.1.2\",\n \"vue\": \"^2.6.11\",\n \"vue-router\": \"^3.0.1\",\n \"vuex\": \"^3.5.1\",\n \"xstate\": \"^4.11.0\"\n },\n \"devDependencies\": {\n \"@vue\u002Fcompiler-sfc\": \"^3.0.0-beta.10\",\n \"autoprefixer\": \"^7.1.2\",\n \"babel-core\": \"^6.22.1\",\n \"babel-eslint\": \"^8.2.1\",\n \"babel-helper-vue-jsx-merge-props\": \"^2.0.3\",\n \"babel-jest\": \"^21.0.2\",\n \"babel-loader\": \"^7.1.1\",\n \"babel-plugin-dynamic-import-node\": \"^1.2.0\",\n \"babel-plugin-syntax-jsx\": \"^6.18.0\",\n \"babel-plugin-transform-es2015-modules-commonjs\": \"^6.26.0\",\n \"babel-plugin-transform-runtime\": \"^6.22.0\",\n \"babel-plugin-transform-vue-jsx\": \"^3.5.0\",\n \"babel-preset-env\": \"^1.3.2\",\n \"babel-preset-stage-2\": \"^6.22.0\",\n \"babel-register\": \"^6.22.0\",\n \"chalk\": \"^2.0.1\",\n \"chromedriver\": \"^2.27.2\",\n \"copy-webpack-plugin\": \"^4.0.1\",\n \"cross-spawn\": \"^5.0.1\",\n \"css-loader\": \"^0.28.0\",\n \"eslint\": \"^4.15.0\",\n \"eslint-config-standard\": \"^10.2.1\",\n \"eslint-friendly-formatter\": \"^3.0.0\",\n \"eslint-loader\": \"^1.7.1\",\n \"eslint-plugin-import\": \"^2.7.0\",\n \"eslint-plugin-node\": \"^5.2.0\",\n \"eslint-plugin-promise\": \"^3.4.0\",\n \"eslint-plugin-standard\": \"^3.0.1\",\n \"eslint-plugin-vue\": \"^4.0.0\",\n \"extract-text-webpack-plugin\": \"^3.0.0\",\n \"file-loader\": \"^1.1.4\",\n \"friendly-errors-webpack-plugin\": \"^1.6.1\",\n \"html-webpack-plugin\": \"^2.30.1\",\n \"jest\": \"^22.0.4\",\n \"jest-serializer-vue\": \"^0.3.0\",\n \"nightwatch\": \"^0.9.12\",\n \"node-notifier\": \"^5.1.2\",\n \"optimize-css-assets-webpack-plugin\": \"^3.2.0\",\n \"ora\": \"^1.2.0\",\n \"portfinder\": \"^1.0.13\",\n \"postcss-import\": \"^11.0.0\",\n \"postcss-loader\": \"^2.0.8\",\n \"postcss-url\": \"^7.2.1\",\n \"prettier\": \"2.0.5\",\n \"rimraf\": \"^2.6.0\",\n \"selenium-server\": \"^3.0.1\",\n \"semver\": \"^5.3.0\",\n \"shelljs\": \"^0.7.6\",\n \"uglifyjs-webpack-plugin\": \"^1.1.1\",\n \"url-loader\": \"^0.5.8\",\n \"vue-cli-plugin-vue-next\": \"~0.1.3\",\n \"vue-template-compiler\": \"^2.5.2\",\n \"vue-jest\": \"^1.0.2\",\n \"vue-loader\": \"^13.3.0\",\n \"vue-style-loader\": \"^3.0.1\",\n \"webpack\": \"^3.6.0\",\n \"webpack-bundle-analyzer\": \"^2.9.0\",\n \"webpack-dev-server\": \"^2.9.1\",\n \"webpack-merge\": \"^4.1.0\"\n },\n \"browserslist\": [\n \"\u003E 1%\",\n \"last 2 versions\",\n \"not ie \u003C= 8\"\n ],\n \"engines\": {\n \"node\": \"\u003E= 6.0.0\",\n \"npm\": \"\u003E= 3.0.0\"\n }\n}\n","id":"c981aabf-5fa7-4909-8865-bcbd7040e15a","is_binary":false,"title":"package.json","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"SyrWtjWCNWw","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"\u003C!DOCTYPE html\u003E\n\u003Chtml\u003E\n \u003Chead\u003E\n \u003Cmeta charset=\"utf-8\" \u002F\u003E\n \u003Cmeta name=\"viewport\" content=\"width=device-width,initial-scale=1.0\" \u002F\u003E\n \u003Ctitle\u003Exstate-app\u003C\u002Ftitle\u003E\n \u003Cscript src=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fjquery\u002F3.2.1\u002Fjquery.min.js\"\u003E\u003C\u002Fscript\u003E\n \u003Clink\n rel=\"stylesheet\"\n type=\"text\u002Fcss\"\n href=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fsemantic-ui\u002F2.2.7\u002Fsemantic.min.css\"\n \u002F\u003E\n \u003Cscript src=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fsemantic-ui\u002F2.2.7\u002Fsemantic.min.js\"\u003E\u003C\u002Fscript\u003E\n \u003Clink\n rel=\"stylesheet\"\n type=\"text\u002Fcss\"\n href=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fsweetalert\u002F1.1.3\u002Fsweetalert.min.css\"\n \u002F\u003E\n \u003Cscript src=\"https:\u002F\u002Fcdnjs.cloudflare.com\u002Fajax\u002Flibs\u002Fsweetalert\u002F1.1.3\u002Fsweetalert.min.js\"\u003E\u003C\u002Fscript\u003E\n \u003Cscript src=\"https:\u002F\u002Funpkg.com\u002Fsweetalert\u002Fdist\u002Fsweetalert.min.js\"\u003E\u003C\u002Fscript\u003E\n \u003C\u002Fhead\u003E\n \u003Cbody\u003E\n \u003Cdiv id=\"app\"\u003E\u003C\u002Fdiv\u003E\n \u003C!-- built files will be auto injected --\u003E\n \u003C\u002Fbody\u003E\n\u003C\u002Fhtml\u003E\n","id":"738e7ba6-9371-4676-b59b-37a0691e685c","is_binary":false,"title":"index.html","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"ByVWFo-A4Wv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"'use strict'\nconst merge = require('webpack-merge')\nconst devEnv = require('.\u002Fdev.env')\n\nmodule.exports = merge(devEnv, {\n NODE_ENV: '\"testing\"'\n})\n","id":"14d1c838-5cdb-4036-9f78-d5b62afbe627","is_binary":false,"title":"test.env.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"SkQZKiZR4ZP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"Sk7YjWCEbw"},{"code":"'use strict'\nmodule.exports = {\n NODE_ENV: '\"production\"'\n}\n","id":"f6ee2c43-09c9-4095-aeb3-7bf610a627b7","is_binary":false,"title":"prod.env.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"rJz-toZAN-v","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"Sk7YjWCEbw"},{"code":"'use strict'\n\u002F\u002F Template version: 1.3.1\n\u002F\u002F see http:\u002F\u002Fvuejs-templates.github.io\u002Fwebpack for documentation.\n\nconst path = require('path')\n\nmodule.exports = {\n dev: {\n \u002F\u002F Paths\n assetsSubDirectory: 'static',\n assetsPublicPath: '\u002F',\n proxyTable: {},\n\n \u002F\u002F Various Dev Server settings\n host: 'localhost', \u002F\u002F can be overwritten by process.env.HOST\n port: 8080, \u002F\u002F can be overwritten by process.env.PORT, if port is in use, a free one will be determined\n autoOpenBrowser: false,\n errorOverlay: true,\n notifyOnErrors: true,\n poll: false, \u002F\u002F https:\u002F\u002Fwebpack.js.org\u002Fconfiguration\u002Fdev-server\u002F#devserver-watchoptions-\n\n \u002F\u002F Use Eslint Loader?\n \u002F\u002F If true, your code will be linted during bundling and\n \u002F\u002F linting errors and warnings will be shown in the console.\n useEslint: true,\n \u002F\u002F If true, eslint errors and warnings will also be shown in the error overlay\n \u002F\u002F in the browser.\n showEslintErrorsInOverlay: false,\n\n \u002F**\n * Source Maps\n *\u002F\n\n \u002F\u002F https:\u002F\u002Fwebpack.js.org\u002Fconfiguration\u002Fdevtool\u002F#development\n devtool: 'cheap-module-eval-source-map',\n\n \u002F\u002F If you have problems debugging vue-files in devtools,\n \u002F\u002F set this to false - it *may* help\n \u002F\u002F https:\u002F\u002Fvue-loader.vuejs.org\u002Fen\u002Foptions.html#cachebusting\n cacheBusting: true,\n\n cssSourceMap: true\n },\n\n build: {\n \u002F\u002F Template for index.html\n index: path.resolve(__dirname, '..\u002Fdist\u002Findex.html'),\n\n \u002F\u002F Paths\n assetsRoot: path.resolve(__dirname, '..\u002Fdist'),\n assetsSubDirectory: 'static',\n assetsPublicPath: '\u002F',\n\n \u002F**\n * Source Maps\n *\u002F\n\n productionSourceMap: true,\n \u002F\u002F https:\u002F\u002Fwebpack.js.org\u002Fconfiguration\u002Fdevtool\u002F#production\n devtool: '#source-map',\n\n \u002F\u002F Gzip off by default as many popular static hosts such as\n \u002F\u002F Surge or Netlify already gzip all static assets for you.\n \u002F\u002F Before setting to `true`, make sure to:\n \u002F\u002F npm install --save-dev compression-webpack-plugin\n productionGzip: false,\n productionGzipExtensions: ['js', 'css'],\n\n \u002F\u002F Run the build command with an extra argument to\n \u002F\u002F View the bundle analyzer report after build finishes:\n \u002F\u002F `npm run build --report`\n \u002F\u002F Set to `true` or `false` to always turn it on or off\n bundleAnalyzerReport: process.env.npm_config_report\n }\n}\n","id":"6fc9f627-efee-45e6-8318-707764f4dae1","is_binary":false,"title":"index.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"ByZbYjWAEZP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"Sk7YjWCEbw"},{"code":"'use strict'\nconst merge = require('webpack-merge')\nconst prodEnv = require('.\u002Fprod.env')\n\nmodule.exports = merge(prodEnv, {\n NODE_ENV: '\"development\"'\n})\n","id":"596c477d-4f23-4cde-84af-e73fb63aa772","is_binary":false,"title":"dev.env.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:01","upload_id":null,"shortid":"HJeWFj-R4ZP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"Sk7YjWCEbw"},{"code":"'use strict'\nconst path = require('path')\nconst utils = require('.\u002Futils')\nconst webpack = require('webpack')\nconst config = require('..\u002Fconfig')\nconst merge = require('webpack-merge')\nconst baseWebpackConfig = require('.\u002Fwebpack.base.conf')\nconst CopyWebpackPlugin = require('copy-webpack-plugin')\nconst HtmlWebpackPlugin = require('html-webpack-plugin')\nconst ExtractTextPlugin = require('extract-text-webpack-plugin')\nconst OptimizeCSSPlugin = require('optimize-css-assets-webpack-plugin')\nconst UglifyJsPlugin = require('uglifyjs-webpack-plugin')\n\nconst env = process.env.NODE_ENV === 'testing'\n ? require('..\u002Fconfig\u002Ftest.env')\n : require('..\u002Fconfig\u002Fprod.env')\n\nconst webpackConfig = merge(baseWebpackConfig, {\n module: {\n rules: utils.styleLoaders({\n sourceMap: config.build.productionSourceMap,\n extract: true,\n usePostCSS: true\n })\n },\n devtool: config.build.productionSourceMap ? config.build.devtool : false,\n output: {\n path: config.build.assetsRoot,\n filename: utils.assetsPath('js\u002F[name].[chunkhash].js'),\n chunkFilename: utils.assetsPath('js\u002F[id].[chunkhash].js')\n },\n plugins: [\n \u002F\u002F http:\u002F\u002Fvuejs.github.io\u002Fvue-loader\u002Fen\u002Fworkflow\u002Fproduction.html\n new webpack.DefinePlugin({\n 'process.env': env\n }),\n new UglifyJsPlugin({\n uglifyOptions: {\n compress: {\n warnings: false\n }\n },\n sourceMap: config.build.productionSourceMap,\n parallel: true\n }),\n \u002F\u002F extract css into its own file\n new ExtractTextPlugin({\n filename: utils.assetsPath('css\u002F[name].[contenthash].css'),\n \u002F\u002F Setting the following option to `false` will not extract CSS from codesplit chunks.\n \u002F\u002F Their CSS will instead be inserted dynamically with style-loader when the codesplit chunk has been loaded by webpack.\n \u002F\u002F It's currently set to `true` because we are seeing that sourcemaps are included in the codesplit bundle as well when it's `false`, \n \u002F\u002F increasing file size: https:\u002F\u002Fgithub.com\u002Fvuejs-templates\u002Fwebpack\u002Fissues\u002F1110\n allChunks: true,\n }),\n \u002F\u002F Compress extracted CSS. We are using this plugin so that possible\n \u002F\u002F duplicated CSS from different components can be deduped.\n new OptimizeCSSPlugin({\n cssProcessorOptions: config.build.productionSourceMap\n ? { safe: true, map: { inline: false } }\n : { safe: true }\n }),\n \u002F\u002F generate dist index.html with correct asset hash for caching.\n \u002F\u002F you can customize output by editing \u002Findex.html\n \u002F\u002F see https:\u002F\u002Fgithub.com\u002Fampedandwired\u002Fhtml-webpack-plugin\n new HtmlWebpackPlugin({\n filename: process.env.NODE_ENV === 'testing'\n ? 'index.html'\n : config.build.index,\n template: 'index.html',\n inject: true,\n minify: {\n removeComments: true,\n collapseWhitespace: true,\n removeAttributeQuotes: true\n \u002F\u002F more options:\n \u002F\u002F https:\u002F\u002Fgithub.com\u002Fkangax\u002Fhtml-minifier#options-quick-reference\n },\n \u002F\u002F necessary to consistently work with multiple chunks via CommonsChunkPlugin\n chunksSortMode: 'dependency'\n }),\n \u002F\u002F keep module.id stable when vendor modules does not change\n new webpack.HashedModuleIdsPlugin(),\n \u002F\u002F enable scope hoisting\n new webpack.optimize.ModuleConcatenationPlugin(),\n \u002F\u002F split vendor js into its own file\n new webpack.optimize.CommonsChunkPlugin({\n name: 'vendor',\n minChunks (module) {\n \u002F\u002F any required modules inside node_modules are extracted to vendor\n return (\n module.resource &&\n \u002F\\.js$\u002F.test(module.resource) &&\n module.resource.indexOf(\n path.join(__dirname, '..\u002Fnode_modules')\n ) === 0\n )\n }\n }),\n \u002F\u002F extract webpack runtime and module manifest to its own file in order to\n \u002F\u002F prevent vendor hash from being updated whenever app bundle is updated\n new webpack.optimize.CommonsChunkPlugin({\n name: 'manifest',\n minChunks: Infinity\n }),\n \u002F\u002F This instance extracts shared chunks from code splitted chunks and bundles them\n \u002F\u002F in a separate chunk, similar to the vendor chunk\n \u002F\u002F see: https:\u002F\u002Fwebpack.js.org\u002Fplugins\u002Fcommons-chunk-plugin\u002F#extra-async-commons-chunk\n new webpack.optimize.CommonsChunkPlugin({\n name: 'app',\n async: 'vendor-async',\n children: true,\n minChunks: 3\n }),\n\n \u002F\u002F copy custom static assets\n new CopyWebpackPlugin([\n {\n from: path.resolve(__dirname, '..\u002Fstatic'),\n to: config.build.assetsSubDirectory,\n ignore: ['.*']\n }\n ])\n ]\n})\n\nif (config.build.productionGzip) {\n const CompressionWebpackPlugin = require('compression-webpack-plugin')\n\n webpackConfig.plugins.push(\n new CompressionWebpackPlugin({\n asset: '[path].gz[query]',\n algorithm: 'gzip',\n test: new RegExp(\n '\\\\.(' +\n config.build.productionGzipExtensions.join('|') +\n ')
\n ),\n threshold: 10240,\n minRatio: 0.8\n })\n )\n}\n\nif (config.build.bundleAnalyzerReport) {\n const BundleAnalyzerPlugin = require('webpack-bundle-analyzer').BundleAnalyzerPlugin\n webpackConfig.plugins.push(new BundleAnalyzerPlugin())\n}\n\nmodule.exports = webpackConfig\n","id":"aa2c84c4-a048-44de-8ba4-053fc97acc38","is_binary":false,"title":"webpack.prod.conf.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"ryJZtsWRNbw","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"'use strict'\nconst utils = require('.\u002Futils')\nconst webpack = require('webpack')\nconst config = require('..\u002Fconfig')\nconst merge = require('webpack-merge')\nconst path = require('path')\nconst baseWebpackConfig = require('.\u002Fwebpack.base.conf')\nconst CopyWebpackPlugin = require('copy-webpack-plugin')\nconst HtmlWebpackPlugin = require('html-webpack-plugin')\nconst FriendlyErrorsPlugin = require('friendly-errors-webpack-plugin')\nconst portfinder = require('portfinder')\n\nconst HOST = process.env.HOST\nconst PORT = process.env.PORT && Number(process.env.PORT)\n\nconst devWebpackConfig = merge(baseWebpackConfig, {\n module: {\n rules: utils.styleLoaders({ sourceMap: config.dev.cssSourceMap, usePostCSS: true })\n },\n \u002F\u002F cheap-module-eval-source-map is faster for development\n devtool: config.dev.devtool,\n\n \u002F\u002F these devServer options should be customized in \u002Fconfig\u002Findex.js\n devServer: {\n clientLogLevel: 'warning',\n historyApiFallback: {\n rewrites: [\n { from: \u002F.*\u002F, to: path.posix.join(config.dev.assetsPublicPath, 'index.html') },\n ],\n },\n hot: true,\n contentBase: false, \u002F\u002F since we use CopyWebpackPlugin.\n compress: true,\n host: HOST || config.dev.host,\n port: PORT || config.dev.port,\n open: config.dev.autoOpenBrowser,\n overlay: config.dev.errorOverlay\n ? { warnings: false, errors: true }\n : false,\n publicPath: config.dev.assetsPublicPath,\n proxy: config.dev.proxyTable,\n quiet: true, \u002F\u002F necessary for FriendlyErrorsPlugin\n watchOptions: {\n poll: config.dev.poll,\n }\n },\n plugins: [\n new webpack.DefinePlugin({\n 'process.env': require('..\u002Fconfig\u002Fdev.env')\n }),\n new webpack.HotModuleReplacementPlugin(),\n new webpack.NamedModulesPlugin(), \u002F\u002F HMR shows correct file names in console on update.\n new webpack.NoEmitOnErrorsPlugin(),\n \u002F\u002F https:\u002F\u002Fgithub.com\u002Fampedandwired\u002Fhtml-webpack-plugin\n new HtmlWebpackPlugin({\n filename: 'index.html',\n template: 'index.html',\n inject: true\n }),\n \u002F\u002F copy custom static assets\n new CopyWebpackPlugin([\n {\n from: path.resolve(__dirname, '..\u002Fstatic'),\n to: config.dev.assetsSubDirectory,\n ignore: ['.*']\n }\n ])\n ]\n})\n\nmodule.exports = new Promise((resolve, reject) =\u003E {\n portfinder.basePort = process.env.PORT || config.dev.port\n portfinder.getPort((err, port) =\u003E {\n if (err) {\n reject(err)\n } else {\n \u002F\u002F publish the new Port, necessary for e2e tests\n process.env.PORT = port\n \u002F\u002F add port to devServer config\n devWebpackConfig.devServer.port = port\n\n \u002F\u002F Add FriendlyErrorsPlugin\n devWebpackConfig.plugins.push(new FriendlyErrorsPlugin({\n compilationSuccessInfo: {\n messages: [`Your application is running here: http:\u002F\u002F${devWebpackConfig.devServer.host}:${port}`],\n },\n onErrors: config.dev.notifyOnErrors\n ? utils.createNotifierCallback()\n : undefined\n }))\n\n resolve(devWebpackConfig)\n }\n })\n})\n","id":"9fd6debd-7e5e-4fdf-b3a5-846eaae55080","is_binary":false,"title":"webpack.dev.conf.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"ByAeFoW0VWD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"'use strict'\nconst path = require('path')\nconst utils = require('.\u002Futils')\nconst config = require('..\u002Fconfig')\nconst vueLoaderConfig = require('.\u002Fvue-loader.conf')\n\nfunction resolve (dir) {\n return path.join(__dirname, '..', dir)\n}\n\nconst createLintingRule = () =\u003E ({\n test: \u002F\\.(js|vue)$\u002F,\n loader: 'eslint-loader',\n enforce: 'pre',\n include: [resolve('src'), resolve('test')],\n options: {\n formatter: require('eslint-friendly-formatter'),\n emitWarning: !config.dev.showEslintErrorsInOverlay\n }\n})\n\nmodule.exports = {\n context: path.resolve(__dirname, '..\u002F'),\n entry: {\n app: '.\u002Fsrc\u002Fmain.js'\n },\n output: {\n path: config.build.assetsRoot,\n filename: '[name].js',\n publicPath: process.env.NODE_ENV === 'production'\n ? config.build.assetsPublicPath\n : config.dev.assetsPublicPath\n },\n resolve: {\n extensions: ['.js', '.vue', '.json'],\n alias: {\n 'vue
: 'vue\u002Fdist\u002Fvue.esm.js',\n '@': resolve('src'),\n }\n },\n module: {\n rules: [\n ...(config.dev.useEslint ? [createLintingRule()] : []),\n {\n test: \u002F\\.vue$\u002F,\n loader: 'vue-loader',\n options: vueLoaderConfig\n },\n {\n test: \u002F\\.js$\u002F,\n loader: 'babel-loader',\n include: [resolve('src'), resolve('test'), resolve('node_modules\u002Fwebpack-dev-server\u002Fclient')]\n },\n {\n test: \u002F\\.(png|jpe?g|gif|svg)(\\?.*)?$\u002F,\n loader: 'url-loader',\n options: {\n limit: 10000,\n name: utils.assetsPath('img\u002F[name].[hash:7].[ext]')\n }\n },\n {\n test: \u002F\\.(mp4|webm|ogg|mp3|wav|flac|aac)(\\?.*)?$\u002F,\n loader: 'url-loader',\n options: {\n limit: 10000,\n name: utils.assetsPath('media\u002F[name].[hash:7].[ext]')\n }\n },\n {\n test: \u002F\\.(woff2?|eot|ttf|otf)(\\?.*)?$\u002F,\n loader: 'url-loader',\n options: {\n limit: 10000,\n name: utils.assetsPath('fonts\u002F[name].[hash:7].[ext]')\n }\n }\n ]\n },\n node: {\n \u002F\u002F prevent webpack from injecting useless setImmediate polyfill because Vue\n \u002F\u002F source contains it (although only uses it if it's native).\n setImmediate: false,\n \u002F\u002F prevent webpack from injecting mocks to Node native modules\n \u002F\u002F that does not make sense for the client\n dgram: 'empty',\n fs: 'empty',\n net: 'empty',\n tls: 'empty',\n child_process: 'empty'\n }\n}\n","id":"fe3d02a1-486c-4c32-a235-855d9f6c0b0f","is_binary":false,"title":"webpack.base.conf.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"HJTlKiWAVZw","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"'use strict'\nconst utils = require('.\u002Futils')\nconst config = require('..\u002Fconfig')\nconst isProduction = process.env.NODE_ENV === 'production'\nconst sourceMapEnabled = isProduction\n ? config.build.productionSourceMap\n : config.dev.cssSourceMap\n\nmodule.exports = {\n loaders: utils.cssLoaders({\n sourceMap: sourceMapEnabled,\n extract: isProduction\n }),\n cssSourceMap: sourceMapEnabled,\n cacheBusting: config.dev.cacheBusting,\n transformToRequire: {\n video: ['src', 'poster'],\n source: 'src',\n img: 'src',\n image: 'xlink:href'\n }\n}\n","id":"cd16131e-d545-423c-8127-02588d363979","is_binary":false,"title":"vue-loader.conf.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"HJneYo-0EZD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"'use strict'\nconst path = require('path')\nconst config = require('..\u002Fconfig')\nconst ExtractTextPlugin = require('extract-text-webpack-plugin')\nconst packageConfig = require('..\u002Fpackage.json')\n\nexports.assetsPath = function (_path) {\n const assetsSubDirectory = process.env.NODE_ENV === 'production'\n ? config.build.assetsSubDirectory\n : config.dev.assetsSubDirectory\n\n return path.posix.join(assetsSubDirectory, _path)\n}\n\nexports.cssLoaders = function (options) {\n options = options || {}\n\n const cssLoader = {\n loader: 'css-loader',\n options: {\n sourceMap: options.sourceMap\n }\n }\n\n const postcssLoader = {\n loader: 'postcss-loader',\n options: {\n sourceMap: options.sourceMap\n }\n }\n\n \u002F\u002F generate loader string to be used with extract text plugin\n function generateLoaders (loader, loaderOptions) {\n const loaders = options.usePostCSS ? [cssLoader, postcssLoader] : [cssLoader]\n\n if (loader) {\n loaders.push({\n loader: loader + '-loader',\n options: Object.assign({}, loaderOptions, {\n sourceMap: options.sourceMap\n })\n })\n }\n\n \u002F\u002F Extract CSS when that option is specified\n \u002F\u002F (which is the case during production build)\n if (options.extract) {\n return ExtractTextPlugin.extract({\n use: loaders,\n fallback: 'vue-style-loader'\n })\n } else {\n return ['vue-style-loader'].concat(loaders)\n }\n }\n\n \u002F\u002F https:\u002F\u002Fvue-loader.vuejs.org\u002Fen\u002Fconfigurations\u002Fextract-css.html\n return {\n css: generateLoaders(),\n postcss: generateLoaders(),\n less: generateLoaders('less'),\n sass: generateLoaders('sass', { indentedSyntax: true }),\n scss: generateLoaders('sass'),\n stylus: generateLoaders('stylus'),\n styl: generateLoaders('stylus')\n }\n}\n\n\u002F\u002F Generate loaders for standalone style files (outside of .vue)\nexports.styleLoaders = function (options) {\n const output = []\n const loaders = exports.cssLoaders(options)\n\n for (const extension in loaders) {\n const loader = loaders[extension]\n output.push({\n test: new RegExp('\\\\.' + extension + '
),\n use: loader\n })\n }\n\n return output\n}\n\nexports.createNotifierCallback = () =\u003E {\n const notifier = require('node-notifier')\n\n return (severity, errors) =\u003E {\n if (severity !== 'error') return\n\n const error = errors[0]\n const filename = error.file && error.file.split('!').pop()\n\n notifier.notify({\n title: packageConfig.name,\n message: severity + ': ' + error.name,\n subtitle: filename || '',\n icon: path.join(__dirname, 'logo.png')\n })\n }\n}\n","id":"0cc36129-6703-4d85-a658-47209a86504b","is_binary":false,"title":"utils.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"HkslFjZRVbP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"'use strict'\nconst chalk = require('chalk')\nconst semver = require('semver')\nconst packageConfig = require('..\u002Fpackage.json')\nconst shell = require('shelljs')\n\nfunction exec (cmd) {\n return require('child_process').execSync(cmd).toString().trim()\n}\n\nconst versionRequirements = [\n {\n name: 'node',\n currentVersion: semver.clean(process.version),\n versionRequirement: packageConfig.engines.node\n }\n]\n\nif (shell.which('npm')) {\n versionRequirements.push({\n name: 'npm',\n currentVersion: exec('npm --version'),\n versionRequirement: packageConfig.engines.npm\n })\n}\n\nmodule.exports = function () {\n const warnings = []\n\n for (let i = 0; i \u003C versionRequirements.length; i++) {\n const mod = versionRequirements[i]\n\n if (!semver.satisfies(mod.currentVersion, mod.versionRequirement)) {\n warnings.push(mod.name + ': ' +\n chalk.red(mod.currentVersion) + ' should be ' +\n chalk.green(mod.versionRequirement)\n )\n }\n }\n\n if (warnings.length) {\n console.log('')\n console.log(chalk.yellow('To use this template, you must update following to modules:'))\n console.log()\n\n for (let i = 0; i \u003C warnings.length; i++) {\n const warning = warnings[i]\n console.log(' ' + warning)\n }\n\n console.log()\n process.exit(1)\n }\n}\n","id":"423ced16-e73a-4cb9-a065-1d1f9d77cc2d","is_binary":false,"title":"check-versions.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"rJ9gFjW0VbP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"'use strict'\nrequire('.\u002Fcheck-versions')()\n\nprocess.env.NODE_ENV = 'production'\n\nconst ora = require('ora')\nconst rm = require('rimraf')\nconst path = require('path')\nconst chalk = require('chalk')\nconst webpack = require('webpack')\nconst config = require('..\u002Fconfig')\nconst webpackConfig = require('.\u002Fwebpack.prod.conf')\n\nconst spinner = ora('building for production...')\nspinner.start()\n\nrm(path.join(config.build.assetsRoot, config.build.assetsSubDirectory), err =\u003E {\n if (err) throw err\n webpack(webpackConfig, (err, stats) =\u003E {\n spinner.stop()\n if (err) throw err\n process.stdout.write(stats.toString({\n colors: true,\n modules: false,\n children: false, \u002F\u002F If you are using ts-loader, setting this to true will make TypeScript errors show up during build.\n chunks: false,\n chunkModules: false\n }) + '\\n\\n')\n\n if (stats.hasErrors()) {\n console.log(chalk.red(' Build failed with errors.\\n'))\n process.exit(1)\n }\n\n console.log(chalk.cyan(' Build complete.\\n'))\n console.log(chalk.yellow(\n ' Tip: built files are meant to be served over an HTTP server.\\n' +\n ' Opening index.html over file:\u002F\u002F won\\'t work.\\n'\n ))\n })\n})\n","id":"acc376ae-d3b9-43d5-8c05-97a8519b404d","is_binary":false,"title":"build.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"SkYetoWRVZP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"},{"code":"# xstate-app\n\n\u003E A Vue.js project\n\n## Build Setup\n\n``` bash\n# install dependencies\nnpm install\n\n# serve with hot reload at localhost:8080\nnpm run dev\n\n# build for production with minification\nnpm run build\n\n# build for production and view the bundle analyzer report\nnpm run build --report\n\n# run unit tests\nnpm run unit\n\n# run e2e tests\nnpm run e2e\n\n# run all tests\nnpm test\n```\n\nFor a detailed explanation on how things work, check out the [guide](http:\u002F\u002Fvuejs-templates.github.io\u002Fwebpack\u002F) and [docs for vue-loader](http:\u002F\u002Fvuejs.github.io\u002Fvue-loader).\n","id":"57d7e894-9884-4e62-8a37-45b41f3508dd","is_binary":false,"title":"README.md","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"Bkdlti-AN-w","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"{\n \"singleQuote\": true,\n \"semi\": false,\n \"trailingComma\": \"none\",\n \"bracketSpacing\": true\n}\n","id":"dc1f401a-2412-411d-b436-c4784a4fe758","is_binary":false,"title":".prettierrc","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"HJwltjbC4-w","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":".DS_Store\nnode_modules\u002F\n\u002Fdist\u002F\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\u002Ftest\u002Funit\u002Fcoverage\u002F\n\u002Ftest\u002Fe2e\u002Freports\u002F\nselenium-debug.log\n\n# Editor directories and files\n.idea\n.vscode\n*.suo\n*.ntvs*\n*.njsproj\n*.sln\n","id":"f7b62504-ce81-4b4f-a0ac-8617dbfaef97","is_binary":false,"title":".gitignore","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"HJHgto-CVWv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"\u002F\u002F https:\u002F\u002Feslint.org\u002Fdocs\u002Fuser-guide\u002Fconfiguring\n\nmodule.exports = {\n root: true,\n parserOptions: {\n parser: 'babel-eslint'\n },\n env: {\n browser: true\n },\n extends: [\n \u002F\u002F https:\u002F\u002Fgithub.com\u002Fvuejs\u002Feslint-plugin-vue#priority-a-essential-error-prevention\n \u002F\u002F consider switching to `plugin:vue\u002Fstrongly-recommended` or `plugin:vue\u002Frecommended` for stricter rules.\n 'plugin:vue\u002Fessential',\n \u002F\u002F https:\u002F\u002Fgithub.com\u002Fstandard\u002Fstandard\u002Fblob\u002Fmaster\u002Fdocs\u002FRULES-en.md\n 'standard'\n ],\n \u002F\u002F required to lint *.vue files\n plugins: ['vue'],\n \u002F\u002F add your custom rules here\n rules: {\n 'space-before-function-paren': ['error', 'never'],\n \u002F\u002F quotes: [2, \"double\", \"avoid-escape\"],\n \u002F\u002F semi: [2, \"always\"],\n \u002F\u002F allow async-await\n 'generator-star-spacing': 'off',\n \u002F\u002F allow debugger during development\n 'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off'\n }\n}\n","id":"7c060536-508e-4765-9b02-a5c58304ed49","is_binary":false,"title":".eslintrc.js","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"ryVlYoWANbD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"\u002Fbuild\u002F\n\u002Fconfig\u002F\n\u002Fdist\u002F\n\u002F*.js\n\u002Ftest\u002Funit\u002Fcoverage\u002F\n","id":"385093d3-1db2-445a-8474-a1d56fb10608","is_binary":false,"title":".eslintignore","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"HkQxtob0VbD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"root = true\n\n[*]\ncharset = utf-8\nindent_style = space\nindent_size = 2\nend_of_line = lf\ninsert_final_newline = true\ntrim_trailing_whitespace = true\n","id":"e5ec0f90-2d9b-4abe-a835-8bd0a262767e","is_binary":false,"title":".editorconfig","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"rJGgFjZ0VWw","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"{\n \"presets\": [\n [\"env\", {\n \"modules\": false,\n \"targets\": {\n \"browsers\": [\"\u003E 1%\", \"last 2 versions\", \"not ie \u003C= 8\"]\n }\n }],\n \"stage-2\"\n ],\n \"plugins\": [\"transform-vue-jsx\", \"transform-runtime\"],\n \"env\": {\n \"test\": {\n \"presets\": [\"env\", \"stage-2\"],\n \"plugins\": [\"transform-vue-jsx\", \"transform-es2015-modules-commonjs\", \"dynamic-import-node\"]\n }\n }\n}\n","id":"7dd65916-3272-45d1-943a-fa671431ac9f","is_binary":false,"title":".babelrc","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"BJZlYi-0VWP","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":null},{"code":"","id":"985e114a-d6f4-4d74-82e4-06bd903a3721","is_binary":false,"title":".gitkeep","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"SklxFs-ANWD","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"BJMts-0EWP"},{"code":"https:\u002F\u002Frawcdn.githack.com\u002FJasmin2895\u002Fxstate-app\u002F86615c254f251cac535c6af164a8ebce53f5a595\u002Fsrc\u002Fassets\u002Flogo.png","id":"3d495dc4-8397-469b-bb67-663ae8bdd2ac","is_binary":true,"title":"logo.png","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"Sy1gFsZ0Nbv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"B1ZYjWA4WD"},{"code":"https:\u002F\u002Frawcdn.githack.com\u002FJasmin2895\u002Fxstate-app\u002F86615c254f251cac535c6af164a8ebce53f5a595\u002Fbuild\u002Flogo.png","id":"4a976e87-f4be-49aa-83c6-a677abc74090","is_binary":true,"title":"logo.png","sha":null,"inserted_at":"2020-08-03T10:32:46","updated_at":"2020-08-02T23:52:00","upload_id":null,"shortid":"SkAtoZRNZv","source_id":"141ad440-f606-4801-ae62-19a76f75c993","directory_shortid":"H1Ko-REWP"}],"npm_dependencies":{},"template":"vue-cli","user_liked":false,"screenshot_url":"https:\u002F\u002Fscreenshots.codesandbox.io\u002Figki6\u002F1.png","external_resources":[],"is_frozen":true,"picks":[],"forked_from_sandbox":null,"is_sse":false,"git":null,"npm_registries":[],"tags":[],"author":{"id":"1890cfd9-97ba-4679-a8dd-19881c3ac164","name":null,"username":"Jasmin2895","avatar_url":"https:\u002F\u002Favatars3.githubusercontent.com\u002Fu\u002F8161593?v=4","personal_workspace_id":"2fca0231-2b07-461e-b4f8-a4b7fe683107","subscription_plan":null,"subscription_since":null},"v2":false,"forked_template":{"id":"452c3f31-478e-4605-a984-4628341fa64b","title":"xstate-app","color":"#61DAFB","v2":false,"url":null,"published":false,"icon_url":"github","official":false},"original_git":null,"owned":false,"custom_template":null,"preview_secret":null,"authorization":"read","description":null,"source_id":"141ad440-f606-4801-ae62-19a76f75c993","title":null,"privacy":0};