FROM node:22.18.0-alpine3.22 AS dependencies
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm ci --ignore-scripts

FROM dependencies AS test
COPY tsconfig.json tsconfig.build.json ./
COPY src ./src
COPY test ./test
CMD ["npm", "test"]

FROM dependencies AS build
COPY tsconfig.json tsconfig.build.json ./
COPY src ./src
RUN npm run build

FROM node:22.18.0-alpine3.22 AS production
WORKDIR /app
ENV NODE_ENV=production
COPY package.json ./
COPY --from=build /app/dist ./dist
USER node
CMD ["node", "--input-type=module", "--eval", "import('@gaza/protocol')"]
