actions/add-subtract-time/add-subtract-time.mjs
import { ConfigurationError } from "@pipedream/platform"; import pipedream_utils from "../../pipedream_utils.app.mjs"; import commonDateTime from "../../common/date-time/commonDateTime.mjs"; import { DATE_FORMAT_PARSE_MAP, DEFAULT_FORMAT_VALUE, } from "../../common/date-time/dateFormats.mjs"; import { DATE_TIME_UNITS } from "../../common/date-time/dateTimeUnits.mjs"; import sugar from "sugar"; const OPERATION_OPTIONS = { ADD: "Add", SUBTRACT: "Subtract", }; export default { ...commonDateTime, name: "Formatting - [Date/Time] Add/Subtract Time", description: "Add or subtract time from a given input", key: "pipedream_utils-add-subtract-time", version: "0.0.6", annotations: { destructiveHint: false, openWorldHint: true, readOnlyHint: false, }, type: "action", props: { ...commonDateTime.props, operation: { label: "Operation", description: "Whether to add or subtract time.", type: "string", options: Object.values(OPERATION_OPTIONS), }, duration: { label: "Duration", description: "The duration for the operation. You can use the shorthand duration, for example: `1s`, `1m`, `1h`, `1d`, `1w`, `1y` equal one second, minute, hour, day, week, and year respectively", type: "string", }, outputFormat: { propDefinition: [ pipedream_utils, "outputFormat", ], }, }, methods: { ...commonDateTime.methods, getOperationMilliseconds(str) { let result = 0; const { second, minute, hour, day, week, year, } = DATE_TIME_UNITS; Object.entries({ s: second, m: minute, h: hour, d: day, w: week, y: year, }).forEach(([ identifier, multiplier, ]) => { const substr = str.match(new RegExp(`[0-9]+\\s*${identifier}`))?.[0]; if (substr) { const value = Number(substr.match(/[0-9]+/)); result += value * multiplier; } }); return result; }, }, async run({ $ }) { const { operation, duration, outputFormat, } = this; const dateObj = this.getDateFromInput(); const value = dateObj.valueOf(); let amount = this.getOperationMilliseconds(duration); if (operation === OPERATION_OPTIONS.SUBTRACT) amount *= -1; const result = value + amount; const format = outputFormat ?? this.inputFormat ?? DEFAULT_FORMAT_VALUE; try { const { outputFn } = DATE_FORMAT_PARSE_MAP.get(format); const output = outputFn(sugar.Date.create(result)); $.export("$summary", `Successfully ${operation === OPERATION_OPTIONS.SUBTRACT ? "subtracted" : "added"} time`); return output; } catch (err) { console.log("Error parsing date", err); throw new ConfigurationError("**Parse error** - check your input and if the selected format is correct."); } }, };