build.ts 1.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. // Next.js API route support: https://nextjs.org/docs/api-routes/introduction
  2. import type { NextApiRequest, NextApiResponse } from "next";
  3. import { Low, JSONFile } from "lowdb";
  4. type IDBData = {
  5. buildObj: {
  6. [key: string]: string[];
  7. };
  8. };
  9. const adapter = new JSONFile<IDBData>("./db.json");
  10. const db = new Low(adapter);
  11. interface IData {
  12. buildId: string;
  13. }
  14. // SSE 实时安装进度显示,https://www.ruanyifeng.com/blog/2017/05/server-sent_events.html
  15. export default async function handler(
  16. req: NextApiRequest,
  17. res: NextApiResponse<IData>
  18. ) {
  19. // Get data submitted in request's body.
  20. const body = req.body;
  21. const buildId = randomId();
  22. await db.read();
  23. db.data = db.data || { buildObj: {} };
  24. const { buildObj } = db.data;
  25. buildObj[buildId] = body.buildList;
  26. await db.write();
  27. res.status(200).json({ buildId: buildId });
  28. }
  29. function randomId(): string {
  30. function S4() {
  31. return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1);
  32. }
  33. return S4() + new Date().getTime() + S4() + S4();
  34. }