Skip to content

Commit 6efdfb7

Browse files
authored
Merge pull request #21 from ixartz/esbuild
Migrate serverless-esbuild from serverless-bundle
2 parents 2d991b5 + f641b94 commit 6efdfb7

10 files changed

Lines changed: 13303 additions & 29450 deletions

File tree

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ jspm_packages
1010

1111
# Webpack
1212
.webpack
13+
.esbuild
1314

1415
# Output
1516
dist

.vscode/launch.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,9 +15,7 @@
1515
"sourceMaps": true,
1616
"skipFiles": ["<node_internals>/**"],
1717
"console": "integratedTerminal",
18-
"sourceMapPathOverrides": {
19-
"webpack:///../../../*": "${workspaceFolder}/*"
20-
}
18+
"outFiles": ["${workspaceFolder}/.esbuild/.build/**/*.js"]
2119
}
2220
]
2321
}

package-lock.json

Lines changed: 13231 additions & 29398 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 19 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,22 @@
33
"version": "1.0.0",
44
"description": "Serverless framework ExpressJS TypeScript",
55
"scripts": {
6-
"dev:db": "ts-node --esm scripts/database.mts",
6+
"dev:db": "ts-node --esm scripts/database.ts",
77
"dev:server": "cross-env NODE_ENV=development sls offline start --stage offline",
88
"dev": "run-p dev:*",
99
"tail-log": "sls logs -f app -t",
10-
"deploy-prod": "cross-env NODE_ENV=production sls deploy --stage prod",
10+
"deploy:db": "dotenv -e .env.production -c -- ts-node --esm scripts/deployDbProd.ts",
11+
"deploy:app": "cross-env NODE_ENV=production sls deploy --stage prod",
12+
"deploy-prod": "run-s deploy:*",
1113
"remove-prod": "cross-env NODE_ENV=production sls remove --stage prod",
12-
"clean": "rimraf dist .webpack .serverless",
14+
"clean": "rimraf dist .esbuild .serverless",
1315
"lint": "eslint .",
1416
"format": "eslint --fix . && prettier '**/*.{json,yaml}' --write --ignore-path .gitignore",
1517
"check-types": "tsc --noEmit --pretty",
16-
"test": "jest",
1718
"commit": "cz",
19+
"test": "jest",
1820
"test:dev": "start-server-and-test dev http://localhost:4000 'curl --head http://localhost:4000'",
21+
"db:push": "prisma db push",
1922
"prepare": "husky install",
2023
"postinstall": "prisma generate"
2124
},
@@ -32,15 +35,18 @@
3235
"@commitlint/cz-commitlint": "^17.5.0",
3336
"@semantic-release/changelog": "^6.0.3",
3437
"@semantic-release/git": "^10.0.1",
35-
"@swc/core": "^1.3.44",
38+
"@swc/core": "^1.3.46",
3639
"@swc/jest": "^0.2.24",
40+
"@types/cross-spawn": "^6.0.2",
3741
"@types/express": "^4.17.17",
3842
"@types/jest": "^29.5.0",
3943
"@types/supertest": "^2.0.12",
40-
"@typescript-eslint/eslint-plugin": "^5.57.0",
41-
"@typescript-eslint/parser": "^5.57.0",
44+
"@typescript-eslint/eslint-plugin": "^5.57.1",
45+
"@typescript-eslint/parser": "^5.57.1",
4246
"commitizen": "^4.3.0",
4347
"cross-env": "^7.0.3",
48+
"cross-spawn": "^7.0.3",
49+
"esbuild": "~0.16.17",
4450
"eslint": "^8.37.0",
4551
"eslint-config-airbnb-base": "^15.0.0",
4652
"eslint-config-airbnb-typescript": "^17.0.0",
@@ -51,24 +57,24 @@
5157
"eslint-plugin-prettier": "^4.2.1",
5258
"eslint-plugin-simple-import-sort": "^10.0.0",
5359
"eslint-plugin-unused-imports": "^2.0.0",
54-
"execa": "^7.1.1",
5560
"husky": "^8.0.3",
5661
"jest": "^29.5.0",
57-
"lint-staged": "^13.2.0",
58-
"mongodb-memory-server": "^8.12.1",
62+
"lint-staged": "^13.2.1",
63+
"mongodb-memory-server": "^8.12.2",
5964
"npm-run-all": "^4.1.5",
60-
"p-retry": "^5.1.2",
65+
"p-retry": "^4.6.2",
6166
"prettier": "^2.8.7",
6267
"prisma": "^4.12.0",
6368
"rimraf": "^4.4.1",
6469
"semantic-release": "^19.0.5",
65-
"serverless": "^3.29.0",
66-
"serverless-bundle": "^5.5.0",
70+
"serverless": "^3.30.1",
6771
"serverless-dotenv-plugin": "^6.0.0",
72+
"serverless-esbuild": "^1.43.0",
6873
"serverless-offline": "^12.0.4",
6974
"start-server-and-test": "^2.0.0",
7075
"supertest": "^6.3.3",
7176
"ts-node": "^10.9.1",
77+
"tsconfig-paths": "^4.2.0",
7278
"typescript": "^4.9.5"
7379
},
7480
"config": {
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
/* eslint-disable import/no-extraneous-dependencies,no-console */
2-
import { MongoMemoryReplSet } from "mongodb-memory-server";
3-
import pRetry from "p-retry";
4-
import { prismaDbPush } from "./prisma.mjs";
2+
import { MongoMemoryReplSet } from 'mongodb-memory-server';
3+
import pRetry from 'p-retry';
4+
5+
import { prismaDbPush } from './prisma';
56

67
let mongodb: MongoMemoryReplSet | null = null;
78

@@ -10,27 +11,27 @@ let mongodb: MongoMemoryReplSet | null = null;
1011
instanceOpts: [
1112
{
1213
port: 27017,
13-
storageEngine: "wiredTiger",
14+
storageEngine: 'wiredTiger',
1415
},
1516
{
1617
port: 27018,
17-
storageEngine: "wiredTiger",
18+
storageEngine: 'wiredTiger',
1819
},
1920
],
2021
});
2122

2223
await mongodb.start();
2324

24-
process.env.MOCK_MONGODB_DATABASE_ENDPOINT = mongodb
25+
process.env.DATABASE_URL = mongodb
2526
.getUri()
26-
.replace("/?replicaSet=", `/modernmern?replicaSet=`);
27+
.replace('/?replicaSet=', `/modernmern?replicaSet=`);
2728

2829
await pRetry(prismaDbPush, { retries: 5 });
2930

3031
console.log(`MongoDB ready - endpoint: ${mongodb.getUri()}`);
3132
})();
3233

33-
process.on("SIGINT", () => {
34+
process.on('SIGINT', () => {
3435
if (mongodb) {
3536
mongodb.stop();
3637
}

scripts/deployDbProd.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { prismaDbPush } from './prisma';
2+
3+
(async () => {
4+
await prismaDbPush();
5+
})();

scripts/prisma.mts

Lines changed: 0 additions & 15 deletions
This file was deleted.

scripts/prisma.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/* eslint-disable import/no-extraneous-dependencies */
2+
import { spawn as spawnCb } from 'cross-spawn';
3+
import { promisify } from 'util';
4+
5+
const spawn = promisify(spawnCb);
6+
7+
export const prismaDbPush = () => {
8+
return spawn('prisma', ['db', 'push'], {
9+
stdio: 'inherit',
10+
env: {
11+
...process.env,
12+
},
13+
});
14+
};

serverless.yml

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,25 +5,25 @@ custom:
55
# commands. Or falls back to what we have set in the provider section.
66
stage: ${opt:stage, 'offline'}
77
region: ${opt:region, 'us-east-1'}
8-
bundle:
9-
linting: false
10-
excludeFiles: "**/*.test.ts"
11-
externals:
12-
- "@prisma/client"
13-
copyFiles:
14-
- from: "prisma/schema.prisma"
15-
to: "./"
16-
packagerOptions:
17-
scripts:
18-
- prisma generate && rimraf node_modules/@prisma/engines/** && rimraf node_modules/prisma/libquery_engine-[^rhel]* && prisma db push
8+
prismaEngine:
9+
offline: "node_modules/.prisma/client/*.node"
10+
staging: "node_modules/.prisma/client/libquery_engine-rhel*"
11+
prod: "node_modules/.prisma/client/libquery_engine-rhel*"
12+
13+
esbuild:
14+
platform: "node"
15+
target: node16
16+
sourcemap: linked
1917
serverless-offline:
2018
httpPort: 4000
2119
noPrependStageInUrl: true
2220
reloadHandler: true
2321

2422
provider:
2523
name: aws
26-
runtime: nodejs14.x
24+
stage: ${self:custom.stage}
25+
region: ${self:custom.region}
26+
runtime: nodejs16.x
2727
memorySize: 512
2828
timeout: 10
2929
logRetentionInDays: 90
@@ -43,9 +43,13 @@ functions:
4343
method: "*"
4444

4545
package:
46+
patterns:
47+
- "!**/*.test.ts"
48+
- ${self:custom.prismaEngine.${self:custom.stage}}
49+
- "node_modules/.prisma/client/schema.prisma"
4650
individually: true
4751

4852
plugins:
4953
- serverless-dotenv-plugin
50-
- serverless-bundle
54+
- serverless-esbuild
5155
- serverless-offline

tsconfig.json

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,5 +35,11 @@
3535
"@/*": ["./src/*"]
3636
}
3737
},
38+
"ts-node": {
39+
"require": ["tsconfig-paths/register"],
40+
"compilerOptions": {
41+
"module": "CommonJS"
42+
}
43+
},
3844
"exclude": ["./dist/**/*", "./node_modules/**/*"]
3945
}

0 commit comments

Comments
 (0)