diff --git a/package-lock.json b/package-lock.json index 4faa46b..db499f3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -4007,6 +4007,59 @@ "once": "^1.4.0" } }, + "enhanced-resolve": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz", + "integrity": "sha512-3e87LvavsdxyoCfGusJnrZ5G8SLPOFeHSNpZI/ATL9a5leXo2k0w6MKnbqhdBad9qTobSfB20Ld7UmgoNbAZkQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + } + } + }, "entities": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", @@ -11665,6 +11718,64 @@ "tslib": "^1.9.3" } }, + "ts-loader": { + "version": "8.0.11", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-8.0.11.tgz", + "integrity": "sha512-06X+mWA2JXoXJHYAesUUL4mHFYhnmyoCdQVMXofXF552Lzd4wNwSGg7unJpttqUP7ziaruM8d7u8LUB6I1sgzA==", + "dev": true, + "requires": { + "chalk": "^2.3.0", + "enhanced-resolve": "^4.0.0", + "loader-utils": "^1.0.2", + "micromatch": "^4.0.0", + "semver": "^6.0.0" + }, + "dependencies": { + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, "tslib": { "version": "1.10.0", "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", @@ -11707,6 +11818,12 @@ "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", "dev": true }, + "typescript": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.2.tgz", + "integrity": "sha512-thGloWsGH3SOxv1SoY7QojKi0tc+8FnOmiarEGMbd/lar7QOEd3hvlx3Fp5y6FlDUGl9L+pd4n2e+oToGMmhRQ==", + "dev": true + }, "uglify-js": { "version": "3.4.10", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.4.10.tgz", diff --git a/package.json b/package.json index ec6efe7..dc5ac2a 100644 --- a/package.json +++ b/package.json @@ -76,6 +76,8 @@ "pug-plain-loader": "^1.0.0", "sass": "^1.22.12", "sass-loader": "^7.3.1", + "ts-loader": "^8.0.11", + "typescript": "^4.1.2", "vue": "^2.6.10", "vue-masonry-css": "^1.0.3", "vue-meta": "^1.5.2", diff --git a/resources/js/Global/infrastructure/Abstraction/Resource.ts b/resources/js/Global/infrastructure/Abstraction/Resource.ts new file mode 100644 index 0000000..4c5ab6a --- /dev/null +++ b/resources/js/Global/infrastructure/Abstraction/Resource.ts @@ -0,0 +1,14 @@ +import { LooseObject } from "@Global/infrastructure/Interfaces/GlobalInterface"; +export default class Resource { + getJson(data: LooseObject): LooseObject { + return data; + } + + getArray(data: Array): Array { + return data; + } + + setJson(data: LooseObject): LooseObject { + return data; + } +} diff --git a/resources/js/Global/infrastructure/Interfaces/BinderInterface.ts b/resources/js/Global/infrastructure/Interfaces/BinderInterface.ts new file mode 100644 index 0000000..08b9af6 --- /dev/null +++ b/resources/js/Global/infrastructure/Interfaces/BinderInterface.ts @@ -0,0 +1,5 @@ +import {LooseObject} from './GlobalInterface' + +export default interface BinderInterface { + request(data: LooseObject): void; +} diff --git a/resources/js/Global/infrastructure/Interfaces/GlobalInterface.ts b/resources/js/Global/infrastructure/Interfaces/GlobalInterface.ts new file mode 100644 index 0000000..378d05d --- /dev/null +++ b/resources/js/Global/infrastructure/Interfaces/GlobalInterface.ts @@ -0,0 +1,3 @@ +export interface LooseObject { + [key: string]: any +} diff --git a/resources/js/Global/infrastructure/Interfaces/ResourceInterface.ts b/resources/js/Global/infrastructure/Interfaces/ResourceInterface.ts new file mode 100644 index 0000000..06edb2b --- /dev/null +++ b/resources/js/Global/infrastructure/Interfaces/ResourceInterface.ts @@ -0,0 +1,11 @@ +import {LooseObject} from './GlobalInterface' + +export default interface ResourceInterface { + + getJson(data: LooseObject): LooseObject; + + getArray(data: Array): Array; + + setJson(data: LooseObject): LooseObject; + +} diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000..437c213 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,32 @@ +//{ +// "compilerOptions": { +// "module": "commonjs", +// "target": "es5", +// "noImplicitAny": false, +// "sourceMap": false +// } +//} +{ + "compilerOptions": { + "lib": ["dom", "es5", "es2015"], + "target": "es5", + "module": "commonjs", + "noImplicitAny": false, + "moduleResolution": "node", + "sourceMap": true, + "allowSyntheticDefaultImports": true, + "paths": { + "@JS/*": ["./resources/js/*"], + "@Global/*": ["./resources/js/Global/*"], + "@Home/*": ["./resources/js/Home/*"], + "@CRM/*": ["./modules/wm-crm/resources/js/*"], + "@Common/*": ["./modules/wm-common/resources/js/*"], + "@Core/*": ["./modules/wm-core/resources/js/*"], + "@User/*": ["./modules/wm-core/resources/js/Modules/User/*"], + "@Auth/*": ["./modules/wm-core/resources/js/Modules/Authentication/*"], + "@Service/*": ["./modules/wm-service/resources/js/*"], + "@Product/*": ["./modules/wm-product/resources/js/*"], + "@Blog/*": ["./modules/wm-blog/resources/js/*"] + } + } +} diff --git a/webpack.mix.js b/webpack.mix.js index b8f66e7..a969374 100644 --- a/webpack.mix.js +++ b/webpack.mix.js @@ -11,7 +11,7 @@ const mix = require('laravel-mix'); */ mix.webpackConfig({ resolve: { - // extensions: ['.js', '.vue', '.json'], + extensions: ["*", ".js", ".jsx", ".vue", ".ts", ".tsx", '.json', '.d.ts'], alias: { '@JS': path.resolve(__dirname, 'resources/js'), '@Global': path.resolve(__dirname, 'resources/js/Global'), @@ -21,9 +21,18 @@ mix.webpackConfig({ output: { chunkFilename: 'js/vue/chunks/[name].[chunkhash].js', }, + module: { + rules: [ + { + test: /\.ts$/, + loader: "ts-loader", + options: { appendTsSuffixTo: [/\.vue$/] }, + exclude: /node_modules/ + } + ] + } }); - mix.js('resources/js/Home/app.js', 'public/js/vue/Home');