fix Payload Too Large for convert file api

This commit is contained in:
oom 2024-06-28 10:39:52 +07:00
parent 96d732bb96
commit ba8175204c
9 changed files with 169 additions and 157 deletions

2
app.ts
View file

@ -15,7 +15,7 @@ const app: Express = express()
const port: number = Number(process.env.PORT) || 80;
app.use(cors());
app.use(express.json({ limit: "200mb" })); //application/json
app.use(express.raw()); //application/octet-stream
app.use(express.raw({ limit: "200mb" })); //application/octet-stream
app.use(express.urlencoded({ extended: true, limit: "200mb" }));
app.use("/swagger", swaggerUi.serve, swaggerUi.setup(swaggerspecs,{ explorer: true }));
app.get('/', (req: Request, res: Response) => {

View file

@ -1,10 +1,9 @@
version: "3.2"
services:
report-server:
image: docker.frappet.com/demo/report-server:latest
restart: unless-stopped
mem_limit: 500m
# mem_limit: 500m
ports:
- 3000:80
- 3001:80
volumes:
- ./templates:/app/templates
- ./templates:/app/templates

View file

@ -7,19 +7,19 @@ import { LibreOfficeFileConverter } from 'libreoffice-file-converter';
* @swagger
* tags:
* name: office-convert
* description: ใช้แปลงไฟล์จากเอกสารที่ libreoffice x
* description: ใช้แปลงไฟล์จากเอกสารที่ libreoffice docx pdf
*/
/** javascript-obfuscator:disable
* @swagger
* /api/v1/report-template/convert:
* post:
* summary: Create document from template
* summary: แปลงฟอร์แม็ตเอกสารเช่นจาก docx pdf Media type
* tags: [office-convert]
* parameters:
* - name: report_name
* - name: report-name
* in: header
* description: นามสกุลไฟล์ที่อัปโหลดเข้ามา( soffice )
* description: ชื่อไฟล์ที่ต้องการหลังแปลง
* required: true
* schema:
* type: string
@ -59,25 +59,27 @@ import { LibreOfficeFileConverter } from 'libreoffice-file-converter';
* schema:
* type: string
* format: binary
* 400:
* description: Invalid format
* 500:
* description: Server error
*
*/
convertTemplateRoute.post("/convert", async function (req, res) {
convertTemplateRoute.post("/", async function (req, res) {
try {
if (!req.headers['content-type'] ||
!req.headers['accept'] ||
!req.headers['report_name'] ||
!req.headers['report-name'] ||
req.headers['content-type'] !== "application/octet-stream") {
res.statusCode = 400;
res.statusMessage = 'Require header: content-type(application/octet-stream) accept, report_name';
res.statusMessage = 'Require header: content-type(application/octet-stream) accept, report-name';
res.end(res.statusMessage);
console.log(req.headers['content-type'],req.headers['accept'],req.headers['report_name'])
console.log(req.headers['content-type'],req.headers['accept'],req.headers['report-name'])
return
}
let outputMediaType = mimeToExtension(req.headers['accept']);
let reportName = req.headers['report_name']
console.log('output: ' + outputMediaType);
let reportName = req.headers['report-name']
console.log('convert output: ' + outputMediaType);
const libreOfficeFileConverter = new LibreOfficeFileConverter({
childProcessOptions: {
timeout: 60 * 1000,

View file

@ -6,11 +6,11 @@ const swaggerOptions = {
openapi: "3.1.0",
info: {
title: "Report Server",
version: "0.8.0",
version: "0.8.1",
description:
"Advance create and convert document API for microservice era.",
"Technical preview releases - Report Server <br/>Advance create and convert document API for microservice era. ",
license: {
name: "by Frappet",
name: "by oom@Frappet",
url: "https://frappet.com",
},
},
@ -18,7 +18,7 @@ const swaggerOptions = {
{url: "https://report-server.frappet.synology.me"},
{url:"https://bma-ehr.frappet.synology.me/"},
{url: "http://localhost:3000"},
{url: "http://192.168.2.100:3000"},
{url: "http://192.168.2.101:3001"},
],
},
apis: ["./libs/*.ts"],

View file

@ -54,7 +54,7 @@ export async function docxTemplateX(base: string=".", tdata: templateData, outpu
* @swagger
* /api/v1/report-template/docx:
* get:
* summary: list docx template
* summary: แสดงรายการ template templates
* tags: [report-template]
* responses:
* 200:
@ -87,7 +87,7 @@ docxTemplateRoute.get("/", async function (req, res) {
* @swagger
* /api/v1/report-template/docx:
* post:
* summary: Create document from docx template output can be docx pdf odt
* summary: สร้างเอกสารโดยใช้ template docx docx pdf odt, template template, reportName
* tags: [report-template]
* requestBody:
* required: true

View file

@ -2,10 +2,10 @@
"openapi": "3.1.0",
"info": {
"title": "Report Server",
"version": "0.8.0",
"description": "Advance create and convert document API for microservice era.",
"version": "0.8.1",
"description": "Technical preview releases - Report Server <br/>Advance create and convert document API for microservice era. ",
"license": {
"name": "by Frappet",
"name": "by oom@Frappet",
"url": "https://frappet.com"
}
},
@ -20,21 +20,21 @@
"url": "http://localhost:3000"
},
{
"url": "http://192.168.2.100:3000"
"url": "http://192.168.2.101:3001"
}
],
"paths": {
"/api/v1/report-template/convert": {
"post": {
"summary": "Create document from template",
"summary": "แปลงฟอร์แม็ตเอกสารเช่นจาก docx เป็น pdf ให้ตั้งค่า Media type เป็นชนิดไฟล์ที่ต้องการ",
"tags": [
"office-convert"
],
"parameters": [
{
"name": "report_name",
"name": "report-name",
"in": "header",
"description": "นามสกุลไฟล์ที่อัปโหลดเข้ามา(ตอนนี้ไม่จำเป็นต้องใช้เพราะ soffice ตรวจสอบเอง)",
"description": "ชื่อไฟล์ที่ต้องการหลังแปลง",
"required": true,
"schema": {
"type": "string",
@ -95,6 +95,9 @@
}
}
},
"400": {
"description": "Invalid format"
},
"500": {
"description": "Server error"
}
@ -103,7 +106,7 @@
},
"/api/v1/report-template/docx": {
"get": {
"summary": "list docx template",
"summary": "แสดงรายการ template ที่มีในโฟลเดอร์ templates",
"tags": [
"report-template"
],
@ -130,7 +133,7 @@
}
},
"post": {
"summary": "Create document from docx template output can be docx pdf odt",
"summary": "สร้างเอกสารโดยใช้ template จากไฟล์ docx จะแทนค่าตัวแปรในเอกสาร หรือจะแปลงเป็นฟอร์แม็ตอื่นได้ด้วยรองรับ docx pdf odt, ค่า template เป็นชื่อของ template, reportName เป็นชื่อไฟล์ที่ต้องการ",
"tags": [
"report-template"
],
@ -242,7 +245,7 @@
}
},
"post": {
"summary": "สร้างเอกสารจาก xlsx template แล้วส่งกลับมาเป็น xlsx pdf odt",
"summary": "สร้างเอกสารจาก xlsx template แล้วส่งกลับมาเป็น xlsx pdf odt , ค่า template เป็นชื่อของ template ที่ใช้งาน, reportName เป็นชื่อไฟล์ที่ต้องการ",
"tags": [
"report-template"
],
@ -372,7 +375,7 @@
"tags": [
{
"name": "office-convert",
"description": "ใช้แปลงไฟล์จากเอกสารที่ libreoffice แปลงได้ x"
"description": "ใช้แปลงไฟล์จากเอกสารที่ libreoffice แปลงได้ เช่น docx เป็น pdf"
},
{
"name": "report-template",

View file

@ -76,7 +76,7 @@ xlsxTemplateRoute.get("/", async function (req, res) {
* @swagger
* /api/v1/report-template/xlsx:
* post:
* summary: สร้างเอกสารจาก xlsx template xlsx pdf odt
* summary: สร้างเอกสารจาก xlsx template xlsx pdf odt , template template , reportName
* tags: [report-template]
* requestBody:
* required: true

228
package-lock.json generated
View file

@ -10,23 +10,23 @@
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"docx-templates": "^4.11.3",
"express": "^4.18.2",
"libreoffice-file-converter": "^1.2.1",
"docx-templates": "^4.13.0",
"express": "^4.19.2",
"libreoffice-file-converter": "^2.3.3",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.0",
"xlsx-template-next": "^0.1.2",
"swagger-ui-express": "^5.0.1",
"xlsx-template-next": "^1.0.3",
"yaqrcode": "^0.2.1"
},
"devDependencies": {
"@types/cors": "^2.8.14",
"@types/express": "^4.17.18",
"@types/node": "^20.8.2",
"@types/swagger-jsdoc": "^6.0.1",
"@types/swagger-ui-express": "^4.1.4",
"javascript-obfuscator": "^4.1.0",
"nodemon": "^3.0.1",
"ts-node": "^10.9.1",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/node": "^20.14.9",
"@types/swagger-jsdoc": "^6.0.4",
"@types/swagger-ui-express": "^4.1.6",
"javascript-obfuscator": "^4.1.1",
"nodemon": "^3.1.4",
"ts-node": "^10.9.2",
"typescript": "^5.2.2"
}
},
@ -183,18 +183,18 @@
}
},
"node_modules/@types/cors": {
"version": "2.8.14",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.14.tgz",
"integrity": "sha512-RXHUvNWYICtbP6s18PnOCaqToK8y14DnLd75c6HfyKf228dxy7pHNOQkxPtvXKp/hINFMDjbYzsj63nnpPMSRQ==",
"version": "2.8.17",
"resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.17.tgz",
"integrity": "sha512-8CGDvrBj1zgo2qE+oS3pOCyYNqCPryMWY2bGfwA0dcfopWGgxs+78df0Rs3rc9THP4JkOhLsAa+15VdpAqkcUA==",
"dev": true,
"dependencies": {
"@types/node": "*"
}
},
"node_modules/@types/express": {
"version": "4.17.18",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.18.tgz",
"integrity": "sha512-Sxv8BSLLgsBYmcnGdGjjEjqET2U+AKAdCRODmMiq02FgjwuV75Ut85DRpvFjyw/Mk0vgUOliGRU0UUmuuZHByQ==",
"version": "4.17.21",
"resolved": "https://registry.npmjs.org/@types/express/-/express-4.17.21.tgz",
"integrity": "sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==",
"dev": true,
"dependencies": {
"@types/body-parser": "*",
@ -239,10 +239,13 @@
"dev": true
},
"node_modules/@types/node": {
"version": "20.8.2",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.8.2.tgz",
"integrity": "sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==",
"dev": true
"version": "20.14.9",
"resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.9.tgz",
"integrity": "sha512-06OCtnTXtWOZBJlRApleWndH4JsRVs1pDCc8dLSQp+7PpUpX3ePdHyeNSFTeSe7FtKyQkrlPvHwJOW3SLd8Oyg==",
"dev": true,
"dependencies": {
"undici-types": "~5.26.4"
}
},
"node_modules/@types/qs": {
"version": "6.9.8",
@ -278,15 +281,15 @@
}
},
"node_modules/@types/swagger-jsdoc": {
"version": "6.0.1",
"resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.1.tgz",
"integrity": "sha512-+MUpcbyxD528dECUBCEVm6abNuORdbuGjbrUdHDeAQ+rkPuo2a+L4N02WJHF3bonSSE6SJ3dUJwF2V6+cHnf0w==",
"version": "6.0.4",
"resolved": "https://registry.npmjs.org/@types/swagger-jsdoc/-/swagger-jsdoc-6.0.4.tgz",
"integrity": "sha512-W+Xw5epcOZrF/AooUM/PccNMSAFOKWZA5dasNyMujTwsBkU74njSJBpvCCJhHAJ95XRMzQrrW844Btu0uoetwQ==",
"dev": true
},
"node_modules/@types/swagger-ui-express": {
"version": "4.1.4",
"resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.4.tgz",
"integrity": "sha512-h6dfIPFveCJKpStDtjrB+4pig4DAf9Uu2Z51RB7Fj3s6AifexmqhZxBoG50K/k3Afz7wyXsIAY5ZIDTlC2VjrQ==",
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/@types/swagger-ui-express/-/swagger-ui-express-4.1.6.tgz",
"integrity": "sha512-UVSiGYXa5IzdJJG3hrc86e8KdZWLYxyEsVoUI4iPXc7CO4VZ3AfNP8d/8+hrDRIqz+HAaSMtZSqAsF3Nq2X/Dg==",
"dev": true,
"dependencies": {
"@types/express": "*",
@ -294,9 +297,9 @@
}
},
"node_modules/@types/validator": {
"version": "13.11.2",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.11.2.tgz",
"integrity": "sha512-nIKVVQKT6kGKysnNt+xLobr+pFJNssJRi2s034wgWeFBUx01fI8BeHTW2TcRp7VcFu9QCYG8IlChTuovcm0oKQ==",
"version": "13.12.0",
"resolved": "https://registry.npmjs.org/@types/validator/-/validator-13.12.0.tgz",
"integrity": "sha512-nH45Lk7oPIJ1RVOF6JgFI6Dy0QpHEzq4QecZhvguxYPDwT8c93prCMqAtiIttm39voZ+DDR+qkNnMpJmMBRqag==",
"dev": true
},
"node_modules/abbrev": {
@ -480,12 +483,12 @@
}
},
"node_modules/braces": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
"integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz",
"integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==",
"dev": true,
"dependencies": {
"fill-range": "^7.0.1"
"fill-range": "^7.1.1"
},
"engines": {
"node": ">=8"
@ -617,14 +620,14 @@
}
},
"node_modules/class-validator": {
"version": "0.14.0",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.0.tgz",
"integrity": "sha512-ct3ltplN8I9fOwUd8GrP8UQixwff129BkEtuWDKL5W45cQuLd19xqmTLu5ge78YDm/fdje6FMt0hGOhl0lii3A==",
"version": "0.14.1",
"resolved": "https://registry.npmjs.org/class-validator/-/class-validator-0.14.1.tgz",
"integrity": "sha512-2VEG9JICxIqTpoK1eMzZqaV+u/EiwEJkMGzTrZf6sU/fwsnOITVgYJ8yojSy6CaXtO9V0Cc6ZQZ8h8m4UBuLwQ==",
"dev": true,
"dependencies": {
"@types/validator": "^13.7.10",
"libphonenumber-js": "^1.10.14",
"validator": "^13.7.0"
"@types/validator": "^13.11.8",
"libphonenumber-js": "^1.10.53",
"validator": "^13.9.0"
}
},
"node_modules/color-convert": {
@ -807,12 +810,12 @@
}
},
"node_modules/docx-templates": {
"version": "4.11.3",
"resolved": "https://registry.npmjs.org/docx-templates/-/docx-templates-4.11.3.tgz",
"integrity": "sha512-MphQX0jrqWsXQYUpTZxWaQbcTj7MksywZ6fg7g5ejyZpBbx5GxRJ/G+wv18gWn9bCa5OEKyIyxeejZrG/YGTvQ==",
"version": "4.13.0",
"resolved": "https://registry.npmjs.org/docx-templates/-/docx-templates-4.13.0.tgz",
"integrity": "sha512-tTmR3WhROYctuyVReQ+PfCU3zprmC45/VuSVzn8EjovzpRkXYUdXiDatB9M8pasj0V+wuuOyY8bcSHvlQ2GNag==",
"dependencies": {
"jszip": "^3.10.1",
"sax": "1.2.4"
"sax": "1.3.0"
},
"engines": {
"node": ">=6"
@ -1003,9 +1006,9 @@
"dev": true
},
"node_modules/fill-range": {
"version": "7.0.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
"integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz",
"integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==",
"dev": true,
"dependencies": {
"to-regex-range": "^5.0.1"
@ -1244,9 +1247,9 @@
"dev": true
},
"node_modules/image-size": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.2.tgz",
"integrity": "sha512-xfOoWjceHntRb3qFCrh5ZFORYH8XCdYpASltMhZ/Q0KZiOwjdE/Yl2QCiWdwD+lygV5bMCvauzgu5PxBX/Yerg==",
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-1.1.1.tgz",
"integrity": "sha512-541xKlUw6jr/6gGuk92F+mYM5zaFAc5ahphvkqvNe2bQ6gVBkd6bfrmVJ2t4KDAfikAYZyIqTnktX3i6/aQDrQ==",
"dependencies": {
"queue": "6.0.2"
},
@ -1254,7 +1257,7 @@
"image-size": "bin/image-size.js"
},
"engines": {
"node": ">=14.0.0"
"node": ">=16.x"
}
},
"node_modules/immediate": {
@ -1418,9 +1421,9 @@
"integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ=="
},
"node_modules/javascript-obfuscator": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.1.0.tgz",
"integrity": "sha512-ckC0VFKQ0/sFtLH9apW/ZLfsP8LuZqZhVEM4VTJ5KLzyLaodW6C1lTU8808eboDmddKyvd2uyRx5bzc0Me0GYg==",
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/javascript-obfuscator/-/javascript-obfuscator-4.1.1.tgz",
"integrity": "sha512-gt+KZpIIrrxXHEQGD8xZrL8mTRwRY0U76/xz/YX0gZdPrSqQhT/c7dYLASlLlecT3r+FxE7je/+C0oLnTDCx4A==",
"dev": true,
"hasInstallScript": true,
"dependencies": {
@ -1430,7 +1433,7 @@
"assert": "2.0.0",
"chalk": "4.1.2",
"chance": "1.1.9",
"class-validator": "0.14.0",
"class-validator": "0.14.1",
"commander": "10.0.0",
"eslint-scope": "7.1.1",
"eslint-visitor-keys": "3.3.0",
@ -1452,7 +1455,7 @@
"javascript-obfuscator": "bin/javascript-obfuscator"
},
"engines": {
"node": "^12.22.0 || ^14.0.0 || ^16.0.0 || ^17.0.0 || >=18.0.0"
"node": ">=12.22.0"
},
"funding": {
"type": "opencollective",
@ -1525,20 +1528,20 @@
}
},
"node_modules/libphonenumber-js": {
"version": "1.10.47",
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.10.47.tgz",
"integrity": "sha512-b4t7VQDV29xx/ni+58yl9KWPGjnDLDXCeCTLrD4V8vDpObXZRZBrg7uX/HWZ7YXiJKqdBDGgc+barUUTNB6Slw==",
"version": "1.11.4",
"resolved": "https://registry.npmjs.org/libphonenumber-js/-/libphonenumber-js-1.11.4.tgz",
"integrity": "sha512-F/R50HQuWWYcmU/esP5jrH5LiWYaN7DpN0a/99U8+mnGGtnx8kmRE+649dQh3v+CowXXZc8vpkf5AmYkO0AQ7Q==",
"dev": true
},
"node_modules/libreoffice-file-converter": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/libreoffice-file-converter/-/libreoffice-file-converter-1.2.1.tgz",
"integrity": "sha512-IxjapEZtpd9ShT6FlcwPIsF4KEAFFb4YywVXsw3sGipYAQQux09QmmOUXC4q6F+uTxXuDwPjXYFJ1e/imbRcPA==",
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/libreoffice-file-converter/-/libreoffice-file-converter-2.3.3.tgz",
"integrity": "sha512-rfoVV07bvcfXp/kcXo+PorLSwocuUz564bJjyqdoow8+O2ga5h15UEoK0EI7v2GNuGy31uFjZwwBre+sp5iflg==",
"dependencies": {
"tmp": "^0.2.1"
"tmp-promise": "^3.0.3"
},
"engines": {
"node": ">=8"
"node": ">=14"
}
},
"node_modules/lie": {
@ -1703,13 +1706,13 @@
}
},
"node_modules/nodemon": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.0.1.tgz",
"integrity": "sha512-g9AZ7HmkhQkqXkRc20w+ZfQ73cHLbE8hnPbtaFbFtCumZsjyMhKk9LajQ07U5Ux28lvFjZ5X7HvWR1xzU8jHVw==",
"version": "3.1.4",
"resolved": "https://registry.npmjs.org/nodemon/-/nodemon-3.1.4.tgz",
"integrity": "sha512-wjPBbFhtpJwmIeY2yP7QF+UKzPfltVGtfce1g/bB15/8vCGZj8uxD62b/b9M9/WVgme0NZudpownKN+c0plXlQ==",
"dev": true,
"dependencies": {
"chokidar": "^3.5.2",
"debug": "^3.2.7",
"debug": "^4",
"ignore-by-default": "^1.0.1",
"minimatch": "^3.1.2",
"pstree.remy": "^1.1.8",
@ -1731,18 +1734,26 @@
}
},
"node_modules/nodemon/node_modules/debug": {
"version": "3.2.7",
"resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
"integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
"version": "4.3.5",
"resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz",
"integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==",
"dev": true,
"dependencies": {
"ms": "^2.1.1"
"ms": "2.1.2"
},
"engines": {
"node": ">=6.0"
},
"peerDependenciesMeta": {
"supports-color": {
"optional": true
}
}
},
"node_modules/nodemon/node_modules/ms": {
"version": "2.1.3",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz",
"integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
"integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
"dev": true
},
"node_modules/nopt": {
@ -2021,20 +2032,6 @@
"integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==",
"dev": true
},
"node_modules/rimraf": {
"version": "3.0.2",
"resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz",
"integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==",
"dependencies": {
"glob": "^7.1.3"
},
"bin": {
"rimraf": "bin.js"
},
"funding": {
"url": "https://github.com/sponsors/isaacs"
}
},
"node_modules/safe-buffer": {
"version": "5.2.1",
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz",
@ -2060,9 +2057,9 @@
"integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
},
"node_modules/sax": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz",
"integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw=="
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/sax/-/sax-1.3.0.tgz",
"integrity": "sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA=="
},
"node_modules/semver": {
"version": "7.5.4",
@ -2279,9 +2276,9 @@
"integrity": "sha512-NUHSYoe5XRTk/Are8jPJ6phzBh3l9l33nEyXosM17QInoV95/jng8+PuSGtbD407QoPf93MH3Bkh773OgesJpA=="
},
"node_modules/swagger-ui-express": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.0.tgz",
"integrity": "sha512-tsU9tODVvhyfkNSvf03E6FAk+z+5cU3lXAzMy6Pv4av2Gt2xA0++fogwC4qo19XuFf6hdxevPuVCSKFuMHJhFA==",
"version": "5.0.1",
"resolved": "https://registry.npmjs.org/swagger-ui-express/-/swagger-ui-express-5.0.1.tgz",
"integrity": "sha512-SrNU3RiBGTLLmFU8GIJdOdanJTl4TOmT27tt3bWWHppqYmAZ6IDuEuBvMU6nZq0zLEe6b/1rACXCgLZqO6ZfrA==",
"dependencies": {
"swagger-ui-dist": ">=5.0.0"
},
@ -2293,14 +2290,19 @@
}
},
"node_modules/tmp": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz",
"integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==",
"dependencies": {
"rimraf": "^3.0.0"
},
"version": "0.2.3",
"resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.3.tgz",
"integrity": "sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==",
"engines": {
"node": ">=8.17.0"
"node": ">=14.14"
}
},
"node_modules/tmp-promise": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/tmp-promise/-/tmp-promise-3.0.3.tgz",
"integrity": "sha512-RwM7MoPojPxsOBYnyd2hy0bxtIlVrihNs9pj5SUvY8Zz1sQcQG2tG1hSr8PDxfgEB8RNKDhqbIlroIarSNDNsQ==",
"dependencies": {
"tmp": "^0.2.0"
}
},
"node_modules/to-regex-range": {
@ -2336,9 +2338,9 @@
}
},
"node_modules/ts-node": {
"version": "10.9.1",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz",
"integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==",
"version": "10.9.2",
"resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.2.tgz",
"integrity": "sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==",
"dev": true,
"dependencies": {
"@cspotcode/source-map-support": "^0.8.0",
@ -2427,6 +2429,12 @@
"integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==",
"dev": true
},
"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
},
"node_modules/unpipe": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz",
@ -2517,9 +2525,9 @@
"integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ=="
},
"node_modules/xlsx-template-next": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/xlsx-template-next/-/xlsx-template-next-0.1.2.tgz",
"integrity": "sha512-qlCkXdAZz3zL0Pkbij9bKQ6EPwTxR031UyU2DU4ZPZBmMqTonwJuE+Atgk85LXZ01YKkBZ7Ghvnj6rnkZQ/2BA==",
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/xlsx-template-next/-/xlsx-template-next-1.0.3.tgz",
"integrity": "sha512-NjDtLeOetqT2brjIGIPHGJJdUkxWTOHW0uzCxVtpuJiXwcdd0LxWG3Oif4cbHlCXpl4hBkMDzt6wSn1A43A/dw==",
"dependencies": {
"elementtree": "^0.1.7",
"image-size": "^1.0.2",

View file

@ -3,7 +3,7 @@
"version": "1.0.0",
"description": "docx-template มีปัญหากับ bun คาดว่าเป็นปัญหาจาก eval",
"scripts": {
"dev": "PORT=3000 nodemon app.ts",
"dev": "PORT=3001 nodemon app.ts",
"swaggergen": "ts-node libs/create-swagger-spec.ts ",
"build": "ts-node libs/create-swagger-spec.ts && tsc && cp libs/swagger-specs.json dist/libs",
"serve": "PORT=3000 node dist/app.js",
@ -17,23 +17,23 @@
"license": "ISC",
"dependencies": {
"cors": "^2.8.5",
"docx-templates": "^4.11.3",
"express": "^4.18.2",
"libreoffice-file-converter": "^1.2.1",
"docx-templates": "^4.13.0",
"express": "^4.19.2",
"libreoffice-file-converter": "^2.3.3",
"swagger-jsdoc": "^6.2.8",
"swagger-ui-express": "^5.0.0",
"xlsx-template-next": "^0.1.2",
"swagger-ui-express": "^5.0.1",
"xlsx-template-next": "^1.0.3",
"yaqrcode": "^0.2.1"
},
"devDependencies": {
"@types/cors": "^2.8.14",
"@types/express": "^4.17.18",
"@types/node": "^20.8.2",
"@types/swagger-jsdoc": "^6.0.1",
"@types/swagger-ui-express": "^4.1.4",
"javascript-obfuscator": "^4.1.0",
"nodemon": "^3.0.1",
"ts-node": "^10.9.1",
"@types/cors": "^2.8.17",
"@types/express": "^4.17.21",
"@types/node": "^20.14.9",
"@types/swagger-jsdoc": "^6.0.4",
"@types/swagger-ui-express": "^4.1.6",
"javascript-obfuscator": "^4.1.1",
"nodemon": "^3.1.4",
"ts-node": "^10.9.2",
"typescript": "^5.2.2"
}
}