diff --git a/.babelrc b/.babelrc deleted file mode 100644 index 272b042d..00000000 --- a/.babelrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "presets": [ - [ - "env", - { - "modules": false, - "useBuiltIns": "entry" - } - ], - "stage-2" - ], - "plugins": ["transform-runtime", "lodash"], - "env": { - "test": { - "plugins": ["istanbul"] - } - } -} diff --git a/.env.development b/.env.development new file mode 100644 index 00000000..be283eda --- /dev/null +++ b/.env.development @@ -0,0 +1,2 @@ +VUE_APP_FULL_BUNDLE=true +VUE_APP_DEV_PROJECT=["basic", "checklist", "custom", "full", "grouping", "multiselect", "multi", "picker"] diff --git a/.env.test b/.env.test new file mode 100644 index 00000000..cf57e409 --- /dev/null +++ b/.env.test @@ -0,0 +1 @@ +VUE_APP_FULL_BUNDLE=true diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index e05ca94d..00000000 --- a/.eslintrc.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = { - root: true, - parser: "vue-eslint-parser", - parserOptions: { - sourceType: "module", - parser: "babel-eslint" - }, - env: { - browser: true, - commonjs: true - }, - globals: { - process: true - }, - extends: ["eslint:recommended", "prettier", "plugin:vue/essential"], - plugins: ["prettier", "babel"], - rules: { - indent: [1, "tab", { SwitchCase: 1 }], - quotes: [1, "double", { allowTemplateLiterals: true }], - semi: [2, "always"], - "no-var": [2], - "no-console": [0], - "no-unused-vars": [1], - "no-throw-literal": 0, - eqeqeq: [2, "smart"] - } -}; diff --git a/.gitignore b/.gitignore index 6c546dcb..041e95de 100644 --- a/.gitignore +++ b/.gitignore @@ -1,10 +1,22 @@ .DS_Store node_modules/ -docs/_book/ -npm-debug.log -selenium-debug.log -test/unit/coverage -test/e2e/reports -stats.json -typings/ -typings.json +dist/*.html +tests/unit/coverage + +# local env files +.env.local +.env.*.local + +# Log files +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Editor directories and files +.idea +.vscode +*.suo +*.ntvs* +*.njsproj +*.sln +*.sw* diff --git a/babel.config.js b/babel.config.js new file mode 100644 index 00000000..fdf8d343 --- /dev/null +++ b/babel.config.js @@ -0,0 +1,4 @@ +module.exports = { + presets: ["@vue/app"], + plugins: ["lodash"] +}; diff --git a/build/utils.js b/build/utils.js deleted file mode 100644 index 414d5eb5..00000000 --- a/build/utils.js +++ /dev/null @@ -1,63 +0,0 @@ -let path = require("path"); -let ExtractTextPlugin = require("extract-text-webpack-plugin"); - -exports.cssLoaders = function(options) { - options = options || {}; - - let cssLoader = { - loader: "css-loader", - options: { - minimize: process.env.NODE_ENV === "production", - sourceMap: options.sourceMap - } - }; - - // generate loader string to be used with extract text plugin - function generateLoaders(loader, loaderOptions) { - let loaders = [cssLoader]; - if (loader) { - loaders.push({ - loader: loader + "-loader", - options: Object.assign({}, loaderOptions, { - sourceMap: options.sourceMap - }) - }); - } - - // Extract CSS when that option is specified - // (which is the case during production build) - if (options.extract) { - return ExtractTextPlugin.extract({ - use: loaders, - fallback: "vue-style-loader" - }); - } else { - return ["vue-style-loader"].concat(loaders); - } - } - - // https://vue-loader.vuejs.org/en/configurations/extract-css.html - return { - css: generateLoaders(), - postcss: generateLoaders(), - less: generateLoaders("less"), - sass: generateLoaders("sass", { indentedSyntax: true }), - scss: generateLoaders("sass"), - stylus: generateLoaders("stylus"), - styl: generateLoaders("stylus") - }; -}; - -// Generate loaders for standalone style files (outside of .vue) -exports.styleLoaders = function(options) { - let output = []; - let loaders = exports.cssLoaders(options); - for (let extension in loaders) { - let loader = loaders[extension]; - output.push({ - test: new RegExp("\\." + extension + "$"), - use: loader - }); - } - return output; -}; diff --git a/build/vue-loader.conf.js b/build/vue-loader.conf.js deleted file mode 100644 index ae4f2e8a..00000000 --- a/build/vue-loader.conf.js +++ /dev/null @@ -1,10 +0,0 @@ -let utils = require("./utils"); -let isProduction = process.env.NODE_ENV === "production"; - -module.exports = { - esModule: false, - loaders: utils.cssLoaders({ - sourceMap: false, - extract: isProduction - }) -}; diff --git a/build/webpack.build.config.js b/build/webpack.build.config.js deleted file mode 100644 index 57b8a53b..00000000 --- a/build/webpack.build.config.js +++ /dev/null @@ -1,104 +0,0 @@ -const path = require("path"); -const webpack = require("webpack"); -const utils = require("./utils"); -const version = require("../package.json").version; -const banner = - "/**\n" + - " * vue-form-generator v" + - version + - "\n" + - " * https://github.com/vue-generators/vue-form-generator/\n" + - " * Released under the MIT License.\n" + - " */\n"; -const ExtractTextPlugin = require("extract-text-webpack-plugin"); -const StatsPlugin = require("stats-webpack-plugin"); -const vueLoaderConfig = require("./vue-loader.conf"); - -let rules = [ - { - test: /\.(js|vue)$/, - loader: "eslint-loader", - enforce: "pre", - include: [path.resolve("src")], - options: { - formatter: require("eslint-friendly-formatter") - } - }, - { - test: /\.vue$/, - loader: "vue-loader", - include: [path.resolve("src")], - exclude: /node_modules/, - options: vueLoaderConfig - }, - { - test: /\.js$/, - loader: "babel-loader", - include: [path.resolve("src")], - exclude: /node_modules/ - }, - { - test: /\.(woff2?|svg)$/, - loader: "url-loader", - include: [path.resolve("src")] - }, - { - test: /\.(ttf|eot)$/, - loader: "url-loader", - include: [path.resolve("src")] - } -]; - -let cssFileName; -if (process.env.FULL_BUNDLE !== "false") { - cssFileName = "vfg.css"; -} else { - cssFileName = "vfg-core.css"; -} - -module.exports = [ - { - entry: "./src/index.js", - output: { - path: path.resolve("dist"), - filename: "vfg.js", - library: "VueFormGenerator", - libraryTarget: "umd" - }, - - plugins: [ - new webpack.DefinePlugin({ - "process.env": { - NODE_ENV: JSON.stringify("production") - } - }), - new webpack.optimize.UglifyJsPlugin({ - compress: { - warnings: false - } - }), - new webpack.BannerPlugin({ - banner, - raw: true - }), - new ExtractTextPlugin(cssFileName, { allChunks: true }), - new StatsPlugin("../stats.json", { - chunkModules: true - //exclude: [/node_modules[\\\/]react/] - }) - ], - - module: { - rules - }, - - resolve: { - aliasFields: ["browser"], - extensions: [".js", ".vue", ".json"], - alias: { - vue$: "vue/dist/vue.esm.js", - "@": path.resolve("src") - } - } - } -]; diff --git a/build/webpack.dev.config.js b/build/webpack.dev.config.js deleted file mode 100644 index dfced552..00000000 --- a/build/webpack.dev.config.js +++ /dev/null @@ -1,83 +0,0 @@ -const path = require("path"); -const webpack = require("webpack"); -const projectRoot = path.resolve(__dirname, "../"); -const vueLoaderConfig = require("./vue-loader.conf"); - -let rules = [ - { - test: /\.(js|vue)$/, - loader: "eslint-loader", - enforce: "pre", - include: [path.resolve("src"), path.resolve("dev")], - options: { - formatter: require("eslint-friendly-formatter") - } - }, - { - test: /\.vue$/, - loader: "vue-loader", - include: [path.resolve("src"), path.resolve("dev")], - exclude: /node_modules/, - options: vueLoaderConfig - }, - { - test: /\.js$/, - loader: "babel-loader", - include: [path.resolve("src"), path.resolve("dev")], - exclude: /node_modules/ - }, - { - test: /\.(woff2?|svg)$/, - loader: "url-loader", - include: [path.resolve("src"), path.resolve("dev")] - }, - { - test: /\.(ttf|eot)$/, - loader: "url-loader", - include: [path.resolve("src"), path.resolve("dev")] - } -]; - -module.exports = { - devtool: "source-map", - devServer: { - contentBase: [path.resolve("dev/projects")] - }, - entry: { - basic: path.resolve("dev", "projects", "basic", "main.js"), - checklist: path.resolve("dev", "projects", "checklist", "main.js"), - custom: path.resolve("dev", "projects", "custom", "main.js"), - full: path.resolve("dev", "projects", "full", "main.js"), - grouping: path.resolve("dev", "projects", "grouping", "main.js"), - mselect: path.resolve("dev", "projects", "multiselect", "main.js"), - multi: path.resolve("dev", "projects", "multi", "main.js"), - picker: path.resolve("dev", "projects", "picker", "main.js") - }, - - output: { - path: path.resolve("dev/projects"), - filename: "[name].js", - publicPath: "/" - }, - - plugins: [ - new webpack.DefinePlugin({ - "process.env": { - NODE_ENV: JSON.stringify("development"), - FULL_BUNDLE: true - } - }) - ], - - module: { - rules - }, - - resolve: { - extensions: [".js", ".vue", ".json"], - alias: { - vue$: "vue/dist/vue.esm.js", - "@": path.resolve("src") - } - } -}; diff --git a/build/webpack.test.config.js b/build/webpack.test.config.js deleted file mode 100644 index 32812ad9..00000000 --- a/build/webpack.test.config.js +++ /dev/null @@ -1,68 +0,0 @@ -const path = require("path"); -const vueLoaderConfig = require("./vue-loader.conf"); -const nodeExternals = require("webpack-node-externals"); - -let rules = [ - { - test: /\.(js|vue)$/, - loader: "eslint-loader", - enforce: "pre", - include: [path.resolve("src")], - options: { - formatter: require("eslint-friendly-formatter") - } - }, - { - test: /\.vue$/, - loader: "vue-loader", - include: [path.resolve("src"), path.resolve("test")], - exclude: /node_modules/, - options: vueLoaderConfig - }, - { - test: /\.js$/, - loader: "babel-loader", - include: [path.resolve("src"), path.resolve("test")], - exclude: /node_modules/ - }, - { - test: /\.(woff2?|svg)$/, - loader: "url-loader", - include: [path.resolve("src"), path.resolve("test")] - }, - { - test: /\.(ttf|eot)$/, - loader: "url-loader", - include: [path.resolve("src"), path.resolve("test")] - } -]; - -module.exports = { - devtool: "inline-cheap-module-source-map", - - entry: "./src/index.js", - - output: { - path: path.resolve("dist"), - filename: "vfg.js", - library: "VueFormGenerator", - libraryTarget: "umd" - }, - - module: { - rules - }, - - plugins: [], - - resolve: { - aliasFields: ["browser"], - extensions: [".js", ".vue", ".json"], - alias: { - vue$: "vue/dist/vue.esm.js", - src: path.resolve("src") - } - }, - - externals: [nodeExternals()] -}; diff --git a/dev/app.vue b/dev/app.vue new file mode 100644 index 00000000..db707222 --- /dev/null +++ b/dev/app.vue @@ -0,0 +1,25 @@ + + + + + + + diff --git a/dev/index.js b/dev/index.js new file mode 100644 index 00000000..cc66d0ed --- /dev/null +++ b/dev/index.js @@ -0,0 +1,6 @@ +import Vue from "vue"; +import App from "./app.vue"; + +new Vue({ + render: (h) => h(App) +}).$mount("#app"); diff --git a/dev/mixins/utils.js b/dev/mixins/utils.js index 43de4913..edeea40c 100644 --- a/dev/mixins/utils.js +++ b/dev/mixins/utils.js @@ -1,33 +1,7 @@ export default { computed: { prettyModel() { - return this.prettyJSON(this.model); - } - }, - methods: { - prettyJSON(json) { - if (json) { - json = JSON.stringify(json, null, 4); - json = json - .replace(/&/g, "&") - .replace(//g, ">"); - return json.replace(/("(\\u[a-zA-Z0-9]{4}|\\[^u]|[^\\"])*"(\s*:)?|\b(true|false|null)\b|-?\d+(?:\.\d*)?(?:[eE][+-]?\d+)?)/g, function(match) { - let cls = "number"; - if (/^"/.test(match)) { - if (/:$/.test(match)) { - cls = "key"; - } else { - cls = "string"; - } - } else if (/true|false/.test(match)) { - cls = "boolean"; - } else if (/null/.test(match)) { - cls = "null"; - } - return "" + match + ""; - }); - } + return JSON.stringify(this.model, null, 4); } } }; diff --git a/dev/projects/basic/app.vue b/dev/projects/basic/app.vue index c01d7bdb..8b5b0594 100644 --- a/dev/projects/basic/app.vue +++ b/dev/projects/basic/app.vue @@ -8,7 +8,7 @@