Skip to content

Commit

Permalink
feat: migrate to serverless-esbuild from serverless-bundle
Browse files Browse the repository at this point in the history
  • Loading branch information
ixartz committed Apr 7, 2023
1 parent dacae75 commit d4887ef
Show file tree
Hide file tree
Showing 9 changed files with 47,988 additions and 30,165 deletions.
33,671 changes: 33,671 additions & 0 deletions .esbuild/.build/src/handler.js

Large diffs are not rendered by default.

44,340 changes: 14,236 additions & 30,104 deletions package-lock.json

Large diffs are not rendered by default.

56 changes: 31 additions & 25 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -3,72 +3,78 @@
"version": "1.0.0",
"description": "Serverless framework ExpressJS TypeScript",
"scripts": {
"dev:db": "ts-node --esm scripts/database.mts",
"dev:db": "ts-node --esm scripts/database.ts",
"dev:server": "cross-env NODE_ENV=development sls offline start --stage offline",
"dev": "run-p dev:*",
"tail-log": "sls logs -f app -t",
"deploy-prod": "cross-env NODE_ENV=production sls deploy --stage prod",
"deploy:db": "dotenv -e .env.production -c -- ts-node --esm scripts/deployDbProd.ts",
"deploy:app": "cross-env NODE_ENV=production sls deploy --stage prod",
"deploy-prod": "run-s deploy:*",
"remove-prod": "cross-env NODE_ENV=production sls remove --stage prod",
"clean": "rimraf dist .webpack .serverless",
"clean": "rimraf dist .esbuild .serverless",
"lint": "eslint .",
"format": "eslint --fix . && prettier '**/*.{json,yaml}' --write --ignore-path .gitignore",
"check-types": "tsc --noEmit --pretty",
"test": "jest",
"commit": "cz",
"test": "jest",
"test:dev": "start-server-and-test dev http://localhost:4000 'curl --head http://localhost:4000'",
"db:push": "prisma db push",
"prepare": "husky install",
"postinstall": "prisma generate"
},
"dependencies": {
"@prisma/client": "^4.11.0",
"@prisma/client": "^4.12.0",
"express": "^4.18.2",
"express-async-errors": "^3.1.1",
"helmet": "^6.0.1",
"serverless-http": "^3.1.1"
"serverless-http": "^3.2.0"
},
"devDependencies": {
"@commitlint/cli": "^17.4.4",
"@commitlint/cli": "^17.5.1",
"@commitlint/config-conventional": "^17.4.4",
"@commitlint/cz-commitlint": "^17.4.4",
"@semantic-release/changelog": "^6.0.2",
"@commitlint/cz-commitlint": "^17.5.0",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@swc/core": "^1.3.39",
"@swc/core": "^1.3.46",
"@swc/jest": "^0.2.24",
"@types/cross-spawn": "^6.0.2",
"@types/express": "^4.17.17",
"@types/jest": "^29.4.0",
"@types/jest": "^29.5.0",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^5.54.1",
"@typescript-eslint/parser": "^5.54.1",
"@typescript-eslint/eslint-plugin": "^5.57.1",
"@typescript-eslint/parser": "^5.57.1",
"commitizen": "^4.3.0",
"cross-env": "^7.0.3",
"eslint": "^8.35.0",
"cross-spawn": "^7.0.3",
"esbuild": "~0.16.17",
"eslint": "^8.37.0",
"eslint-config-airbnb-base": "^15.0.0",
"eslint-config-airbnb-typescript": "^17.0.0",
"eslint-config-prettier": "^8.7.0",
"eslint-config-prettier": "^8.8.0",
"eslint-plugin-import": "^2.27.5",
"eslint-plugin-jest": "^27.2.1",
"eslint-plugin-jest-formatting": "^3.1.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-simple-import-sort": "^10.0.0",
"eslint-plugin-unused-imports": "^2.0.0",
"execa": "^7.0.0",
"husky": "^8.0.3",
"jest": "^29.5.0",
"lint-staged": "^13.2.0",
"mongodb-memory-server": "^8.12.0",
"lint-staged": "^13.2.1",
"mongodb-memory-server": "^8.12.2",
"npm-run-all": "^4.1.5",
"p-retry": "^5.1.2",
"prettier": "^2.8.4",
"prisma": "^4.11.0",
"rimraf": "^4.4.0",
"p-retry": "^4.6.2",
"prettier": "^2.8.7",
"prisma": "^4.12.0",
"rimraf": "^4.4.1",
"semantic-release": "^19.0.5",
"serverless": "^3.28.1",
"serverless-bundle": "^5.5.0",
"serverless-dotenv-plugin": "^4.0.2",
"serverless": "^3.30.1",
"serverless-dotenv-plugin": "^6.0.0",
"serverless-esbuild": "^1.43.0",
"serverless-offline": "^12.0.4",
"start-server-and-test": "^2.0.0",
"supertest": "^6.3.3",
"ts-node": "^10.9.1",
"tsconfig-paths": "^4.2.0",
"typescript": "^4.9.5"
},
"config": {
Expand Down
17 changes: 9 additions & 8 deletions scripts/database.mts → scripts/database.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
/* eslint-disable import/no-extraneous-dependencies,no-console */
import { MongoMemoryReplSet } from "mongodb-memory-server";
import pRetry from "p-retry";
import { prismaDbPush } from "./prisma.mjs";
import { MongoMemoryReplSet } from 'mongodb-memory-server';
import pRetry from 'p-retry';

import { prismaDbPush } from './prisma';

let mongodb: MongoMemoryReplSet | null = null;

Expand All @@ -10,27 +11,27 @@ let mongodb: MongoMemoryReplSet | null = null;
instanceOpts: [
{
port: 27017,
storageEngine: "wiredTiger",
storageEngine: 'wiredTiger',
},
{
port: 27018,
storageEngine: "wiredTiger",
storageEngine: 'wiredTiger',
},
],
});

await mongodb.start();

process.env.MOCK_MONGODB_DATABASE_ENDPOINT = mongodb
process.env.DATABASE_URL = mongodb
.getUri()
.replace("/?replicaSet=", `/modernmern?replicaSet=`);
.replace('/?replicaSet=', `/modernmern?replicaSet=`);

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

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

process.on("SIGINT", () => {
process.on('SIGINT', () => {
if (mongodb) {
mongodb.stop();
}
Expand Down
5 changes: 5 additions & 0 deletions scripts/deployDbProd.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { prismaDbPush } from './prisma';

(async () => {
await prismaDbPush();
})();
15 changes: 0 additions & 15 deletions scripts/prisma.mts

This file was deleted.

14 changes: 14 additions & 0 deletions scripts/prisma.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
/* eslint-disable import/no-extraneous-dependencies */
import { spawn as spawnCb } from 'cross-spawn';
import { promisify } from 'util';

const spawn = promisify(spawnCb);

export const prismaDbPush = () => {
return spawn('prisma', ['db', 'push'], {
stdio: 'inherit',
env: {
...process.env,
},
});
};
29 changes: 16 additions & 13 deletions serverless.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,25 +5,24 @@ custom:
# commands. Or falls back to what we have set in the provider section.
stage: ${opt:stage, 'offline'}
region: ${opt:region, 'us-east-1'}
bundle:
linting: false
excludeFiles: "**/*.test.ts"
externals:
- "@prisma/client"
copyFiles:
- from: "prisma/schema.prisma"
to: "./"
packagerOptions:
scripts:
- prisma generate && rimraf node_modules/@prisma/engines/** && rimraf node_modules/prisma/libquery_engine-[^rhel]* && prisma db push
prismaEngine:
offline: "node_modules/.prisma/client/*.node"
staging: "node_modules/.prisma/client/libquery_engine-rhel*"
prod: "node_modules/.prisma/client/libquery_engine-rhel*"

esbuild:
platform: "node"
target: node16
serverless-offline:
httpPort: 4000
noPrependStageInUrl: true
reloadHandler: true

provider:
name: aws
runtime: nodejs14.x
stage: ${self:custom.stage}
region: ${self:custom.region}
runtime: nodejs16.x
memorySize: 512
timeout: 10
logRetentionInDays: 90
Expand All @@ -43,9 +42,13 @@ functions:
method: "*"

package:
patterns:
- "!**/*.test.ts"
- ${self:custom.prismaEngine.${self:custom.stage}}
- "node_modules/.prisma/client/schema.prisma"
individually: true

plugins:
- serverless-dotenv-plugin
- serverless-bundle
- serverless-esbuild
- serverless-offline
6 changes: 6 additions & 0 deletions tsconfig.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,5 +35,11 @@
"@/*": ["./src/*"]
}
},
"ts-node": {
"require": ["tsconfig-paths/register"],
"compilerOptions": {
"module": "CommonJS"
}
},
"exclude": ["./dist/**/*", "./node_modules/**/*"]
}

0 comments on commit d4887ef

Please sign in to comment.