diff --git a/.arcconfig b/.arcconfig
index 64ef105..647dec7 100644
--- a/.arcconfig
+++ b/.arcconfig
@@ -1,8 +1,5 @@
{
"phabricator.uri": "https://hub.sealcode.org/",
"arc.land.onto.default": "master",
- "load": ["arcanist-linters", "arc-unit-mocha/src"],
- "unit.engine": "MochaEngine",
- "unit.mocha.include": ["./lib/**/*.test.js"],
- "unit.mocha.dockerRoot": "/opt/sealious-app"
+ "load": []
}
diff --git a/.arclint b/.arclint
index 109dd39..3508cd2 100644
--- a/.arclint
+++ b/.arclint
@@ -1,13 +1,3 @@
{
- "linters": {
- "prettier": {
- "type": "prettier",
- "bin": "./node_modules/.bin/prettier",
- "include": ["(\\.[tj]sx?$)", "(\\.s?css$)"]
- },
- "eslint": {
- "type": "eslint",
- "include": ["(src/.*\\.tsx?$)", "(src/.*\\.js$)"]
- }
- }
+ "linters": {}
}
diff --git a/.gitignore b/.gitignore
index 52084be..ba2d7b1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -42,4 +42,6 @@ uploaded_files
src/back/jdd-components/components.ts
src/back/routes/routes.ts
src/back/routes/urls.ts
-src/includes.css
\ No newline at end of file
+src/includes.css
+.eslint-result.json
+lint-report.json
\ No newline at end of file
diff --git a/docker-up.sh b/docker-up.sh
index b4d90d8..c070684 100755
--- a/docker-up.sh
+++ b/docker-up.sh
@@ -1,2 +1,2 @@
mkdir -p docker_node_modules
-docker-compose up -d
+docker compose up -d
diff --git a/jenkins.prepare.sh b/jenkins.prepare.sh
index 10d9000..70cb3e1 100755
--- a/jenkins.prepare.sh
+++ b/jenkins.prepare.sh
@@ -1,7 +1,7 @@
#!/bin/bash -xe
set -e
-docker-compose down
+docker compose down
npm install @sealcode/sealgen
npx sealgen make-env
@@ -10,15 +10,15 @@ cp secrets.example.json secrets.json
export SEALIOUS_PORT="${PORT}0"
SEALIOUS_BASE_URL=$(cat .base_url)
export SEALIOUS_BASE_URL
-echo "PORT=$PORT" >> .env
+echo "PORT=$PORT" >>.env
mkdir -p node_modules
mkdir -p docker_node_modules
# https://github.com/docker/compose/issues/4725
-docker-compose build
+docker compose build
-docker-compose up -d db
-./npm.sh --no-TTY ci && ./npm.sh --no-TTY run build
+docker compose up -d db
+./npm.sh --no-TTY ci && ./npm.sh --no-TTY run build
rm -f log.html
diff --git a/jenkins.sanity.sh b/jenkins.sanity.sh
index c4f0bd6..df0e5c5 100755
--- a/jenkins.sanity.sh
+++ b/jenkins.sanity.sh
@@ -4,13 +4,31 @@ export SEALIOUS_PORT=$PORT
SEALIOUS_BASE_URL=$(cat .base_url)
export SEALIOUS_BASE_URL
-./npm.sh --no-TTY --user="$UID" run typecheck:front
-./npm.sh --no-TTY --user="$UID" run typecheck:back
+./npm.sh ci --no-progress --no-color
+./npm.sh run install-test-deps --no-progress --no-color
+./npm.sh run build --no-progress --no-color --ignore-scripts
+./npm.sh run typecheck --no-progress --no-color --ignore-scripts
-docker-compose run --user="$UID" \
+# no need to run build, it's automatically ran after ci
+#./npm.sh --no-TTY --user="$UID" run build
+
+./npm.sh run lint-report
+
+node -e 'console.log(JSON.stringify(JSON.parse(fs.readFileSync("./.eslint-result.json")).map(fileResult => fileResult.messages.map(message=>({...message, path: fileResult.filePath.replace("/opt/sealious-app/", "")}))).flat().map(message=>({name: message.ruleId, code: message.ruleId, severity: message.severity==1 ? "warning" : "error", path: message.path, line: message.line, char: message.column, description: message.message}))))' \
+ >lint-report.json
+
+CONTAINER_ID=$(docker compose run -d --user="$UID" \
-e "SEALIOUS_MONGO_PORT=27017" \
-e "SEALIOUS_MONGO_HOST=db" \
- -e "SEALIOUS_PORT=$SEALIOUS_PORT" \
+ -e "SEALIOUS_PORT=8080" \
-e "SEALIOUS_BASE_URL=$SEALIOUS_BASE_URL" \
- -e "SEALIOUS_SANITY=true" \
- test
+ -e "SEALIOUS_MAILCATCHER_HOST=mailcatcher" \
+ -e "SEALIOUS_MAILCATCHER_API_PORT=1080" \
+ -e "SEALIOUS_MAILCATCHER_SMTP_PORT=1025" \
+ -e "WITH_WEBHINT=TRUE" \
+ -e "FORCE_COLOR=0" \
+ test npm run test-reports)
+
+docker logs -f $CONTAINER_ID
+
+exit $(docker inspect $CONTAINER_ID --format='{{.State.ExitCode}}')
diff --git a/jenkins.start.sh b/jenkins.start.sh
index 0c28600..2f601cc 100755
--- a/jenkins.start.sh
+++ b/jenkins.start.sh
@@ -6,9 +6,9 @@ export SEALIOUS_BASE_URL
./npm.sh --no-TTY --user="$UID" run build:front
-docker-compose up -d mailcatcher
+docker compose up -d mailcatcher
-docker-compose run --user="$UID" \
+docker compose run --user="$UID" \
-e "SEALIOUS_MONGO_PORT=27017" \
-e "SEALIOUS_MONGO_HOST=db" \
-e "SEALIOUS_PORT=$SEALIOUS_PORT" \
diff --git a/jenkins.stop.sh b/jenkins.stop.sh
index d4c09eb..ba3cdec 100755
--- a/jenkins.stop.sh
+++ b/jenkins.stop.sh
@@ -4,6 +4,5 @@ export SEALIOUS_PORT="${PORT}0"
SEALIOUS_BASE_URL=$(cat .base_url)
export SEALIOUS_BASE_URL
-docker-compose down --volumes
+docker compose down --volumes
rm -rf node_modules
-
diff --git a/package-lock.json b/package-lock.json
index 509bd8f..598d0b7 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -14,7 +14,7 @@
"@koa/router": "^12.0.1",
"@sealcode/file-manager": "^1.0.2",
"@sealcode/jdd": "^0.4.10",
- "@sealcode/sealgen": "^0.15.30",
+ "@sealcode/sealgen": "^0.15.45",
"@sealcode/ts-predicates": "^0.6.2",
"@types/kill-port": "^2.0.0",
"@types/leaflet": "^1.9.8",
@@ -844,13 +844,14 @@
"license": "ISC"
},
"node_modules/@sealcode/sealgen": {
- "version": "0.15.30",
- "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.15.30.tgz",
- "integrity": "sha512-Smj73M9pNhfTgSjP4bwHokU1HTHMdcixgy2fGEO9bDKH/2e19XVGcCUBYHBiFB/i8OBuwJYBcDfH4wt2U/TEUA==",
+ "version": "0.15.45",
+ "resolved": "https://registry.npmjs.org/@sealcode/sealgen/-/sealgen-0.15.45.tgz",
+ "integrity": "sha512-E4jeaeNaMQvhD8AUc/BzXDr85l6MaON7gHuZxUtEnJ7z0Qogf0UBmMd0HECoUAOPeiGbcTM8aKB0cZ1oJrCpdw==",
"dependencies": {
"@koa/router": "^12.0.1",
"@sealcode/file-manager": "^1.0.2",
"@sealcode/ts-predicates": "^0.4.3",
+ "chokidar": "^3.6.0",
"deepmerge": "^4.3.1",
"esbuild": "^0.20.0",
"escape-goat": "^4.0.0",
@@ -863,7 +864,7 @@
"prettier": "^2.7.1",
"prompts": "^2.4.2",
"recursive-readdir": "^2.2.3",
- "tempstream": "^0.3.4",
+ "tempstream": "^0.4.0",
"tiny-glob": "^0.2.9",
"ws": "^8.16.0",
"yargs": "^17.6.2"
@@ -882,6 +883,14 @@
"resolved": "https://registry.npmjs.org/@sealcode/ts-predicates/-/ts-predicates-0.4.3.tgz",
"integrity": "sha512-UNSEacu7Ye8q0N8AJCJy37oJvv3w2OXKGkUnP7xO5lOY9DQviDPRDQhVaZdJ3/xMzXLm4UE3389ihctrPaov/A=="
},
+ "node_modules/@sealcode/sealgen/node_modules/tempstream": {
+ "version": "0.4.0",
+ "resolved": "https://registry.npmjs.org/tempstream/-/tempstream-0.4.0.tgz",
+ "integrity": "sha512-NkO6l6LUvZEnxTicz143PbHHHLLJvp8yQy1UgIkNU5S0eGxyf0eKv2C81rAnyrff1Ehk8KzqDOhjaMTa6U0N4w==",
+ "dependencies": {
+ "classnames": "^2.5.1"
+ }
+ },
"node_modules/@sealcode/ts-predicates": {
"version": "0.6.2",
"license": "ISC",
diff --git a/package.json b/package.json
index 37cfe6b..9366715 100644
--- a/package.json
+++ b/package.json
@@ -5,25 +5,27 @@
"main": "./dist/back/index.js",
"type": "module",
"scripts": {
- "start": "docker-compose up -d db && node .",
- "start-watch": "SEALIOUS_PORT=$SEALIOUS_PORT SEALIOUS_BASE_URL=$SEALIOUS_BASE_URL nodemon --enable-source-maps --ignore ./uploaded_files . --ignore ./cache",
+ "start": "docker compose up -d db && node .",
+ "start-watch": "SEALIOUS_PORT=$SEALIOUS_PORT SEALIOUS_BASE_URL=$SEALIOUS_BASE_URL nodemon --enable-source-maps --ignore ./uploaded_files --ignore ./cache .",
"typecheck:back": "tsc --noEmit --target es6 --lib es2021,dom -p tsconfig-back.json",
- "typecheck:front": "tsc --noEmit --target es6 --lib es2015,dom -p tsconfig-front.json",
+ "typecheck:front": "tsc --noEmit --target es6 --lib es2021,dom -p tsconfig-front.json",
"typecheck": "npm run typecheck:back && npm run typecheck:front",
"prewatch": "rm -rf dist/* && npm run build --ignore-scripts",
"build": "rm -rf dist && sealgen build ",
"postbuild": "npm run typecheck && npm run lint",
"watch": "multiple-scripts-tmux -p watch",
- "reset-db": "docker-compose down && docker-compose up -d",
+ "reset-db": "docker compose down -v && docker compose up -d",
"install-test-deps": "npx playwright install firefox && cd webhint && npm install && ./use-fork.sh",
- "pretest": "npm run build && docker-compose up -d",
+ "pretest": "npm run build && docker compose up -d",
"test": "node test.cjs",
+ "full-test": "WITH_WEBHINT=TRUE npm run test",
"prepare": "npm run build && npm run install-test-deps",
"lint": "eslint src",
- "preinstrument": "npm run build && rm -fr .xunit coverage dist-instrumented",
+ "lint-report": "npm run --silent lint -- --format json > .eslint-result.json",
+ "preinstrument": "npm run build --ignore-scripts && rm -fr .xunit coverage dist-instrumented",
"instrument": "npx nyc instrument --exclude \"\" dist dist-instrumented",
- "pretest-reports": "npm run instrument && docker-compose up -d",
- "test-reports": "npx nyc --exclude \"\" ./node_modules/.bin/mocha --recursive --timeout=10000 --require source-map-support/register --reporter xunit --reporter-option output=.xunit 'dist-instrumented/**/*.test.js' --exit && nyc report --reporter clover --exclude \"\"",
+ "pretest-reports": "npm run instrument",
+ "test-reports": "npx nyc --exclude \"\" ./node_modules/.bin/mocha --recursive --timeout=10000 --require source-map-support/register 'dist-instrumented/**/*.test.js' --exit && nyc report --reporter cobertura --exclude \"\"",
"precover-html": "rm -rf coverate/lcov-report",
"cover-html": "npm run test-reports && nyc report --reporter lcov --exclude \"\" && xdg-open coverage/lcov-report/index.html"
},
@@ -43,7 +45,7 @@
"@koa/router": "^12.0.1",
"@sealcode/file-manager": "^1.0.2",
"@sealcode/jdd": "^0.4.10",
- "@sealcode/sealgen": "^0.15.30",
+ "@sealcode/sealgen": "^0.15.45",
"@sealcode/ts-predicates": "^0.6.2",
"@types/kill-port": "^2.0.0",
"@types/leaflet": "^1.9.8",
diff --git a/src/back/routes/horizontal-scroller-demo.page.tsx b/src/back/routes/horizontal-scroller-demo.page.tsx
index f53ca95..cb85b6e 100644
--- a/src/back/routes/horizontal-scroller-demo.page.tsx
+++ b/src/back/routes/horizontal-scroller-demo.page.tsx
@@ -26,6 +26,7 @@ export default new (class HorizontalScrollerDemoPage extends Page {