# ################################################################
# ###                        Base image                        ###
# ################################################################
FROM node:16-alpine as base

WORKDIR /opt

ENV NODE_ENV production

RUN apk update && \
    apk upgrade && \
    npm i npm@latest -g && \
    chown node:node -R /opt
    
    # && \
    # apk add --no-cache bash && \
    # apk add --no-cache git && \

COPY --chown=node:node package*.json ./

USER node

# ################################################################
# ###                        build image                       ###
# ################################################################

FROM base as build

ENV NODE_ENV development

COPY --chown=node:node . .

RUN npm install && npm cache clean --force
ENV PATH /opt/node_modules/.bin:$PATH

RUN tsc -p ./tsconfig.node.json && \
    resolve-tspaths --out "dist" && \
    npm run spa-build

# ################################################################
# ###                      modules image                       ###
# ################################################################

FROM base as modules

RUN npm install && npm cache clean --force

# ################################################################
# ###                     production image                     ###
# ################################################################

FROM base as production

COPY --from=build --chown=node:node /opt/dist ./dist
COPY --from=modules --chown=node:node /opt/node_modules ./node_modules

COPY --chown=node:node ./wx-config.* ./

CMD node dist/backend/app.js