Serverless SyntaxError Unexpected token '.'

I’m currently using serverless-webpack, using the settings from ‘aws-nodejs-typescript’ and having this issue that one of the function that I wrote for handling dynamodb stream kept getting this error.

serverless_sdk/index.js
9 */(function(){var o="Expected a function",i="__lodash_placeholder__",s=[["ary",128],["bind",1],["bi
    ^ SyntaxError Unexpected token '.'

And the code I wrote look something like this,

import "source-map-support/register";

import { DynamoDBStreamHandler } from "aws-lambda";
import { DynamoDB, ApiGatewayManagementApi } from "aws-sdk";

const ddb = new DynamoDB.DocumentClient({ apiVersion: "2012-08-10" });
const ws_client = new ApiGatewayManagementApi({
  endpoint: process.env.APIG_ENDPOINT,
});

interface UpdateAggregateParams {
  user_id: string;
  task_id: string;
  old_status: string;
  new_status?: string;
}

/**
 * [WS] Get user connection ID
 *
 * @param user_id user_id must follow 'USER#{user_id}' pattern
 */
const get_user_connection_id = async (
  user_id: string
): Promise<string | null> => {
  const params: DynamoDB.DocumentClient.QueryInput = {
    TableName: process.env.TABLE_NAME,
    KeyConditionExpression: "GSI1_PK = :pk AND GSI1_SK = :sk",
    ExpressionAttributeValues: {
      ":pk": user_id,
      ":sk": "#CONNID#",
    },
  };

  try {
    const result = await ddb.query(params).promise();

    return result.Items[0]?.PK || null;
  } catch (error) {
    console.log(error);

    return null;
  }
};

/**
 * Update aggregate
 *
 * Update aggregate data in task item
 *
 * @param params user_id must follow 'USER#{user_id}' pattern
 * @param is_delete set if update is from a delete, default false
 */
const update_aggregate = async (
  params: UpdateAggregateParams,
  is_delete: boolean = false
) => {
  let update_expression = `SET aggregate_metrics.${params.old_status} = aggregate_metrics.${params.old_status} - 1`;

  if (!is_delete && params.new_status) {
    update_expression += `, aggregate_metrics.${params.new_status} = aggregate_metrics.${params.new_status} + 1`;
  } else if (!is_delete && !params.new_status) {
    throw "New Status is missing";
  }

  const update_params: DynamoDB.DocumentClient.UpdateItemInput = {
    TableName: process.env.TABLE_NAME,
    Key: {
      PK: params.user_id,
      SK: `#TASK#META#${params.task_id}`,
    },
    UpdateExpression: update_expression,
  };

  try {
    await ddb.update(update_params);
  } catch (error) {
    console.log(error);
  }
};

const send_subscriber_message = async (conn_id, payload) => {
  await ws_client
    .postToConnection({
      ConnectionId: conn_id,
      Data: payload,
    })
    .promise();
};

const delete_subscriber_connection = async (conn_id) => {
  await ws_client
    .deleteConnection({
      ConnectionId: conn_id,
    })
    .promise();
};

const checklist_handler = async (new_record, old_record) => {
  const id_list = new_record.SK.S.split(":");

  const task_id = id_list[0].split("#TASK#")[-1];
  const checklist_id = id_list[-1].split("#CHECK#")[-1];

  const updater = update_aggregate({
    user_id: new_record.PK.S,
    task_id: task_id,
    old_status: old_record.status.S,
    new_status: new_record.status.S,
  });

  const conn_id = await get_user_connection_id(new_record.PK.S);
  conn_id != null &&
    (await send_subscriber_message(conn_id, {
      task_id: task_id,
      checklist_id: checklist_id,
      name: new_record.name.S,
      desc: new_record.desc.S,
      status: new_record.desc.S,
      message: new_record.desc.S,
    }));

  await updater;
};

export const main: DynamoDBStreamHandler = async (event, _context) => {
  let jobs: Promise<any>[] = [];

  const checklist_pattern = /#TASK#\S+:#CHECK#\S+/;
  event.Records.forEach((record) => {
    if (record?.eventName === "INSERT" || record?.eventName === "MODIFY") {
      checklist_pattern.test(record["NewImage"].PK.S) &&
        record["NewImage"].PK.S != record["OldImage"].PK.S &&
        jobs.push(checklist_handler(record["NewImage"], record["OldImage"]));
    } else if (record?.eventName === "REMOVE") {
      record["OldImage"].SK.S === "#CONNID#" &&
        jobs.push(delete_subscriber_connection(record["OldImage"].PK.S));
    }
  });

  jobs.length > 0 && (await Promise.all(jobs));
};

Anyone have idea why? I honestly cannot figure it out. Thanks in advance.

I’m taking over an AWS serverless project and I can’t seem to get it running locally. I’m running from an Ubuntu subsystem inside Windows 10 Showbox jiofi.local.html tplinklogin .