############################################
### APP BUILD STAGE
############################################
FROM node:18-slim AS appbuild

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

RUN apt-get update && apt-get install -y --no-install-recommends \
    python3.5 \
    python3-pip \
    g++ \
    make \
    && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

# Install app dependencies
COPY package.json yarn.lock .npmrc /usr/src/app/
RUN yarn install --frozen-lockfile --silent \
      && yarn cache clean --force

# Build app
COPY .eslintrc.json .eslintignore tsconfig.json /usr/src/app/
COPY src /usr/src/app/src
RUN yarn build

# Install app production dependencies
RUN rm -rf node_modules \
      && yarn install --frozen-lockfile --silent --production \
      && yarn cache clean --force


############################################
### IMAGE BUILD STAGE
############################################
FROM node:18-slim

# Create app directory
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app

# Copy app dependencies
COPY package.json /usr/src/app/
COPY --from=appbuild /usr/src/app/node_modules /usr/src/app/node_modules

# Bundle app source
COPY --from=appbuild /usr/src/app/dist /usr/src/app/dist

EXPOSE  3000

CMD [ "node", "--max-old-space-size=8129", "dist" ]
