diff --git a/Dockerfile b/Dockerfile index 3174483..62730b9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -28,28 +28,11 @@ WORKDIR /app COPY tdm-be/package*.json tdm-be/ts*.json /app/ # Install dependency -RUN npm ci +RUN npm ci --omit=dev # Copy the back-end source code into the build container COPY tdm-be /app/ -# Build the Express app -RUN npm run build - -####################################################### - -# Stage 1 - Building Stage: Build back-end node modules -FROM node:18.19-bullseye-slim AS node-modules - -# Switch to the main working directory -WORKDIR /app - -# Copy package.json, package-lock.json and tsconfig.json files -COPY tdm-be/package*.json tdm-be/ts*.json /app/ - -# Install production dependency -RUN npm ci --omit=dev - ####################################################### # Stage 2 - Application Stage: Build the application image @@ -73,10 +56,11 @@ WORKDIR /app # Copy back-end files from the build container COPY --chown=daemon:daemon --from=express-build /app/package.json /app/ COPY --chown=daemon:daemon --from=express-build /app/package-lock.json /app/ -COPY --chown=daemon:daemon --from=node-modules /app/node_modules /app/node_modules/ +COPY --chown=daemon:daemon --from=express-build /app/tsconfig.json /app/ +COPY --chown=daemon:daemon --from=express-build /app/node_modules /app/node_modules/ COPY --chown=daemon:daemon --from=express-build /app/config/default.json /app/config/ COPY --chown=daemon:daemon --from=express-build /app/config/production.json /app/config/ -COPY --chown=daemon:daemon --from=express-build /app/dist /app/ +COPY --chown=daemon:daemon --from=express-build /app/src /app/src # Copy front-end files from the build container COPY --chown=daemon:daemon --from=react-build /app/.next /app/public/_next/ diff --git a/tdm-be/Dockerfile b/tdm-be/Dockerfile deleted file mode 100644 index 2cbfc70..0000000 --- a/tdm-be/Dockerfile +++ /dev/null @@ -1,4 +0,0 @@ -FROM node:18.19-bullseye-slim -RUN useradd -ms /bin/sh -u 1001 app -USER app -COPY --chown=app:app . /app diff --git a/tdm-be/package-lock.json b/tdm-be/package-lock.json index 589f3f8..332dbf9 100644 --- a/tdm-be/package-lock.json +++ b/tdm-be/package-lock.json @@ -6,7 +6,6 @@ "packages": { "": { "name": "tdm-be", - "version": "1.0.0", "license": "CeCILL", "dependencies": { "axios": "^1.6.7", @@ -21,6 +20,9 @@ "nodemailer": "^6.9.9", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.0", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.2.2", "winston": "^3.11.0" }, "devDependencies": { @@ -37,10 +39,7 @@ "@types/swagger-jsdoc": "^6.0.4", "@types/swagger-ui-express": "^4.1.6", "eslint": "^8.56.0", - "nodemon": "^3.0.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.2.2" + "nodemon": "^3.0.3" }, "engines": { "node": "18" @@ -90,7 +89,6 @@ "version": "0.8.1", "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, "dependencies": { "@jridgewell/trace-mapping": "0.3.9" }, @@ -302,7 +300,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true, "engines": { "node": ">=6.0.0" } @@ -310,14 +307,12 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", - "dev": true + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.9", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", "@jridgewell/sourcemap-codec": "^1.4.10" @@ -378,26 +373,22 @@ "node_modules/@tsconfig/node10": { "version": "1.0.9", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", - "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", - "dev": true + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==" }, "node_modules/@tsconfig/node12": { "version": "1.0.11", "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", - "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", - "dev": true + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==" }, "node_modules/@tsconfig/node14": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", - "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", - "dev": true + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==" }, "node_modules/@tsconfig/node16": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", - "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", - "dev": true + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==" }, "node_modules/@types/better-sqlite3": { "version": "7.6.9", @@ -509,7 +500,6 @@ "version": "18.19.15", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.15.tgz", "integrity": "sha512-AMZ2UWx+woHNfM11PyAEQmfSxi05jm9OlkxczuHeEqmvwPkYj6MWv44gbzDPefYOLysTOFyI3ziiy2ONmUZfpA==", - "dev": true, "dependencies": { "undici-types": "~5.26.4" } @@ -923,7 +913,6 @@ "version": "8.11.2", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", - "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -944,7 +933,6 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.0.tgz", "integrity": "sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA==", - "dev": true, "engines": { "node": ">=0.4.0" } @@ -1010,8 +998,7 @@ "node_modules/arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", - "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", - "dev": true + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==" }, "node_modules/argparse": { "version": "1.0.10", @@ -1633,8 +1620,7 @@ "node_modules/create-require": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", - "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", - "dev": true + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==" }, "node_modules/cross-spawn": { "version": "7.0.3", @@ -1762,7 +1748,6 @@ "version": "4.0.2", "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", - "dev": true, "engines": { "node": ">=0.3.1" } @@ -3418,8 +3403,7 @@ "node_modules/make-error": { "version": "1.3.6", "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", - "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", - "dev": true + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==" }, "node_modules/md5": { "version": "2.3.0", @@ -4645,7 +4629,6 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, "engines": { "node": ">=4" } @@ -4892,7 +4875,6 @@ "version": "10.9.1", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", - "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", "@tsconfig/node10": "^1.0.7", @@ -4935,7 +4917,6 @@ "version": "4.2.0", "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", - "dev": true, "dependencies": { "json5": "^2.2.2", "minimist": "^1.2.6", @@ -5072,7 +5053,6 @@ "version": "5.2.2", "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -5105,8 +5085,7 @@ "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" }, "node_modules/unpipe": { "version": "1.0.0", @@ -5149,8 +5128,7 @@ "node_modules/v8-compile-cache-lib": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==" }, "node_modules/validator": { "version": "13.11.0", @@ -5308,7 +5286,6 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", - "dev": true, "engines": { "node": ">=6" } diff --git a/tdm-be/package.json b/tdm-be/package.json index bc5f40d..5cbd6e7 100644 --- a/tdm-be/package.json +++ b/tdm-be/package.json @@ -1,16 +1,12 @@ { "name": "tdm-be", - "version": "1.0.0", - "description": "", "private": true, - "main": "index.js", "engines": { "node": "18" }, "scripts": { "dev": "nodemon src/app.ts", - "start": "node app.js", - "build": "tsc", + "start": "ts-node --transpile-only ./src/app.ts", "swagger-autogen": "ts-node --project tsconfig.dev.json bin/swagger.ts 3000" }, "keywords": [], @@ -29,6 +25,9 @@ "nodemailer": "^6.9.9", "swagger-jsdoc": "^6.2.8", "swagger-ui-express": "^5.0.0", + "ts-node": "^10.9.1", + "tsconfig-paths": "^4.2.0", + "typescript": "^5.2.2", "winston": "^3.11.0" }, "devDependencies": { @@ -45,9 +44,6 @@ "@types/swagger-jsdoc": "^6.0.4", "@types/swagger-ui-express": "^4.1.6", "eslint": "^8.56.0", - "nodemon": "^3.0.3", - "ts-node": "^10.9.1", - "tsconfig-paths": "^4.2.0", - "typescript": "^5.2.2" + "nodemon": "^3.0.3" } } diff --git a/tdm-be/tsconfig.dev.json b/tdm-be/tsconfig.dev.json index a5498b9..7cf72e0 100644 --- a/tdm-be/tsconfig.dev.json +++ b/tdm-be/tsconfig.dev.json @@ -1,7 +1,7 @@ { "compilerOptions": { - "target": "es6", - "module": "commonjs", + "target": "ES2022", + "moduleResolution": "Node", "lib": [ "ESNext" ], diff --git a/tdm-be/tsconfig.json b/tdm-be/tsconfig.json index fd78117..fc8ba02 100644 --- a/tdm-be/tsconfig.json +++ b/tdm-be/tsconfig.json @@ -4,12 +4,11 @@ "require": ["tsconfig-paths/register"] }, "compilerOptions": { - "target": "es6", - "module": "commonjs", + "target": "ES2022", + "moduleResolution": "Node", "lib": [ "ESNext" ], - "outDir": "dist", "strict": true, "esModuleInterop": true, "skipLibCheck": true,