Compare commits
16 Commits
Author | SHA1 | Date | |
---|---|---|---|
b769dcae4f | |||
7b58535dda | |||
f16103a632 | |||
befed099c5 | |||
6c0fa380a9 | |||
22de2c784f | |||
e8fe4f1720 | |||
d7443bbf17 | |||
c4668bc0a6 | |||
bc489b6bf3 | |||
e2d0a7a939 | |||
0f5e451e60 | |||
3595bf3590 | |||
efe73d0fd0 | |||
c52322ec12 | |||
b7cf9949bf |
11
CHANGELOG
11
CHANGELOG
@ -1,11 +0,0 @@
|
||||
Please view this file on the master branch, on stable branches it's out of date.
|
||||
|
||||
v 6.0.0 (released)
|
||||
- remove TypeDoc, please look at npmpage
|
||||
- check package.json
|
||||
|
||||
v 7.0.0
|
||||
- switch from mocha to tap
|
||||
- run tests in SubProcesses with coverage
|
||||
- improve ES6 handling
|
||||
- add smartanalytics
|
3
dist/mod02/index.js
vendored
3
dist/mod02/index.js
vendored
@ -37,9 +37,6 @@ let tap = function (configArg) {
|
||||
experimentalDecorators: true,
|
||||
lib: ['DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable']
|
||||
}),
|
||||
plugins.gulpFunction.forEach((file) => __awaiter(this, void 0, void 0, function* () {
|
||||
file.path = file.path.replace(paths.tsDir, paths.distDir);
|
||||
})),
|
||||
plugins.gulpSourcemaps.write(),
|
||||
npmtsTapBuffer.pipeTestableFiles(),
|
||||
plugins.smartstream.cleanPipe()
|
||||
|
9
docs/changelog.md
Normal file
9
docs/changelog.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Changelog
|
||||
|
||||
## 2017-07-30: Version 7.x.x -> 8.x.x
|
||||
Testfiles in ./test/ can now import files directly from the ts dir:
|
||||
|
||||
```javascript
|
||||
// ./test/test.ts
|
||||
import * as myModule from '../ts/index
|
||||
```
|
@ -39,11 +39,12 @@ with default behaviour.
|
||||
|
||||
| key | default value | description |
|
||||
| --- | --- | --- |
|
||||
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify |
|
||||
| `"mode"` | `"default"` | "default" will do default stuff and override , "custom" only does what you specify, "merge" will merge default options with whatever you specify on your own |
|
||||
| `"test"` | `true` | test your module |
|
||||
| `"ts"` | `{"./ts/*.ts":"./","./test/test.ts":"./test/"}` | allows you to define multiple ts portions |
|
||||
| `"tsOptions"` | `{"target":"ES5", "declaration":"true"}` | specify options for tsc |
|
||||
| `"cli"` | "false" | some modules are designed to be used from cli. If set to true NPMTS will create a cli.js that wires you dist files up for cli use. |
|
||||
| `"cli"` | `"false"` | some modules are designed to be used from cli. If set to true NPMTS will create a cli.js that wires you dist files up for cli use. |
|
||||
| `"testConfig"` | `{ parallel: true, coverage: true }` | allows you to control test behaviour. `"parallel"` controls wether testfiles are run sequentially or in parallel, and `"coverage` wether to create coverage reports |
|
||||
|
||||
### TypeScript
|
||||
by default npmts looks for `./ts/*.ts` and `./test/test.ts` that will compile to
|
||||
|
38
docs/getstarted.md
Normal file
38
docs/getstarted.md
Normal file
@ -0,0 +1,38 @@
|
||||
---
|
||||
name: Get Started
|
||||
description: learn how to quickly write npm TypeScript modules
|
||||
---
|
||||
# Get Started with NPMTS
|
||||
and learn how to quickly write npm TypeScript modules
|
||||
|
||||
## Step1: Install the tools
|
||||
|
||||
To use npmts install it using npm or yarn:
|
||||
|
||||
```sh
|
||||
npm install -g npmts # install with npm
|
||||
yarn global add npmts # install with yarn
|
||||
```
|
||||
|
||||
For the purpose of getting started quickly please also install **gitzone**.
|
||||
It'll proovide awesome scaffolding for new npmts maintained modules and also updates them later on.
|
||||
|
||||
```sh
|
||||
npm install -g gitzone # install with npm
|
||||
yarn global add gitzone # install with yarn
|
||||
```
|
||||
|
||||
You can make sure npmts and gitzone are installed correctly by typing `npmts -v && gitzone -v`.
|
||||
|
||||
## Scaffold a new module
|
||||
|
||||
To scaffold a new module type
|
||||
|
||||
```shell
|
||||
gitzone template npm
|
||||
```
|
||||
|
||||
This will run you through a series of question to get gitzone to know the specifics of your module.
|
||||
Enter all information accordingly.
|
||||
|
||||
## Run NPMTS for the first time
|
@ -1,8 +1,9 @@
|
||||
---
|
||||
name: Start
|
||||
name: Index
|
||||
description: best practice npm TypeScript modules
|
||||
---
|
||||
# npmts
|
||||
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
|
||||
best practice npm TypeScript modules
|
||||
|
||||
## Availabililty
|
||||
[](https://www.npmjs.com/package/npmts)
|
||||
|
2745
package-lock.json
generated
2745
package-lock.json
generated
File diff suppressed because it is too large
Load Diff
10
package.json
10
package.json
@ -1,7 +1,7 @@
|
||||
{
|
||||
"name": "npmts",
|
||||
"version": "7.2.8",
|
||||
"description": "Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.",
|
||||
"version": "8.0.4",
|
||||
"description": "best practice npm TypeScript modules",
|
||||
"main": "dist/index.js",
|
||||
"bin": {
|
||||
"npmts": "assets/cliNpmts.js"
|
||||
@ -51,14 +51,14 @@
|
||||
"smartcli": "^2.0.7",
|
||||
"smartcov": "^1.0.2",
|
||||
"smarterror": "^1.0.3",
|
||||
"smartfile": "^4.2.17",
|
||||
"smartfile": "^4.2.18",
|
||||
"smartgulp": "^1.0.6",
|
||||
"smartpath": "^3.2.8",
|
||||
"smartq": "^1.1.6",
|
||||
"smartstream": "^1.0.10",
|
||||
"smartstring": "^2.0.24",
|
||||
"smartsystem": "^1.0.18",
|
||||
"tapbuffer": "^1.0.24",
|
||||
"smartsystem": "^2.0.2",
|
||||
"tapbuffer": "^1.0.29",
|
||||
"through2": "^2.0.3",
|
||||
"tsn": "^2.0.15",
|
||||
"typescript": "^2.4.2",
|
||||
|
@ -1,5 +1,5 @@
|
||||
# npmts
|
||||
Write npm modules with TypeScript without hassle. TypeScript ready. Fully ES6.
|
||||
best practice npm TypeScript modules
|
||||
|
||||
## Availabililty
|
||||
[](https://www.npmjs.com/package/npmts)
|
||||
@ -38,6 +38,9 @@ For more information about how to best write tap tests check out the [tapbundle
|
||||
This works on your machine and in CI. There is a prebuild docker image available that includes npmts to make CI a breeze:
|
||||
[hosttoday/ht-docker-node:npmts on Dockerhub](https://hub.docker.com/r/hosttoday/ht-docker-node/)
|
||||
|
||||
## Changelog
|
||||
For breaking changes please see the [changelog](https://gitzone.gitlab.io/npmts/changelog.html).
|
||||
|
||||
For further information read the linked docs at the top of this README.
|
||||
|
||||
> MIT licensed | **©** [Lossless GmbH](https://lossless.gmbh)
|
||||
|
@ -6,7 +6,9 @@ import paths = require('../npmts.paths')
|
||||
|
||||
import * as q from 'smartq'
|
||||
|
||||
// interfaces
|
||||
import { INpmtsConfig } from '../npmts.config'
|
||||
import { Smartfile } from 'smartfile'
|
||||
|
||||
/**
|
||||
* runs mocha
|
||||
@ -34,9 +36,6 @@ let tap = function (configArg: INpmtsConfig) {
|
||||
experimentalDecorators: true,
|
||||
lib: [ 'DOM', 'ES5', 'ES2015.Promise', 'ES2015.Generator', 'ES2015.Iterable' ]
|
||||
}),
|
||||
plugins.gulpFunction.forEach(async file => {
|
||||
file.path = file.path.replace(paths.tsDir, paths.distDir)
|
||||
}),
|
||||
plugins.gulpSourcemaps.write(),
|
||||
npmtsTapBuffer.pipeTestableFiles(),
|
||||
plugins.smartstream.cleanPipe()
|
||||
|
113
yarn.lock
113
yarn.lock
@ -56,9 +56,9 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/fs-extra@3.x.x":
|
||||
version "3.0.3"
|
||||
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-3.0.3.tgz#1d66eb670ebf657e57c0fda014df340c19d8aa0c"
|
||||
"@types/fs-extra@4.x.x":
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-4.0.0.tgz#1dd742ad5c9bce308f7a52d02ebc01421bc9102f"
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
@ -80,10 +80,6 @@
|
||||
version "2.0.29"
|
||||
resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-2.0.29.tgz#5002e14f75e2d71e564281df0431c8c1b4a2a36a"
|
||||
|
||||
"@types/mocha@^2.2.31":
|
||||
version "2.2.41"
|
||||
resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-2.2.41.tgz#e27cf0817153eb9f2713b2d3f6c68f1e1c3ca608"
|
||||
|
||||
"@types/node@*", "@types/node@^8.0.10":
|
||||
version "8.0.17"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-8.0.17.tgz#677bc8c118cfb76013febb62ede1f31d2c7222a1"
|
||||
@ -106,9 +102,9 @@
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
"@types/source-map-support@^0.2.28":
|
||||
version "0.2.28"
|
||||
resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.2.28.tgz#ce6497dfa9c9fbd21a753955b4a51d8993d759dd"
|
||||
"@types/source-map-support@^0.4.0":
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/source-map-support/-/source-map-support-0.4.0.tgz#a62a1866614af68c888173c001481f242aaf148b"
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
|
||||
@ -1065,9 +1061,9 @@ fs-extra@^2.0.0, fs-extra@^2.1.2:
|
||||
graceful-fs "^4.1.2"
|
||||
jsonfile "^2.1.0"
|
||||
|
||||
fs-extra@^3.0.1:
|
||||
version "3.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-3.0.1.tgz#3794f378c58b342ea7dbbb23095109c4b3b62291"
|
||||
fs-extra@^4.0.0:
|
||||
version "4.0.0"
|
||||
resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.0.tgz#414fb4ca2d2170ba0014159d3a8aec3303418d9e"
|
||||
dependencies:
|
||||
graceful-fs "^4.1.2"
|
||||
jsonfile "^3.0.0"
|
||||
@ -1179,7 +1175,7 @@ glob@^5.0.15, glob@^5.0.3:
|
||||
once "^1.3.0"
|
||||
path-is-absolute "^1.0.0"
|
||||
|
||||
glob@^7.0.0, glob@^7.0.5, glob@^7.1.1:
|
||||
glob@^7.0.0, glob@^7.0.5, glob@^7.1.1, glob@^7.1.2:
|
||||
version "7.1.2"
|
||||
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.2.tgz#c19c9df9a028702d678612384a6552404c636d15"
|
||||
dependencies:
|
||||
@ -1595,9 +1591,9 @@ js-tokens@^3.0.0:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b"
|
||||
|
||||
js-yaml@3.x, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.4.2, js-yaml@^3.7.0, js-yaml@^3.8.3:
|
||||
version "3.9.0"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.0.tgz#4ffbbf25c2ac963b8299dc74da7e3740de1c18ce"
|
||||
js-yaml@3.x, js-yaml@^3.2.7, js-yaml@^3.3.1, js-yaml@^3.4.2, js-yaml@^3.7.0, js-yaml@^3.9.1:
|
||||
version "3.9.1"
|
||||
resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.9.1.tgz#08775cebdfdd359209f0d2acd383c8f86a6904a0"
|
||||
dependencies:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
@ -1860,8 +1856,8 @@ map-obj@^1.0.0, map-obj@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
|
||||
|
||||
mathjs@^3.10.3:
|
||||
version "3.14.2"
|
||||
resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.14.2.tgz#bb79b7dc878b7f586ce408ab067a9a42db2e7a2d"
|
||||
version "3.15.0"
|
||||
resolved "https://registry.yarnpkg.com/mathjs/-/mathjs-3.15.0.tgz#520390fc6447f8e0e580b34a43427691c9ce671e"
|
||||
dependencies:
|
||||
complex.js "2.0.4"
|
||||
decimal.js "7.2.3"
|
||||
@ -2728,21 +2724,21 @@ smartfile@4.1.6:
|
||||
vinyl "^2.0.1"
|
||||
vinyl-file "^3.0.0"
|
||||
|
||||
smartfile@^4.1.4, smartfile@^4.2.15, smartfile@^4.2.17:
|
||||
version "4.2.17"
|
||||
resolved "https://registry.yarnpkg.com/smartfile/-/smartfile-4.2.17.tgz#9eba8f65eea7e4db51aa30562f6039815a88b125"
|
||||
smartfile@^4.1.4, smartfile@^4.2.15, smartfile@^4.2.17, smartfile@^4.2.18:
|
||||
version "4.2.18"
|
||||
resolved "https://registry.yarnpkg.com/smartfile/-/smartfile-4.2.18.tgz#8901f35bf5eb228674e6b786825fed57b6c1f3b3"
|
||||
dependencies:
|
||||
"@types/fs-extra" "3.x.x"
|
||||
"@types/fs-extra" "4.x.x"
|
||||
"@types/vinyl" "^2.0.0"
|
||||
fs-extra "^3.0.1"
|
||||
glob "^7.1.1"
|
||||
js-yaml "^3.8.3"
|
||||
fs-extra "^4.0.0"
|
||||
glob "^7.1.2"
|
||||
js-yaml "^3.9.1"
|
||||
require-reload "0.2.2"
|
||||
smartpath "^3.2.8"
|
||||
smartq "^1.1.1"
|
||||
smartrequest "^1.0.4"
|
||||
typings-global "^1.0.16"
|
||||
vinyl "^2.0.2"
|
||||
smartq "^1.1.6"
|
||||
smartrequest "^1.0.6"
|
||||
typings-global "^1.0.20"
|
||||
vinyl "^2.1.0"
|
||||
vinyl-file "^3.0.0"
|
||||
|
||||
smartgulp@^1.0.6:
|
||||
@ -2757,17 +2753,15 @@ smartgulp@^1.0.6:
|
||||
smartstream "^1.0.8"
|
||||
typings-global "^1.0.16"
|
||||
|
||||
smartinject@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/smartinject/-/smartinject-1.0.1.tgz#c345e8035b6c8349acda3da64ff6c684f649919a"
|
||||
smartinject@^1.0.15:
|
||||
version "1.0.15"
|
||||
resolved "https://registry.yarnpkg.com/smartinject/-/smartinject-1.0.15.tgz#9b25e4311e92b586aab5b01cbd28f8482b3f11fe"
|
||||
dependencies:
|
||||
"@types/source-map-support" "^0.2.28"
|
||||
"@types/through2" "^2.0.32"
|
||||
smartchai "^1.0.3"
|
||||
source-map-support "^0.4.11"
|
||||
"@types/source-map-support" "^0.4.0"
|
||||
"@types/through2" "^2.0.33"
|
||||
source-map-support "^0.4.15"
|
||||
through2 "^2.0.3"
|
||||
typings-global "^1.0.14"
|
||||
typings-test "^1.0.3"
|
||||
typings-global "^1.0.20"
|
||||
|
||||
smartipc@^1.0.9:
|
||||
version "1.0.9"
|
||||
@ -2814,7 +2808,7 @@ smartq@^1.0.4, smartq@^1.1.0, smartq@^1.1.1, smartq@^1.1.6:
|
||||
typings-global "^1.0.19"
|
||||
util.promisify "^1.0.0"
|
||||
|
||||
smartrequest@^1.0.4:
|
||||
smartrequest@^1.0.4, smartrequest@^1.0.6:
|
||||
version "1.0.6"
|
||||
resolved "https://registry.yarnpkg.com/smartrequest/-/smartrequest-1.0.6.tgz#a006454332453b0a70d38a003a29963d039a7783"
|
||||
dependencies:
|
||||
@ -2848,14 +2842,14 @@ smartstring@2.0.24, smartstring@^2.0.24:
|
||||
js-base64 "^2.1.9"
|
||||
typings-global "^1.0.14"
|
||||
|
||||
smartsystem@^1.0.18:
|
||||
version "1.0.18"
|
||||
resolved "https://registry.yarnpkg.com/smartsystem/-/smartsystem-1.0.18.tgz#f1e9a19d1a6048d3e99c5ee95e64f728147da901"
|
||||
smartsystem@^2.0.2:
|
||||
version "2.0.2"
|
||||
resolved "https://registry.yarnpkg.com/smartsystem/-/smartsystem-2.0.2.tgz#89f94ff74cd6c5fae33d82bf0ef80233ef521215"
|
||||
dependencies:
|
||||
lik "^1.0.30"
|
||||
smartq "^1.1.1"
|
||||
systemjs "^0.20.12"
|
||||
typings-global "^1.0.19"
|
||||
lik "^1.0.38"
|
||||
smartq "^1.1.6"
|
||||
systemjs "^0.20.17"
|
||||
typings-global "^1.0.20"
|
||||
|
||||
sntp@1.x.x:
|
||||
version "1.0.9"
|
||||
@ -2872,7 +2866,7 @@ source-map-resolve@^0.3.0:
|
||||
source-map-url "~0.3.0"
|
||||
urix "~0.1.0"
|
||||
|
||||
source-map-support@^0.4.11, source-map-support@^0.4.15:
|
||||
source-map-support@^0.4.15:
|
||||
version "0.4.15"
|
||||
resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.15.tgz#03202df65c06d2bd8c7ec2362a193056fef8d3b1"
|
||||
dependencies:
|
||||
@ -3058,7 +3052,7 @@ symbol-observable@^1.0.1:
|
||||
version "1.0.4"
|
||||
resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.4.tgz#29bf615d4aa7121bdd898b22d4b3f9bc4e2aa03d"
|
||||
|
||||
systemjs@^0.20.12:
|
||||
systemjs@^0.20.17:
|
||||
version "0.20.17"
|
||||
resolved "https://registry.yarnpkg.com/systemjs/-/systemjs-0.20.17.tgz#b3143bb7e02d2f41b9a640351a06024b7b63ae59"
|
||||
|
||||
@ -3086,9 +3080,9 @@ tap-parser@^5.1.0:
|
||||
optionalDependencies:
|
||||
readable-stream "^2"
|
||||
|
||||
tapbuffer@^1.0.24:
|
||||
version "1.0.24"
|
||||
resolved "https://registry.yarnpkg.com/tapbuffer/-/tapbuffer-1.0.24.tgz#5f6779061f3d45261cda78edcde69736c91090a3"
|
||||
tapbuffer@^1.0.29:
|
||||
version "1.0.29"
|
||||
resolved "https://registry.yarnpkg.com/tapbuffer/-/tapbuffer-1.0.29.tgz#dbff08197a889912ea5be68ad9bfa37b6ca98dd1"
|
||||
dependencies:
|
||||
"@types/istanbul" "^0.4.29"
|
||||
beautylog "^6.1.10"
|
||||
@ -3097,12 +3091,12 @@ tapbuffer@^1.0.24:
|
||||
remap-istanbul "^0.9.5"
|
||||
smarterror "^1.0.3"
|
||||
smartfile "^4.2.17"
|
||||
smartinject "^1.0.1"
|
||||
smartinject "^1.0.15"
|
||||
smartipc "^1.0.9"
|
||||
smartq "^1.1.6"
|
||||
smartshell "^1.0.13"
|
||||
tap-mocha-reporter "^3.0.6"
|
||||
typings-global "^1.0.19"
|
||||
typings-global "^1.0.20"
|
||||
|
||||
tar-pack@^3.4.0:
|
||||
version "3.4.0"
|
||||
@ -3255,20 +3249,13 @@ typescript@^2.1.5, typescript@^2.4.2:
|
||||
version "2.4.2"
|
||||
resolved "https://registry.yarnpkg.com/typescript/-/typescript-2.4.2.tgz#f8395f85d459276067c988aa41837a8f82870844"
|
||||
|
||||
typings-global@*, typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.17, typings-global@^1.0.19, typings-global@^1.0.20, typings-global@^1.0.3:
|
||||
typings-global@^1.0.14, typings-global@^1.0.16, typings-global@^1.0.17, typings-global@^1.0.19, typings-global@^1.0.20, typings-global@^1.0.3:
|
||||
version "1.0.20"
|
||||
resolved "https://registry.yarnpkg.com/typings-global/-/typings-global-1.0.20.tgz#3da769c54db538247c5d877d1d9e97eb2ec981ff"
|
||||
dependencies:
|
||||
semver "^5.3.0"
|
||||
smartshell "^1.0.6"
|
||||
|
||||
typings-test@^1.0.3:
|
||||
version "1.0.3"
|
||||
resolved "https://registry.yarnpkg.com/typings-test/-/typings-test-1.0.3.tgz#fbab895eb3f0c44842e73db059f65946b971e369"
|
||||
dependencies:
|
||||
"@types/mocha" "^2.2.31"
|
||||
typings-global "*"
|
||||
|
||||
uglify-js@^2.6:
|
||||
version "2.8.29"
|
||||
resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-2.8.29.tgz#29c5733148057bb4e1f75df35b7a9cb72e6a59dd"
|
||||
@ -3388,7 +3375,7 @@ vinyl@^0.5.0:
|
||||
clone-stats "^0.0.1"
|
||||
replace-ext "0.0.1"
|
||||
|
||||
vinyl@^2.0.1, vinyl@^2.0.2:
|
||||
vinyl@^2.0.1, vinyl@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.1.0.tgz#021f9c2cf951d6b939943c89eb5ee5add4fd924c"
|
||||
dependencies:
|
||||
|
Reference in New Issue
Block a user