{"_id":"@open-xchange/shared-grunt-config","_rev":"28-f3ead1b27235e379156c22ed63ca1b2c","name":"@open-xchange/shared-grunt-config","dist-tags":{"next":"0.15.0-pre5","latest":"0.17.0"},"versions":{"0.15.0-pre5":{"name":"@open-xchange/shared-grunt-config","version":"0.15.0-pre5","license":"MIT","_id":"@open-xchange/shared-grunt-config@0.15.0-pre5","maintainers":[{"name":"johnyb","email":"julian@svg4all.de"},{"name":"davidbauer","email":"david.bauer@open-xchange.com"},{"name":"richard.petersen","email":"richard.petersen@open-xchange.com"},{"name":"solygen","email":"frank@solygen.de"}],"homepage":"https://github.com/Open-Xchange-Frontend/shared-grunt-config#readme","bugs":{"url":"https://github.com/Open-Xchange-Frontend/shared-grunt-config/issues"},"dist":{"shasum":"3b581d526ec7d51b90fbc4b9884e35db1e316793","tarball":"https://registry.npmjs.org/@open-xchange/shared-grunt-config/-/shared-grunt-config-0.15.0-pre5.tgz","fileCount":33,"integrity":"sha512-dhzXEIse86qRYzDM3rG9fs0/+BPEvGOEi7nR7Dr/ZJgqT3WzRjG7KANN72mvMNXDQHji0mmEiBaW52q/6P3Q7Q==","signatures":[{"sig":"MEYCIQDyD0bSh6wl12JSTwfmy7Re4LNS7owWxR6fEy6Ymm3xvQIhAOptG1IiJ8TqjqO6ZJPF4KdpHbobHwSPzoDuZCxU9Jon","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":131074,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJcQFU1CRA9TVsSAnZWagAAs8EP/iiwkAUfstQt/VdPmLpf\nrsVLAGMFjaRle9sItfNP+T5CNVvGoEBF07o4Fda7wBkN6avwPGbSuMuzfq5f\naVG+bzW6pYa4sAsnv1mOovWvUOtmL1Gwz4Dq8cLREPTXewAc0mw8/EqcxSpm\nMPJ1TB2nJcOSAEbBvUCJ09Xjv0QQHp96bDENK95X6k9D/U/eNkMUChWy0Uoo\npLnfi+QSkf5kZjyk8iUvrKt0t10ebRlJ0YoJgF6DpYrIWvxJef0naLcmn0K8\nz92bAY8v9n9+27xD7I0FNGFFponI5jV/hYWWaondhCHDI1Dyx9cAC5Hb8ZCN\nm3+1yLR3cxagu+E5ZLKRhPTQGkCb3NKiYXiwBt4+EJJlXGC/EJ6zBuoeQocj\nB6ZqwlEhBToogZJ8O3foYeWuMMIvdvXm17lGtG0hZ76jLP1hD9P3GwSkgbB0\nBMEsQrqEOoiVk0OY47Oycz2pc+bBL6L1U3yppaBKs0XXoGm3t+1CKduwqTQz\n7vimStVrlg5gMZ/LfnuG53zO9OHkDFjs+M593Lf154+bMu111nIpd/bNxd4i\n0gxygNYkqOMQCZBUVAWOCq92jGrhDZZjw6A4gHQmbRO82jSe304SiQ6tbkNv\nvQi0N3EOGdkLJAdizulTFTtX4spRcUM1R91rDSiG1nq8hUMJq6B9TOIFn03F\nFFa5\r\n=uw1v\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"d0a19b9aa21697a177773d1e34bfe20a18f34280","scripts":{"test":"node -e 'require(\"grunt\").cli()'"},"_npmUser":{"name":"johnyb","email":"julian@svg4all.de"},"repository":{"url":"git+https://github.com/Open-Xchange-Frontend/shared-grunt-config.git","type":"git"},"_npmVersion":"6.4.1","description":"[![Build Status](https://travis-ci.org/Open-Xchange-Frontend/shared-grunt-config.svg)](https://travis-ci.org/Open-Xchange-Frontend/shared-grunt-config)","directories":{},"_nodeVersion":"10.15.0","dependencies":{"async":"^2.4.1"},"_hasShrinkwrap":false,"devDependencies":{"grunt":"^1.0.1","grunt-bump":"^0.8.0","grunt-eslint":"^20.0.0"},"peerDependencies":{"grunt":">=0.4.5","grunt-bump":">=0.0.13","underscore":">=1.7.0","grunt-newer":">=0.7.0","grunt-eslint":">=20.0.0","assemble-less":">=0.7.0","grunt-contrib-copy":">=0.6.0","grunt-contrib-clean":">=0.6.0","grunt-contrib-concat":">=0.5.0","grunt-contrib-uglify":">=0.6.0","grunt-require-gettext":">=0.6.0","grunt-check-dependencies":">=0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/shared-grunt-config_0.15.0-pre5_1547719989145_0.4727583159843196","host":"s3://npm-registry-packages"}},"0.15.0-pre6":{"name":"@open-xchange/shared-grunt-config","version":"0.15.0-pre6","license":"MIT","_id":"@open-xchange/shared-grunt-config@0.15.0-pre6","maintainers":[{"name":"johnyb","email":"julian@svg4all.de"},{"name":"davidbauer","email":"david.bauer@open-xchange.com"},{"name":"richard.petersen","email":"richard.petersen@open-xchange.com"},{"name":"solygen","email":"frank@solygen.de"},{"name":"alexquast","email":"alexander.quast@open-xchange.com"},{"name":"d.haus","email":"haus.06@gmx.de"}],"homepage":"https://github.com/Open-Xchange-Frontend/shared-grunt-config#readme","bugs":{"url":"https://github.com/Open-Xchange-Frontend/shared-grunt-config/issues"},"dist":{"shasum":"c66865ca39e058ff55e365b65044fdfc05b71192","tarball":"https://registry.npmjs.org/@open-xchange/shared-grunt-config/-/shared-grunt-config-0.15.0-pre6.tgz","fileCount":32,"integrity":"sha512-BQ6F4gGekKRXPWx933B7jGJLFFfVveAq8iwIlk5A241VCeB3tVLk2eQcXXPJ2WJiHH0IaK4217B3iAW6+FoFqQ==","signatures":[{"sig":"MEQCIGnix4si76UzxvppCF9pK3AAXLZlqfpEvmCR62+vVy7VAiA2k9CNR0zdp7svKB/lJEw2q6mQzUBmynQ6Xp6FI2BMaA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":90558,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2UcbCRA9TVsSAnZWagAA1xcP/j//gYU973Zw09u+SvoU\nnjcjXBw0ST5nms7bR6S25USO5s9JkJYHh1ixpk0n98WXjBUj9pUzELsAW/yn\nUHxHbC2ZHPHJ2vBR2VcbLgNhupUeRbVQXzd4KojGOg7PCNMTe1fp+PZi6Wgj\n0jSLcu7I8OzSLuc88in1mGpuDzqWjimZEDrcQkUGPt1oRiY7+0XFbUiGL1f5\nwftykGanwy++5mFe/p/ZtOSY6nuygs0AJfXo70vOuqLEzHq/868cueYCQnCp\nq9LI1vz1s4M2xxZx4sZ2hrd87XBX9by+k4/1ykYP+EKUq9ziLG9Y9Dpd9s9H\nbGmbp5e4o5+ZSYQ3pwwhxy2IPIO3b6QFJ9j1e/m+Z8n64i9uYWQz7Hzq0rBw\nD2C7QuJDdV9aZj78TjKsRnJn0pNFb92g1Cud/kkRWCcpKZiCFyCmFhfn+/Ec\nZ06BQb+cJLTeZdCws+jTSj/Gs7/Vd5zJJ3TQsfHoS5rabd3EPwAim7M+XrGH\nvih9SpZY0U7JLhkLxS4C+8MlBD8MIpc4WF7DJIGzQsF6RnmuAQNFKgAcX35F\nLX5ue4/6Ox0rQkXsp+qFNK8w/5S7BA9yGl2JzmyO+kuG1HJDT9a1NHSwhVwe\nB5rRPzSstM75JWjFwfHeRt5+H2TVZTR7HyN0NP40CQxgtJX8hnu7KRbHnfK4\nbAZs\r\n=wd0Y\r\n-----END PGP SIGNATURE-----\r\n"},"gitHead":"9aaaee04de4cd9a6b09dc8852ecbc517f9de3dff","scripts":{"test":"node -e 'require(\"grunt\").cli()'"},"_npmUser":{"name":"johnyb","email":"julian@svg4all.de"},"repository":{"url":"git+https://github.com/Open-Xchange-Frontend/shared-grunt-config.git","type":"git"},"_npmVersion":"7.5.1","description":"[![Build Status](https://travis-ci.org/Open-Xchange-Frontend/shared-grunt-config.svg)](https://travis-ci.org/Open-Xchange-Frontend/shared-grunt-config)","directories":{},"_nodeVersion":"15.8.0","dependencies":{"async":"^2.4.1"},"_hasShrinkwrap":false,"devDependencies":{"grunt":"^1.0.1","grunt-bump":"^0.8.0","grunt-eslint":"^20.0.0"},"peerDependencies":{"grunt":">=0.4.5","grunt-bump":">=0.0.13","grunt-newer":">=0.7.0","grunt-eslint":">=20.0.0","assemble-less":">=0.7.0","grunt-contrib-copy":">=0.6.0","grunt-contrib-clean":">=0.6.0","grunt-contrib-concat":">=0.5.0","grunt-contrib-uglify":">=0.6.0","grunt-require-gettext":">=0.6.0","grunt-check-dependencies":">=0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/shared-grunt-config_0.15.0-pre6_1614952705009_0.3883031023592267","host":"s3://npm-registry-packages"}},"0.15.0-pre7":{"name":"@open-xchange/shared-grunt-config","version":"0.15.0-pre7","license":"MIT","_id":"@open-xchange/shared-grunt-config@0.15.0-pre7","maintainers":[{"name":"tran-dong.tran","email":"tran-dong.tran@open-xchange.com"},{"name":"bjoern.koester","email":"bjoern.koester@open-xchange.com"},{"name":"hydrair","email":"holznudelholz@gmail.com"},{"name":"moritz.bach","email":"moritz.bach@open-xchange.com"},{"name":"andree","email":"mail@andr.ee"},{"name":"anne.matthes","email":"anne.matthes@open-xchange.com"},{"name":"johnyb","email":"julian@svg4all.de"},{"name":"davidbauer","email":"david.bauer@open-xchange.com"},{"name":"solygen","email":"frank@solygen.de"},{"name":"daniel.rentz","email":"daniel.rentz@gmx.de"},{"name":"alexquast","email":"alexander.quast@open-xchange.com"},{"name":"d.haus","email":"haus.06@gmx.de"},{"name":"maik.schaefer","email":"maik.schaefer1091@gmail.com"},{"name":"jjacobsohn","email":"johann.jacobsohn@open-xchange.com"}],"homepage":"https://github.com/Open-Xchange-Frontend/shared-grunt-config#readme","bugs":{"url":"https://github.com/Open-Xchange-Frontend/shared-grunt-config/issues"},"dist":{"shasum":"26252c55191d77e7823d7ac77c36e2a83f89ef24","tarball":"https://registry.npmjs.org/@open-xchange/shared-grunt-config/-/shared-grunt-config-0.15.0-pre7.tgz","fileCount":32,"integrity":"sha512-CeVypNMRbyKURCTSeojwtfCAhSOq8JJ1fFUuPPQ515+XXZyK+smyjTpRjpOWUbIlVRVsVlSCNlcxQjy46ZzXuA==","signatures":[{"sig":"MEYCIQDX/DzOm7SKdbAbz6wioY59/TykvKw9Y2Uqnb9GfzXYcAIhANmtJg97aY1M03APFhHCjYA0B3bRFiXTQfjYy7boWpGa","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":92937},"gitHead":"4aab2637f28eb3c58b84f85011757823af49e150","scripts":{"test":"node -e 'require(\"grunt\").cli()'"},"_npmUser":{"name":"johnyb","email":"julian@svg4all.de"},"repository":{"url":"git+https://github.com/Open-Xchange-Frontend/shared-grunt-config.git","type":"git"},"_npmVersion":"9.7.2","description":"[![Build Status](https://travis-ci.org/Open-Xchange-Frontend/shared-grunt-config.svg)](https://travis-ci.org/Open-Xchange-Frontend/shared-grunt-config)","directories":{},"_nodeVersion":"20.4.0","dependencies":{"async":"^2.4.1","proxy-agent":"^6.2.1"},"_hasShrinkwrap":false,"devDependencies":{"grunt":"^1.0.1","grunt-bump":"^0.8.0","grunt-eslint":"^20.0.0"},"peerDependencies":{"grunt":">=0.4.5","grunt-bump":">=0.0.13","grunt-newer":">=0.7.0","grunt-eslint":">=20.0.0","assemble-less":">=0.7.0","grunt-contrib-copy":">=0.6.0","grunt-contrib-clean":">=0.6.0","grunt-contrib-concat":">=0.5.0","grunt-contrib-uglify":">=0.6.0","grunt-require-gettext":">=0.6.0","grunt-check-dependencies":">=0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/shared-grunt-config_0.15.0-pre7_1689244056340_0.5428161996401404","host":"s3://npm-registry-packages"}},"0.16.0":{"name":"@open-xchange/shared-grunt-config","version":"0.16.0","license":"MIT","_id":"@open-xchange/shared-grunt-config@0.16.0","maintainers":[{"name":"moritz.bach","email":"moritz.bach@open-xchange.com"},{"name":"johnyb","email":"julian@svg4all.de"},{"name":"davidbauer","email":"david.bauer@open-xchange.com"},{"name":"solygen","email":"frank@solygen.de"},{"name":"daniel.rentz","email":"daniel.rentz@gmx.de"},{"name":"alexquast","email":"alexander.quast@open-xchange.com"},{"name":"d.haus","email":"haus.06@gmx.de"},{"name":"maik.schaefer","email":"maik.schaefer1091@gmail.com"},{"name":"anne.matthes","email":"anne.matthes@open-xchange.com"},{"name":"andree","email":"mail@andr.ee"},{"name":"tran-dong.tran","email":"tran-dong.tran@open-xchange.com"},{"name":"bjoern.koester","email":"bjoern.koester@open-xchange.com"},{"name":"ox-kaci","email":"kawa.acikgoez@open-xchange.com"},{"name":"mbiggeleben","email":"biggeleben@gmail.com"}],"homepage":"https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config#readme","bugs":{"url":"https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config/issues"},"dist":{"shasum":"db3f8274a6124437682f66589a1ee969c7b0c4f9","tarball":"https://registry.npmjs.org/@open-xchange/shared-grunt-config/-/shared-grunt-config-0.16.0.tgz","fileCount":26,"integrity":"sha512-vzj1aQIylbReaUaWxElMPQYvXlJgHFwEQ0ef2Ffb2M/moQ5lzEZVQhG8fanySBVVQUSQ+weYuu4AAe1PPNtr6A==","signatures":[{"sig":"MEUCIQDkQUV99gf1J3GwajatB8coqUk4Cu9GgxKoiYxH/r2gIgIgQoq8Y5MzWXijoRjLZ8IUKwJvdYksXmhiDj3zfa/tIww=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80558},"gitHead":"6e5aba1b76a8c35a3d4a2ff412e3ad480e6b43ed","_npmUser":{"name":"davidbauer","email":"david.bauer@open-xchange.com"},"repository":{"url":"git+https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config.git","type":"git"},"_npmVersion":"11.7.0","description":"This shared configuration can be used to develop modules for the Open-Xchange Appsuite UI.","directories":{},"resolutions":{"braces":">=3.0.3","semver":">=7.5.4","word-wrap":">=1.2.4","micromatch":">=4.0.8"},"_nodeVersion":"25.3.0","dependencies":{"async":"^3.2.6","proxy-agent":"^6.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"grunt":">=0.4.5","grunt-bump":">=0.0.13","grunt-newer":">=0.7.0","assemble-less":">=0.7.0","grunt-contrib-copy":">=0.6.0","grunt-contrib-clean":">=0.6.0","grunt-contrib-concat":">=0.5.0","grunt-contrib-uglify":">=0.6.0","grunt-require-gettext":">=0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/shared-grunt-config_0.16.0_1768999429135_0.27081632146460377","host":"s3://npm-registry-packages-npm-production"}},"0.17.0":{"name":"@open-xchange/shared-grunt-config","version":"0.17.0","license":"MIT","_id":"@open-xchange/shared-grunt-config@0.17.0","maintainers":[{"name":"moritz.bach","email":"moritz.bach@open-xchange.com"},{"name":"johnyb","email":"julian@svg4all.de"},{"name":"davidbauer","email":"david.bauer@open-xchange.com"},{"name":"solygen","email":"frank@solygen.de"},{"name":"daniel.rentz","email":"daniel.rentz@gmx.de"},{"name":"alexquast","email":"alexander.quast@open-xchange.com"},{"name":"d.haus","email":"haus.06@gmx.de"},{"name":"maik.schaefer","email":"maik.schaefer1091@gmail.com"},{"name":"anne.matthes","email":"anne.matthes@open-xchange.com"},{"name":"andree","email":"mail@andr.ee"},{"name":"tran-dong.tran","email":"tran-dong.tran@open-xchange.com"},{"name":"bjoern.koester","email":"bjoern.koester@open-xchange.com"},{"name":"ox-kaci","email":"kawa.acikgoez@open-xchange.com"},{"name":"mbiggeleben","email":"biggeleben@gmail.com"}],"homepage":"https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config#readme","bugs":{"url":"https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config/issues"},"dist":{"shasum":"e6100107c7a6146d77b054c3d870bdc975e0b00e","tarball":"https://registry.npmjs.org/@open-xchange/shared-grunt-config/-/shared-grunt-config-0.17.0.tgz","fileCount":25,"integrity":"sha512-2agwqLNsXUy04oXfY88DemYjO559Bdp08Px6fYw5imxKn3+gV9KXalDrqFDDb99Z2q+Atu9UZsdK4pSdAFDwxg==","signatures":[{"sig":"MEYCIQCpteWuecZGp1hcT+FcrN4rwMwBo8LUSWUJS7tOW2laQAIhAMUV8fU5/WcfA35m61N1lMDbxM5FjW4OKzRid39Yxlek","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":80056},"gitHead":"e76511508a15946bc4738782045143e2df4623e1","_npmUser":{"name":"davidbauer","email":"david.bauer@open-xchange.com"},"repository":{"url":"git+https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config.git","type":"git"},"_npmVersion":"11.7.0","description":"This shared configuration can be used to develop modules for the Open-Xchange Appsuite UI.","directories":{},"resolutions":{"braces":">=3.0.3","semver":">=7.5.4","word-wrap":">=1.2.4","micromatch":">=4.0.8"},"_nodeVersion":"25.3.0","dependencies":{"async":"^3.2.6","proxy-agent":"^6.5.0"},"_hasShrinkwrap":false,"peerDependencies":{"grunt":">=0.4.5","grunt-newer":">=0.7.0","assemble-less":">=0.7.0","grunt-contrib-copy":">=0.6.0","grunt-contrib-clean":">=0.6.0","grunt-contrib-concat":">=0.5.0","grunt-contrib-uglify":">=0.6.0","grunt-require-gettext":">=0.6.0"},"_npmOperationalInternal":{"tmp":"tmp/shared-grunt-config_0.17.0_1769080225525_0.757148795863438","host":"s3://npm-registry-packages-npm-production"}}},"time":{"created":"2019-01-17T10:13:09.014Z","modified":"2026-05-12T13:32:10.284Z","0.15.0-pre4":"2019-01-17T10:03:41.725Z","0.15.0-pre5":"2019-01-17T10:13:09.303Z","0.15.0-pre6":"2021-03-05T13:58:25.148Z","0.15.0-pre7":"2023-07-13T10:27:36.569Z","0.16.0":"2026-01-21T12:43:49.278Z","0.17.0":"2026-01-22T11:10:25.653Z"},"bugs":{"url":"https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config/issues"},"license":"MIT","homepage":"https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config#readme","repository":{"url":"git+https://gitlab.com/openxchange/appsuite/gen-7/shared-grunt-config.git","type":"git"},"description":"This shared configuration can be used to develop modules for the Open-Xchange Appsuite UI.","maintainers":[{"email":"julian@svg4all.de","name":"johnyb"},{"email":"david.bauer@open-xchange.com","name":"davidbauer"},{"email":"frank@solygen.de","name":"solygen"},{"email":"daniel.rentz@gmx.de","name":"daniel.rentz"},{"email":"alexander.quast@open-xchange.com","name":"alexquast"},{"email":"haus.06@gmx.de","name":"d.haus"},{"email":"maik.schaefer1091@gmail.com","name":"maik.schaefer"},{"email":"mail@andr.ee","name":"andree"},{"email":"bjoern.koester@open-xchange.com","name":"bjoern.koester"},{"email":"biggeleben@gmail.com","name":"mbiggeleben"}],"readme":"# Shared Open-Xchange Appsuite UI module grunt configuration\n\nThis shared configuration can be used to develop modules for the Open-Xchange Appsuite UI.\n\nTo enable the shared tasks, they need to be loaded in your local `Gruntfile.js`. For this to work, you need to\n\n```\nnpm install --save-dev @open-xchange/shared-grunt-config\n```\n\nThis will add the shared configuration as a dependency to your project and install it.\n\nOur recommended `Gruntfile.js` looks like this:\n\n```\n'use strict';\n\nmodule.exports = function (grunt) {\n    grunt.loadNpmTasks('@open-xchange/shared-grunt-config');\n\n    // load custom tasks\n    // those can be used to override configuration from shared-grunt-config\n    if (grunt.file.isDir('grunt/tasks/')) {\n        grunt.loadTasks('grunt/tasks/');\n    }\n};\n```\n\nThe important line is `grunt.loadNpmTasks('@open-xchange/shared-grunt-config');`, which will actually load all the shared tasks.\n\n# Tasks\n\nFind here a few tasks that might be useful during development of an Open-Xchange Appsuite UI module.\n\nSome of the tasks are only available, if some dependencies are present in the `node_modules/` directory of the project using\nthis shared configuration.\n\n### default\n\nThis task will run the [build](#build) task, to provide a runnable version of the software in the `build/` directory.\n\n### build\n\nThis is a collection of tasks needed to actually build the module. Currently it will run all `copy:build_*` tasks, run all `concat` tasks, run all `less` tasks and run `compile_po` to generate i18n JavaScript modules from po files in `i18n/`.\n\n### create_pot\n\nExtract strings that are used by the `require-gettext` module (gt) from the JavaScript files and store them in `i18n/ox.pot`.\nThis files can be used by translators to create language specific po files to enable translation.\n\n### dist\n\nCreate a distribution ready version in the `dist/` directory. Everything from this directory can later on\nbe copied over to a prefix directory and will be served correctly from there. So this directory contains\nthe final directory structure that just needs to be copied over to the destination.\n\n### clean\n\nRemove all files created temporarily during development. Installed dependencies (`node_modules/`) are\nnot counted as such temporary files. Those have to be removed manually, if needed.\n\n### install:dist\n\nRun all install tasks for production. Currently, this is an alias to run both, `install:static` and `install:dynamic` tasks.\n\n### install:static\n\nInstall all files which should be distributed (generated by the `dist` task into `dist/` directory) into the directory specified\nwith the `--htdoc` command line option.\nAll provided files can now be served statically by a Webserver.\nThis task is not strictly needed if no static files are supposed to be served.\nIn order to deactivate this task, this can be overriden in a project by placing a file into `grunt/tasks` directory:\n\n```JavaScript\nmodule.exports = function (grunt) {\n    // disable install:static\n    // we do not need any static files served by the Webserver\n    grunt.registerTask('install:static', []);\n};\n```\n\nExample:\n\n```shell\ngrunt dist install:static --htdoc=/var/www/\n```\n\n### install:dynamic\n\nInstall all files which should be distributed (generated by the `dist` task into `dist/` directory) into the directory specified\nwith the `--prefix` command line option.\nAll files provided by this task are supposed to be available to a middleware component for dynamic consumption.\n\nExample:\n\n```shell\ngrunt dist install:dynamic --prefix=/opt/open-xchange/\n```\n\n### bump\n\nUse [grunt-bump](https://github.com/vojtajina/grunt-bump) to manage versioning of the project.\n\n### less\n\nIn order to have local less files compiled against a default theme, you\nwould need to provide a `coreDir` variable. This can be provided via\ncommand line or via a file in `grunt/local.conf.json`. This `coreDir`\nvariable needs to point to a directory containing core less files, like\na distributed version of the core UI or the core UI repository itself.\n\nIn order to build local less files against more themes, those will also be looked up from directories specified in\nthe `appserver.prefixes` array (local.conf).\n\n## Development tasks (optional)\n\nThose tasks are only available, if the following dependencies are installed:\n\n* @open-xchange/appserver\n* grunt-contrib-connect\n* grunt-contrib-watch\n\n### dev\n\nThis task will start the [MITM (appserver) proxy](#connect) at http://localhost:8337 and serve the `build/` directory by\ndefault. It will also start a karma server ready to run the unit tests. It will then start the [watch](#watch)\ntask to watch the directory for changes and act on them.\n\n### connect\n\nStart a MITM (appserver) proxy serving the `build/` directory by default. It will also start a livereload server, so\nit is possible to trigger a reload event to all browsers that are connected to the server.\n\nOnly useful to run in combination with the watch task, like `grunt connect watch`. See [serve](#serve) for a\nstand-alone version of this task.\n\n#### Activating a proxy server\n\nSometimes, a production setup requires to have correct host names setup and be used to develop or debug against a system.\nIn such cases, it is possible to activate a proxy server that will send certain requests through the MITM (appserver) proxy\nand proxy all other requests directly like *real* proxy servers (like squid) do.\n\nIn `grunt/local.conf.json` just add an entry `\"proxy\": true` to start a proxy server at the default port (8080). Instead of\n`true`, a custom port number might be specified.\n\nOnce the `connect:proxy` task is running, a browsers proxy settings might be configured to use `localhost:8080` as a proxy\nserver for HTTP(S) traffic.\n\nDrawback: when using the proxy server, _livereload_ middleware can not be used, yet. A browser plugin for livereload would\nbe needed in such cases, or reloads must be triggered manually.\n\n#### Using HTTPS\n\nTo configure HTTPS protocol for the development server, switch to `\"protocol\": \"https\"` in `appserver` section of\n`grunt/local.conf.json`.\nAdditionally, values for `key`, `cert` and `ca` can be provided.\nThose will be added to the configuration of the `connect:server` subtask as documented for\n[grunt-connect](https://github.com/gruntjs/grunt-contrib-connect#support-for-https).\nThe default settings are:\n\n```\n{\n  \"key\": \"ssl/host.key\",\n  \"cert\": \"ssl/host.crt\",\n  \"ca\": \"ssl/rootCA.crt\"\n}\n```\n\nThose values might point to files that are automatically read or raw PEM data.\n\n### watch\n\nWatch certain directories for changes and trigger tasks when any change happens. This will trigger a [build](#build),\nonce any of the source files have changed, then it will send a livereload event to all browsers connected to the\nMITM (appserver) proxy and finally it will issue a [test run](#testrun).\n\nIf some grunt configuration changes, grunt will reload itself.\n\nIf some files in the `spec/` directory changes, those will be copied to the `build/` directory and a [test run](#testrun)\nwill be initiated.\n\n### refresh\n\nForce a reload of the UI (incl. cache busting) in a browser that has a connection to a running livereload server.\nThis helps during development, if `grunt dev` is used (or at least the watch task is running). A call to\n`grunt refresh` will then reload the browser window with the latest code served by the connect middleware.\n\n### serve\n\nRun the [connect](#connect) task but wait for ever after the server has been started. Use this to run a MITM proxy\nwithout the [watch](#watch) task.\n\n### install\n\nIn order to test files in semi-production environments before `uglify` task has run, all files from `build/` directory can\nbe installed to some arbitrary location using this task.\nThe `--dest` command line option is mandatory in this case.\n\nExample:\n\n```shell\ngrunt default install --dest=~/public_html/appsuite/\n```\n\n## Troubleshooting (repair) tasks (optional)\n\nThose tasks do not have any new direct dependencies, but are targeting the tasks used for development.\nThe intention behind those tasks is to support detection of common pitfalls and repair them if possible.\nNone of those tasks will do any destructive operation, except when called with the `--force` option.\n\n### repair:npm\n\nWipe the `node_modules/` directory followed by an `npm install`.\n\n### repair:check_insecure_tls\n\nCheck for potential problems with TLS connections and the appserver proxy component.\nSometimes, the server to develop against does not provide valid TLS certificates.\nBe it, because it is a development machine, or for any other reason.\nIn order to still use the server, there is a new option, allowing to accept untrusted connections\nin the proxy server.\n\nTo reset this to the default, remove `appserver.rejectUnauthorized` option  from `grunt/local.conf.json` or set it to `true`.\n\n### repair:check_local_conf\n\nMake sure the file `grunt/local.conf.json` exists.\nThis will create the file with a default configuration, if it did not exist.\nIt will **not** overwrite any custom configuration.\n\n### repair:check\n\nRun all the `repair:check_*` tasks mentioned above.\n\n### repair\n\nRun all `repair:*` tasks mentioned above.\nUse the `--read-only` option for a \"read-only\" version, which will just print out potential problems.\n\n## (Unit-)Testing (optional)\n\nThose tasks are only available, if the following dependencies are installed:\n\n* grunt-karma\n\n### karma:continuous\n\nRun all tests from `spec/` directory once in headless Chrome browser.\n\n### karma:serve\n\nStart an instance of the karma test server and wait for browsers connecting to http://localhost:9876.\n\n### testrun\n\nStart a testrun on a running [testserver](#karma:serve) and run the tests on all browsers connected to\nhttp://localhost:9876. It will skip the testrun, if no server is found running.\n\n## I18n (optional)\n\nThose tasks are only available, if the following dependencies are installed:\n\n* grunt-exec\n* gettext tools installed globally (msgmerge)\n\n### msgmerge\n\nPerform a msgmerge operation in the `i18n/` directory. This will merge all\nchanges from the pot file in the `i18n/` directory into all po files found.\n\n","readmeFilename":"README.md"}