# syntax = docker/dockerfile:1

# Adjust NODE_VERSION as desired
ARG NODE_VERSION=22
FROM node:${NODE_VERSION}-slim as base

LABEL fly_launch_runtime="Node.js"

# Node.js app lives here
WORKDIR /app

# Set production environment
ENV NODE_ENV="production"

# Throw-away build stage to reduce size of final image
FROM base as build

COPY package*.json ./

# Install packages needed to build node modules
RUN apt-get update -qq && \
    apt-get install -y build-essential pkg-config python-is-python3

RUN yarn global add node-gyp

# Install node modules
COPY --link package*.json  ./
COPY . .
RUN yarn install --production=false
RUN yarn global add typescript
RUN yarn build

# Final stage for app image
FROM build as development
RUN yarn global add nodemon ts-node @swc/core @swc/wasm
ENTRYPOINT [ "yarn dev" ]

FROM base as production
RUN touch cache
# Copy built application
COPY --from=build /app/dist /app
COPY --from=build /app/package.json /app/package.json

RUN yarn install --production
# Start the server by default, this can be overwritten at runtime
EXPOSE 3000
CMD [ "node", "src/server.js" ]
