feature/jenkins-ci (#1)
All checks were successful
Core Repos/Homepage/pipeline/head This commit looks good
All checks were successful
Core Repos/Homepage/pipeline/head This commit looks good
Build for production and run lint
This commit was merged in pull request #1.
This commit is contained in:
20
Jenkinsfile
vendored
Normal file
20
Jenkinsfile
vendored
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
pipeline {
|
||||||
|
agent { docker { image 'node:13.10-alpine' } }
|
||||||
|
stages {
|
||||||
|
stage('setup') {
|
||||||
|
steps {
|
||||||
|
sh 'npm install'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('build') {
|
||||||
|
steps {
|
||||||
|
sh 'node_modules/.bin/ng build --prod'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
stage('lint') {
|
||||||
|
steps {
|
||||||
|
sh 'node_modules/.bin/ng lint'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
117
package-lock.json
generated
117
package-lock.json
generated
@@ -2251,6 +2251,11 @@
|
|||||||
"picomatch": "^2.0.4"
|
"picomatch": "^2.0.4"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"app-root-path": {
|
||||||
|
"version": "2.2.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/app-root-path/-/app-root-path-2.2.1.tgz",
|
||||||
|
"integrity": "sha512-91IFKeKk7FjfmezPKkwtaRvSpnUc4gDwPAjA1YZ9Gn0q0PPeW+vbeUsZuyDwjI7+QTHhcLen2v25fi/AmhvbJA=="
|
||||||
|
},
|
||||||
"append-transform": {
|
"append-transform": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/append-transform/-/append-transform-1.0.0.tgz",
|
||||||
@@ -2274,6 +2279,15 @@
|
|||||||
"sprintf-js": "~1.0.2"
|
"sprintf-js": "~1.0.2"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"aria-query": {
|
||||||
|
"version": "3.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/aria-query/-/aria-query-3.0.0.tgz",
|
||||||
|
"integrity": "sha1-ZbP8wcoRVajJrmTW7uKX8V1RM8w=",
|
||||||
|
"requires": {
|
||||||
|
"ast-types-flow": "0.0.7",
|
||||||
|
"commander": "^2.11.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"arr-diff": {
|
"arr-diff": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz",
|
||||||
@@ -2393,6 +2407,11 @@
|
|||||||
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
|
"integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"ast-types-flow": {
|
||||||
|
"version": "0.0.7",
|
||||||
|
"resolved": "https://registry.npmjs.org/ast-types-flow/-/ast-types-flow-0.0.7.tgz",
|
||||||
|
"integrity": "sha1-9wtzXGvKGlycItmCw+Oef+ujva0="
|
||||||
|
},
|
||||||
"async": {
|
"async": {
|
||||||
"version": "2.6.3",
|
"version": "2.6.3",
|
||||||
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
"resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz",
|
||||||
@@ -2471,6 +2490,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
|
"resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz",
|
||||||
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
|
"integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ=="
|
||||||
},
|
},
|
||||||
|
"axobject-query": {
|
||||||
|
"version": "2.0.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-2.0.2.tgz",
|
||||||
|
"integrity": "sha512-MCeek8ZH7hKyO1rWUbKNQBbl4l2eY0ntk7OGi+q0RlafrCnfPxC06WZA+uebCfmYp4mNU9jRBP1AhGyf8+W3ww==",
|
||||||
|
"requires": {
|
||||||
|
"ast-types-flow": "0.0.7"
|
||||||
|
}
|
||||||
|
},
|
||||||
"babel-code-frame": {
|
"babel-code-frame": {
|
||||||
"version": "6.26.0",
|
"version": "6.26.0",
|
||||||
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
"resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz",
|
||||||
@@ -3312,6 +3339,29 @@
|
|||||||
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz",
|
||||||
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
"integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c="
|
||||||
},
|
},
|
||||||
|
"codelyzer": {
|
||||||
|
"version": "5.2.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/codelyzer/-/codelyzer-5.2.2.tgz",
|
||||||
|
"integrity": "sha512-jB4FZ1Sx7kZhvZVdf+N2BaKTdrrNZOL0Bj10RRfrhHrb3zEvXjJvvq298JPMJAiyiCS/v4zs1QlGU0ip7xGqeA==",
|
||||||
|
"requires": {
|
||||||
|
"app-root-path": "^2.2.1",
|
||||||
|
"aria-query": "^3.0.0",
|
||||||
|
"axobject-query": "2.0.2",
|
||||||
|
"css-selector-tokenizer": "^0.7.1",
|
||||||
|
"cssauron": "^1.4.0",
|
||||||
|
"damerau-levenshtein": "^1.0.4",
|
||||||
|
"semver-dsl": "^1.0.1",
|
||||||
|
"source-map": "^0.5.7",
|
||||||
|
"sprintf-js": "^1.1.2"
|
||||||
|
},
|
||||||
|
"dependencies": {
|
||||||
|
"sprintf-js": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug=="
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
"collection-visit": {
|
"collection-visit": {
|
||||||
"version": "1.0.0",
|
"version": "1.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz",
|
||||||
@@ -3372,8 +3422,7 @@
|
|||||||
"commander": {
|
"commander": {
|
||||||
"version": "2.17.1",
|
"version": "2.17.1",
|
||||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
|
"resolved": "https://registry.npmjs.org/commander/-/commander-2.17.1.tgz",
|
||||||
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==",
|
"integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"commondir": {
|
"commondir": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
@@ -3792,6 +3841,16 @@
|
|||||||
"integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
|
"integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"css-selector-tokenizer": {
|
||||||
|
"version": "0.7.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/css-selector-tokenizer/-/css-selector-tokenizer-0.7.2.tgz",
|
||||||
|
"integrity": "sha512-yj856NGuAymN6r8bn8/Jl46pR+OC3eEvAhfGYDUe7YPtTPAYrSSw4oAniZ9Y8T5B92hjhwTBLUen0/vKPxf6pw==",
|
||||||
|
"requires": {
|
||||||
|
"cssesc": "^3.0.0",
|
||||||
|
"fastparse": "^1.1.2",
|
||||||
|
"regexpu-core": "^4.6.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"css-tree": {
|
"css-tree": {
|
||||||
"version": "1.0.0-alpha.37",
|
"version": "1.0.0-alpha.37",
|
||||||
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
|
"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz",
|
||||||
@@ -3816,11 +3875,18 @@
|
|||||||
"integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==",
|
"integrity": "sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
|
"cssauron": {
|
||||||
|
"version": "1.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/cssauron/-/cssauron-1.4.0.tgz",
|
||||||
|
"integrity": "sha1-pmAt/34EqDBtwNuaVR6S6LVmKtg=",
|
||||||
|
"requires": {
|
||||||
|
"through": "X.X.X"
|
||||||
|
}
|
||||||
|
},
|
||||||
"cssesc": {
|
"cssesc": {
|
||||||
"version": "3.0.0",
|
"version": "3.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz",
|
||||||
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==",
|
"integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"cssnano": {
|
"cssnano": {
|
||||||
"version": "4.1.10",
|
"version": "4.1.10",
|
||||||
@@ -3943,6 +4009,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz",
|
||||||
"integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
|
"integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk="
|
||||||
},
|
},
|
||||||
|
"damerau-levenshtein": {
|
||||||
|
"version": "1.0.6",
|
||||||
|
"resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz",
|
||||||
|
"integrity": "sha512-JVrozIeElnj3QzfUIt8tB8YMluBJom4Vw9qTPpjGYQ9fYlB3D/rb6OordUxf3xeFB35LKWs0xqcO5U6ySvBtug=="
|
||||||
|
},
|
||||||
"dashdash": {
|
"dashdash": {
|
||||||
"version": "1.14.1",
|
"version": "1.14.1",
|
||||||
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
"resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz",
|
||||||
@@ -4912,6 +4983,11 @@
|
|||||||
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz",
|
||||||
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
|
"integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I="
|
||||||
},
|
},
|
||||||
|
"fastparse": {
|
||||||
|
"version": "1.1.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/fastparse/-/fastparse-1.1.2.tgz",
|
||||||
|
"integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ=="
|
||||||
|
},
|
||||||
"faye-websocket": {
|
"faye-websocket": {
|
||||||
"version": "0.10.0",
|
"version": "0.10.0",
|
||||||
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
|
"resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz",
|
||||||
@@ -9574,14 +9650,12 @@
|
|||||||
"regenerate": {
|
"regenerate": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz",
|
||||||
"integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==",
|
"integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"regenerate-unicode-properties": {
|
"regenerate-unicode-properties": {
|
||||||
"version": "8.2.0",
|
"version": "8.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz",
|
||||||
"integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
|
"integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"regenerate": "^1.4.0"
|
"regenerate": "^1.4.0"
|
||||||
}
|
}
|
||||||
@@ -9626,7 +9700,6 @@
|
|||||||
"version": "4.7.0",
|
"version": "4.7.0",
|
||||||
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
|
"resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.0.tgz",
|
||||||
"integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
|
"integrity": "sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"regenerate": "^1.4.0",
|
"regenerate": "^1.4.0",
|
||||||
"regenerate-unicode-properties": "^8.2.0",
|
"regenerate-unicode-properties": "^8.2.0",
|
||||||
@@ -9639,14 +9712,12 @@
|
|||||||
"regjsgen": {
|
"regjsgen": {
|
||||||
"version": "0.5.1",
|
"version": "0.5.1",
|
||||||
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz",
|
||||||
"integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg==",
|
"integrity": "sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"regjsparser": {
|
"regjsparser": {
|
||||||
"version": "0.6.4",
|
"version": "0.6.4",
|
||||||
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
|
"resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.4.tgz",
|
||||||
"integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
|
"integrity": "sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"jsesc": "~0.5.0"
|
"jsesc": "~0.5.0"
|
||||||
},
|
},
|
||||||
@@ -9654,8 +9725,7 @@
|
|||||||
"jsesc": {
|
"jsesc": {
|
||||||
"version": "0.5.0",
|
"version": "0.5.0",
|
||||||
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz",
|
||||||
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=",
|
"integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0="
|
||||||
"dev": true
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@@ -9987,6 +10057,14 @@
|
|||||||
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
|
"resolved": "https://registry.npmjs.org/semver/-/semver-5.5.1.tgz",
|
||||||
"integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
|
"integrity": "sha512-PqpAxfrEhlSUWge8dwIp4tZnQ25DIOthpiaHNIthsjEFQD6EvqUKUDM7L8O2rShkFccYo1VjJR0coWfNkCubRw=="
|
||||||
},
|
},
|
||||||
|
"semver-dsl": {
|
||||||
|
"version": "1.0.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/semver-dsl/-/semver-dsl-1.0.1.tgz",
|
||||||
|
"integrity": "sha1-02eN5VVeimH2Ke7QJTZq5fJzQKA=",
|
||||||
|
"requires": {
|
||||||
|
"semver": "^5.3.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
"semver-intersect": {
|
"semver-intersect": {
|
||||||
"version": "1.4.0",
|
"version": "1.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/semver-intersect/-/semver-intersect-1.4.0.tgz",
|
||||||
@@ -10473,8 +10551,7 @@
|
|||||||
"source-map": {
|
"source-map": {
|
||||||
"version": "0.5.7",
|
"version": "0.5.7",
|
||||||
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz",
|
||||||
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
|
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"source-map-loader": {
|
"source-map-loader": {
|
||||||
"version": "0.2.4",
|
"version": "0.2.4",
|
||||||
@@ -11573,14 +11650,12 @@
|
|||||||
"unicode-canonical-property-names-ecmascript": {
|
"unicode-canonical-property-names-ecmascript": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz",
|
||||||
"integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==",
|
"integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"unicode-match-property-ecmascript": {
|
"unicode-match-property-ecmascript": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz",
|
||||||
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
|
"integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==",
|
||||||
"dev": true,
|
|
||||||
"requires": {
|
"requires": {
|
||||||
"unicode-canonical-property-names-ecmascript": "^1.0.4",
|
"unicode-canonical-property-names-ecmascript": "^1.0.4",
|
||||||
"unicode-property-aliases-ecmascript": "^1.0.4"
|
"unicode-property-aliases-ecmascript": "^1.0.4"
|
||||||
@@ -11589,14 +11664,12 @@
|
|||||||
"unicode-match-property-value-ecmascript": {
|
"unicode-match-property-value-ecmascript": {
|
||||||
"version": "1.2.0",
|
"version": "1.2.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz",
|
||||||
"integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==",
|
"integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"unicode-property-aliases-ecmascript": {
|
"unicode-property-aliases-ecmascript": {
|
||||||
"version": "1.1.0",
|
"version": "1.1.0",
|
||||||
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
|
"resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz",
|
||||||
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==",
|
"integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg=="
|
||||||
"dev": true
|
|
||||||
},
|
},
|
||||||
"union-value": {
|
"union-value": {
|
||||||
"version": "1.0.1",
|
"version": "1.0.1",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
"@angular/platform-browser-dynamic": "^9.0.5",
|
"@angular/platform-browser-dynamic": "^9.0.5",
|
||||||
"@angular/router": "^9.0.5",
|
"@angular/router": "^9.0.5",
|
||||||
"angulartics2": "^8.3.0",
|
"angulartics2": "^8.3.0",
|
||||||
|
"codelyzer": "^5.2.2",
|
||||||
"core-js": "^2.6.11",
|
"core-js": "^2.6.11",
|
||||||
"json-schema-traverse": "^0.4.1",
|
"json-schema-traverse": "^0.4.1",
|
||||||
"rxjs": "~6.5.4",
|
"rxjs": "~6.5.4",
|
||||||
|
|||||||
@@ -1,13 +1,13 @@
|
|||||||
import {async, TestBed} from '@angular/core/testing';
|
import {async, TestBed} from '@angular/core/testing';
|
||||||
import { InjectionToken } from "@angular/core";
|
import { InjectionToken } from '@angular/core';
|
||||||
import {AppComponent} from './app.component';
|
import {AppComponent} from './app.component';
|
||||||
import {ToolbarComponent} from "./toolbar/toolbar.component";
|
import {ToolbarComponent} from './toolbar/toolbar.component';
|
||||||
import {RouterTestingModule} from "@angular/router/testing";
|
import {RouterTestingModule} from '@angular/router/testing';
|
||||||
import { MatSidenavModule } from "@angular/material/sidenav";
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
||||||
import { MatToolbarModule } from "@angular/material/toolbar";
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
||||||
import {NoopAnimationsModule} from "@angular/platform-browser/animations";
|
import {NoopAnimationsModule} from '@angular/platform-browser/animations';
|
||||||
import { RouterlessTracking } from "angulartics2";
|
import { RouterlessTracking } from 'angulartics2';
|
||||||
import { Angulartics2Piwik } from "angulartics2/piwik";
|
import { Angulartics2Piwik } from 'angulartics2/piwik';
|
||||||
|
|
||||||
describe('AppComponent', () => {
|
describe('AppComponent', () => {
|
||||||
let piwik: Angulartics2Piwik;
|
let piwik: Angulartics2Piwik;
|
||||||
|
|||||||
@@ -43,7 +43,7 @@ export const routerTransition = trigger('routerTransition', [
|
|||||||
})
|
})
|
||||||
export class AppComponent {
|
export class AppComponent {
|
||||||
constructor(private matomo: Angulartics2Piwik) {
|
constructor(private matomo: Angulartics2Piwik) {
|
||||||
matomo.startTracking()
|
matomo.startTracking();
|
||||||
}
|
}
|
||||||
|
|
||||||
getState(outlet: RouterOutlet) {
|
getState(outlet: RouterOutlet) {
|
||||||
|
|||||||
@@ -5,14 +5,24 @@ import {Pipe, PipeTransform} from '@angular/core';
|
|||||||
})
|
})
|
||||||
export class ProjectKeywordPipe implements PipeTransform {
|
export class ProjectKeywordPipe implements PipeTransform {
|
||||||
private keywords = [
|
private keywords = [
|
||||||
'MySQL', 'Node', 'Express', 'RxJava', 'Dagger 2', 'Model View Presenter', 'Retrofit', 'Realm', 'Room', 'Model-View-View Model', 'SimpleStack'
|
'MySQL',
|
||||||
|
'Node',
|
||||||
|
'Express',
|
||||||
|
'RxJava',
|
||||||
|
'Dagger 2',
|
||||||
|
'Model View Presenter',
|
||||||
|
'Retrofit',
|
||||||
|
'Realm',
|
||||||
|
'Room',
|
||||||
|
'Model-View-View Model',
|
||||||
|
'SimpleStack'
|
||||||
];
|
];
|
||||||
|
|
||||||
transform(value: String, args?: any): any {
|
transform(value: String, args?: any): any {
|
||||||
this.keywords.forEach(keyword => {
|
this.keywords.forEach(keyword => {
|
||||||
let keywordIndex = value.indexOf(keyword);
|
const keywordIndex = value.indexOf(keyword);
|
||||||
if (keywordIndex != -1) {
|
if (keywordIndex !== -1) {
|
||||||
let boldKeyword = '<b>' + value.substring(keywordIndex, keywordIndex + keyword.length) + '</b>';
|
const boldKeyword = '<b>' + value.substring(keywordIndex, keywordIndex + keyword.length) + '</b>';
|
||||||
value = value.replace(keyword, boldKeyword);
|
value = value.replace(keyword, boldKeyword);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
export class ProjectItem {
|
export class ProjectItem {
|
||||||
title: String;
|
title: String;
|
||||||
applicationType: String;
|
applicationType: String;
|
||||||
description: String
|
description: String;
|
||||||
imgLocation: String
|
imgLocation: String;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,50 @@
|
|||||||
import {Injectable} from '@angular/core';
|
import {Injectable} from '@angular/core';
|
||||||
import {ProjectItem} from "./project-item";
|
import {ProjectItem} from './project-item';
|
||||||
|
|
||||||
|
const projects = [
|
||||||
|
{
|
||||||
|
title: 'Movies',
|
||||||
|
applicationType: 'Android Application (Kotlin)',
|
||||||
|
// tslint:disable-next-line:max-line-length
|
||||||
|
description: '<a href="https://github.com/Stampede10343/Movies_TMDb">Movies</a> is an Android application for viewing movie and TV show info using the TMDB API. Movies is a Single Activity application, leveraging Model-View-View Model, Dagger 2, RxJava and SimpleStack for navigation. There is a focus on caching and a pleasant user experience even on slower networks by combining both in-memory and disk caching for quick load times, especially after a show details have been viewed.',
|
||||||
|
imgLocation: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Secure Notes',
|
||||||
|
applicationType: 'Android Application (Kotlin)',
|
||||||
|
// tslint:disable-next-line:max-line-length
|
||||||
|
description: '<a href="https://github.com/Stampede10343/SecureNotes">Secure Notes</a> is a simple note taking application with security in mind. There is a focus on clean' +
|
||||||
|
' code, Model-View-View Model and loosely coupled components. I built this app to experiment with different' +
|
||||||
|
' Android database libraries (Realm and Room), encryption and security, as well as a single Activity approach to' +
|
||||||
|
' an Android app. (Under development).',
|
||||||
|
imgLocation: '../../assets/note-icon.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'CorpsTime',
|
||||||
|
applicationType: 'Android Application (Java and Kotlin)',
|
||||||
|
description: 'CorpsTime is an Android application to view news, scores and the schedule of Drum Corps International' +
|
||||||
|
' competitions. CorpsTime uses the Model View Presenter pattern and libraries such as Dagger 2, Retrofit and RxJava.',
|
||||||
|
imgLocation: '../../assets/corpstime.png'
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'CorpsTime Scraper and API',
|
||||||
|
applicationType: 'Express API powered by Node (Javascript)',
|
||||||
|
description: 'The CorpsTime scraper and API is the supporting code for the CorpsTime mobile application, written' +
|
||||||
|
' in Javascript using Express, Node, and MySQL to gather and prepare data for the CorpsTime client. The scraper' +
|
||||||
|
' runs nightly during the Drum Corps season to pull data from different websites and store and format it to be' +
|
||||||
|
' later retrieved by the API. The API includes a handful of endpoints to get scores, different competing corps and' +
|
||||||
|
' the upcoming events during the season.',
|
||||||
|
imgLocation: ''
|
||||||
|
},
|
||||||
|
{
|
||||||
|
title: 'Android Hues',
|
||||||
|
applicationType: 'Android Application (Kotlin)',
|
||||||
|
// tslint:disable-next-line:max-line-length
|
||||||
|
description: '<a href="https://github.com/Stampede10343/AndroidHues">Android Hues</a> is an Android application to control your Phillips Hue lights at home. Hues uses RxJava,' +
|
||||||
|
' Dagger 2 and the Phillips Hue SDK in order to control the color, brightness and power state of your lights.',
|
||||||
|
imgLocation: '../../assets/android-hues.png'
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
@Injectable({
|
@Injectable({
|
||||||
providedIn: 'root'
|
providedIn: 'root'
|
||||||
@@ -10,48 +55,7 @@ export class ProjectService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getProjects(): Promise<Array<ProjectItem>> {
|
getProjects(): Promise<Array<ProjectItem>> {
|
||||||
return Promise.resolve(projects)
|
return Promise.resolve(projects);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const projects = [
|
|
||||||
{
|
|
||||||
title: "Movies",
|
|
||||||
applicationType: "Android Application (Kotlin)",
|
|
||||||
description: "<a href='https://github.com/Stampede10343/Movies_TMDb'>Movies</a> is an Android application for viewing movie and TV show info using the TMDB API. Movies is a Single Activity application, leveraging Model-View-View Model, Dagger 2, RxJava and SimpleStack for navigation. There is a focus on caching and a pleasant user experience even on slower networks by combining both in-memory and disk caching for quick load times, especially after a show details have been viewed.",
|
|
||||||
imgLocation: ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Secure Notes",
|
|
||||||
applicationType: "Android Application (Kotlin)",
|
|
||||||
description: "<a href='https://github.com/Stampede10343/SecureNotes'>Secure Notes</a> is a simple note taking application with security in mind. There is a focus on clean" +
|
|
||||||
" code, Model-View-View Model and loosely coupled components. I built this app to experiment with different" +
|
|
||||||
" Android database libraries (Realm and Room), encryption and security, as well as a single Activity approach to" +
|
|
||||||
" an Android app. (Under development).",
|
|
||||||
imgLocation: "../../assets/note-icon.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "CorpsTime",
|
|
||||||
applicationType: "Android Application (Java and Kotlin)",
|
|
||||||
description: "CorpsTime is an Android application to view news, scores and the schedule of Drum Corps International" +
|
|
||||||
" competitions. CorpsTime uses the Model View Presenter pattern and libraries such as Dagger 2, Retrofit and RxJava.",
|
|
||||||
imgLocation: "../../assets/corpstime.png"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "CorpsTime Scraper and API",
|
|
||||||
applicationType: "Express API powered by Node (Javascript)",
|
|
||||||
description: "The CorpsTime scraper and API is the supporting code for the CorpsTime mobile application, written" +
|
|
||||||
" in Javascript using Express, Node, and MySQL to gather and prepare data for the CorpsTime client. The scraper" +
|
|
||||||
" runs nightly during the Drum Corps season to pull data from different websites and store and format it to be" +
|
|
||||||
" later retrieved by the API. The API includes a handful of endpoints to get scores, different competing corps and" +
|
|
||||||
" the upcoming events during the season.",
|
|
||||||
imgLocation: ""
|
|
||||||
},
|
|
||||||
{
|
|
||||||
title: "Android Hues",
|
|
||||||
applicationType: "Android Application (Kotlin)",
|
|
||||||
description: "<a href='https://github.com/Stampede10343/AndroidHues'>Android Hues</a> is an Android application to control your Phillips Hue lights at home. Hues uses RxJava," +
|
|
||||||
" Dagger 2 and the Phillips Hue SDK in order to control the color, brightness and power state of your lights.",
|
|
||||||
imgLocation: "../../assets/android-hues.png"
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||||
|
|
||||||
import {ProjectsComponent} from './projects.component';
|
import {ProjectsComponent} from './projects.component';
|
||||||
import {ProjectKeywordPipe} from "../project-keyword.pipe";
|
import {ProjectKeywordPipe} from '../project-keyword.pipe';
|
||||||
|
|
||||||
describe('ProjectsComponent', () => {
|
describe('ProjectsComponent', () => {
|
||||||
let component: ProjectsComponent;
|
let component: ProjectsComponent;
|
||||||
|
|||||||
@@ -1,10 +1,10 @@
|
|||||||
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
import {async, ComponentFixture, TestBed} from '@angular/core/testing';
|
||||||
|
|
||||||
import {ToolbarComponent} from './toolbar.component';
|
import {ToolbarComponent} from './toolbar.component';
|
||||||
import { MatSidenavModule } from "@angular/material/sidenav";
|
import { MatSidenavModule } from '@angular/material/sidenav';
|
||||||
import { MatToolbarModule } from "@angular/material/toolbar";
|
import { MatToolbarModule } from '@angular/material/toolbar';
|
||||||
import {RouterTestingModule} from "@angular/router/testing";
|
import {RouterTestingModule} from '@angular/router/testing';
|
||||||
import {Component} from "@angular/core";
|
import {Component} from '@angular/core';
|
||||||
|
|
||||||
@Component({template: ''})
|
@Component({template: ''})
|
||||||
class DummyComponent {
|
class DummyComponent {
|
||||||
@@ -36,12 +36,12 @@ describe('ToolbarComponent', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should contain a material toolbar', () => {
|
it('should contain a material toolbar', () => {
|
||||||
expect(fixture.debugElement.children[0].nativeElement.className).toBe("mat-drawer-container mat-sidenav-container")
|
expect(fixture.debugElement.children[0].nativeElement.className).toBe('mat-drawer-container mat-sidenav-container');
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should contain 4 links, Home, Resume, Projects, Contact', () => {
|
it('should contain 4 links, Home, Resume, Projects, Contact', () => {
|
||||||
let debugElements = fixture.debugElement.queryAll((element) => {
|
const debugElements = fixture.debugElement.queryAll((element) => {
|
||||||
return element.nativeElement.className.indexOf("mat-toolbar") != -1;
|
return element.nativeElement.className.indexOf('mat-toolbar') !== -1;
|
||||||
});
|
});
|
||||||
|
|
||||||
expect(debugElements[0].children.length).toBe(4);
|
expect(debugElements[0].children.length).toBe(4);
|
||||||
|
|||||||
Reference in New Issue
Block a user