Socket
Socket
Sign inDemoInstall

slot-calculator

Package Overview
Dependencies
2
Maintainers
1
Versions
19
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 2.1.4 to 2.1.5

.github/workflows/npm-publish.yml

64

dist/index.js

@@ -1,4 +0,10 @@

import { DateTime } from "luxon";
import equal from "fast-deep-equal";
export function getSlots(config) {
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getSlots = void 0;
const luxon_1 = require("luxon");
const es6_1 = __importDefault(require("fast-deep-equal/es6"));
function getSlots(config) {
const functionStart = performance.now();

@@ -10,6 +16,6 @@ let warnDaySlotNotProcessed = false;

// Get bounds as unix time
const from = config.from ? DateTime.fromISO(config.from) : undefined;
const fromUnix = from?.valueOf();
const to = config.to ? DateTime.fromISO(config.to) : undefined;
const toUnix = to?.valueOf();
const from = config.from ? luxon_1.DateTime.fromISO(config.from) : undefined;
const fromUnix = from === null || from === void 0 ? void 0 : from.valueOf();
const to = config.to ? luxon_1.DateTime.fromISO(config.to) : undefined;
const toUnix = to === null || to === void 0 ? void 0 : to.valueOf();
// Get dates for each day within bounds

@@ -20,2 +26,3 @@ let datesByWeekdayByTimezone = {};

function processInputSlots(slots, type) {
var _a, _b, _c;
for (const slot of slots) {

@@ -49,5 +56,5 @@ // Allow for weekdays

};
const generatedSlots = getDatesByDay(slot.timezone ?? "UTC")[slot.day]?.map((date) => {
const generatedSlots = (_b = getDatesByDay((_a = slot.timezone) !== null && _a !== void 0 ? _a : "UTC")[slot.day]) === null || _b === void 0 ? void 0 : _b.map((date) => {
const obj = {
from: DateTime.fromISO(date, {
from: luxon_1.DateTime.fromISO(date, {
zone: slot.timezone,

@@ -60,3 +67,3 @@ })

.toISO(),
to: DateTime.fromISO(date, {
to: luxon_1.DateTime.fromISO(date, {
zone: slot.timezone,

@@ -79,6 +86,6 @@ })

// Get unix times
const slotFromUnix = DateTime.fromISO(slot.from)
const slotFromUnix = luxon_1.DateTime.fromISO(slot.from)
.set({ second: 0, millisecond: 0 })
.valueOf();
const slotToUnix = DateTime.fromISO(slot.to)
const slotToUnix = luxon_1.DateTime.fromISO(slot.to)
.set({ second: 0, millisecond: 0 })

@@ -96,3 +103,3 @@ .valueOf();

for (let i = slotFromUnix; i < slotToUnix; i += 60000) {
let mapValue = minutes.get(i) ?? {
let mapValue = (_c = minutes.get(i)) !== null && _c !== void 0 ? _c : {
blankAvailable: false,

@@ -105,3 +112,3 @@ blankUnavailable: false,

if (slot.metadata) {
if (!mapValue.metadataAvailable.find((metadata) => equal(metadata, slot.metadata))) {
if (!mapValue.metadataAvailable.find((metadata) => (0, es6_1.default)(metadata, slot.metadata))) {
// Add to array if metadata not already in it

@@ -117,3 +124,3 @@ mapValue.metadataAvailable.push(slot.metadata);

if (slot.metadata) {
let metadataAvailableIndex = mapValue.metadataAvailable.findIndex((metadata) => equal(metadata, slot.metadata));
let metadataAvailableIndex = mapValue.metadataAvailable.findIndex((metadata) => (0, es6_1.default)(metadata, slot.metadata));
if (metadataAvailableIndex !== -1) {

@@ -123,3 +130,3 @@ // Delete from available array if metadata found in it

}
if (!mapValue.metadataUnavailable.find((metadata) => equal(metadata, slot.metadata))) {
if (!mapValue.metadataUnavailable.find((metadata) => (0, es6_1.default)(metadata, slot.metadata))) {
// Add to array if metadata not already in it

@@ -166,6 +173,7 @@ mapValue.metadataUnavailable.push(slot.metadata);

const canWeGetFullSlotFromHere = (from) => {
var _a, _b, _c, _d, _e;
const minutesBasicAvailable = [];
const minutesBasicUnavailable = [];
const metadataAvailable = minutes.get(from)?.metadataAvailable ?? [];
const metadataUnavailable = minutes.get(from)?.metadataUnavailable ?? [];
const metadataAvailable = (_b = (_a = minutes.get(from)) === null || _a === void 0 ? void 0 : _a.metadataAvailable) !== null && _b !== void 0 ? _b : [];
const metadataUnavailable = (_d = (_c = minutes.get(from)) === null || _c === void 0 ? void 0 : _c.metadataUnavailable) !== null && _d !== void 0 ? _d : [];
for (let slotMinute = from; slotMinute <= from + config.duration * 60000 - 60000; slotMinute += 60000) {

@@ -179,3 +187,3 @@ let minuteAvailable = false;

for (const [index, metadata] of metadataAvailable.entries()) {
if (!minute.metadataAvailable.find((obj) => equal(obj, metadata))) {
if (!minute.metadataAvailable.find((obj) => (0, es6_1.default)(obj, metadata))) {
// If there is a metadata in the array but not in this minute, delete it from the array

@@ -185,4 +193,4 @@ metadataAvailable.splice(index, 1);

}
for (const metadata of minute.metadataUnavailable ?? []) {
if (!minute.metadataUnavailable.find((obj) => equal(obj, metadata))) {
for (const metadata of (_e = minute.metadataUnavailable) !== null && _e !== void 0 ? _e : []) {
if (!minute.metadataUnavailable.find((obj) => (0, es6_1.default)(obj, metadata))) {
// If the array does not have this metadata, add it to the array

@@ -216,11 +224,12 @@ metadataUnavailable.push(metadata);

const pushSlot = ({ from, to, available, }) => {
const date = DateTime.fromMillis(from)
var _a, _b;
const date = luxon_1.DateTime.fromMillis(from)
.setZone(config.outputTimezone)
.toISODate();
const slot = {
from: DateTime.fromMillis(from)
.setZone(config.outputTimezone ?? "utc")
from: luxon_1.DateTime.fromMillis(from)
.setZone((_a = config.outputTimezone) !== null && _a !== void 0 ? _a : "utc")
.toISO(),
to: DateTime.fromMillis(to)
.setZone(config.outputTimezone ?? "utc")
to: luxon_1.DateTime.fromMillis(to)
.setZone((_b = config.outputTimezone) !== null && _b !== void 0 ? _b : "utc")
.toISO(),

@@ -329,2 +338,3 @@ available,

}
export default { getSlots };
exports.getSlots = getSlots;
exports.default = { getSlots };

@@ -1,12 +0,23 @@

import { getSlots } from "./index.js";
import { DateTime, Settings } from "luxon";
Settings.defaultZone = "UTC";
import { test, expect } from "vitest";
const dateTimeRef = DateTime.utc(2022, 1, 1);
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const index_js_1 = require("./index.js");
const luxon_1 = require("luxon");
luxon_1.Settings.defaultZone = "UTC";
const vitest_1 = require("vitest");
const dateTimeRef = luxon_1.DateTime.utc(2022, 1, 1);
function log(value) {
console.dir(value, { depth: null });
}
test("Basic", async () => {
(0, vitest_1.test)("Basic", () => __awaiter(void 0, void 0, void 0, function* () {
// true, true
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -16,3 +27,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -29,6 +40,6 @@ from: "2022-01-01T00:00:00.000Z",

]);
});
test("Basic available", async () => {
}));
(0, vitest_1.test)("Basic available", () => __awaiter(void 0, void 0, void 0, function* () {
// false, true
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -44,3 +55,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -57,6 +68,6 @@ from: "2022-01-01T00:00:00.000Z",

]);
});
test("Basic unavailable", async () => {
}));
(0, vitest_1.test)("Basic unavailable", () => __awaiter(void 0, void 0, void 0, function* () {
// true, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -72,3 +83,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -85,6 +96,6 @@ from: "2022-01-01T00:00:00.000Z",

]);
});
test("Basic available and unavailable", async () => {
}));
(0, vitest_1.test)("Basic available and unavailable", () => __awaiter(void 0, void 0, void 0, function* () {
// false, true, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -106,3 +117,3 @@ to: dateTimeRef.plus({ hour: 3 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -124,6 +135,6 @@ from: "2022-01-01T00:00:00.000Z",

]);
});
test("Available and unavailable without from and to", async () => {
}));
(0, vitest_1.test)("Available and unavailable without from and to", () => __awaiter(void 0, void 0, void 0, function* () {
// true, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
availability: [

@@ -143,3 +154,3 @@ {

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -156,6 +167,6 @@ from: "2022-01-01T01:00:00.000Z",

]);
});
test("Some time between unavailable and available slot", async () => {
}));
(0, vitest_1.test)("Some time between unavailable and available slot", () => __awaiter(void 0, void 0, void 0, function* () {
// false, true, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -171,3 +182,3 @@ to: dateTimeRef.plus({ hour: 3, minute: 30 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -189,6 +200,6 @@ from: "2022-01-01T00:00:00.000Z",

]);
});
test("Show unavailable slot when there if there are available minutes but it won't lead to a full slot", async () => {
}));
(0, vitest_1.test)("Show unavailable slot when there if there are available minutes but it won't lead to a full slot", () => __awaiter(void 0, void 0, void 0, function* () {
// false, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -204,3 +215,3 @@ to: dateTimeRef.plus({ hour: 2, minute: 30 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -217,6 +228,6 @@ from: "2022-01-01T00:00:00.000Z",

]);
});
test("User availabilities", () => {
}));
(0, vitest_1.test)("User availabilities", () => {
// true + Alice, true + Bob
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -243,3 +254,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -259,5 +270,5 @@ from: "2022-01-01T00:00:00.000Z",

});
test("User availabilities and unavailabilities", () => {
(0, vitest_1.test)("User availabilities and unavailabilities", () => {
// true + Alice, false + Alice
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -285,3 +296,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -301,5 +312,5 @@ from: "2022-01-01T00:00:00.000Z",

});
test("With timezones", () => {
(0, vitest_1.test)("With timezones", () => {
// true + offset 1, false + offset 1
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -318,3 +329,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -332,5 +343,5 @@ from: "2022-01-01T01:00:00.000+01:00",

});
test("Day slot does not fall within bounds", () => {
(0, vitest_1.test)("Day slot does not fall within bounds", () => {
// false, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -348,3 +359,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -362,5 +373,5 @@ from: "2022-01-01T00:00:00.000Z",

});
test("Bounds and day slot aren't the same timezone, so days of the week differ", () => {
(0, vitest_1.test)("Bounds and day slot aren't the same timezone, so days of the week differ", () => {
// true, false
const { allSlots } = getSlots({
const { allSlots } = (0, index_js_1.getSlots)({
from: dateTimeRef.toISO(),

@@ -378,3 +389,3 @@ to: dateTimeRef.plus({ hour: 2 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -392,5 +403,5 @@ from: "2022-01-01T00:00:00.000Z",

});
test("Helper variables", async () => {
(0, vitest_1.test)("Helper variables", () => __awaiter(void 0, void 0, void 0, function* () {
// false, true
const { allSlots, availableSlots, allDates, availableDates, allSlotsByDay, availableSlotsByDay, } = getSlots({
const { allSlots, availableSlots, allDates, availableDates, allSlotsByDay, availableSlotsByDay, } = (0, index_js_1.getSlots)({
from: dateTimeRef.minus({ hour: 1 }).toISO(),

@@ -406,3 +417,3 @@ to: dateTimeRef.plus({ hour: 1 }).toISO(),

});
expect(allSlots).toEqual([
(0, vitest_1.expect)(allSlots).toEqual([
{

@@ -419,3 +430,3 @@ from: "2021-12-31T23:00:00.000Z",

]);
expect(availableSlots).toEqual([
(0, vitest_1.expect)(availableSlots).toEqual([
{

@@ -427,5 +438,5 @@ from: "2022-01-01T00:00:00.000Z",

]);
expect(allDates).toEqual(["2021-12-31", "2022-01-01"]);
expect(availableDates).toEqual(["2022-01-01"]);
expect(allSlotsByDay).toEqual({
(0, vitest_1.expect)(allDates).toEqual(["2021-12-31", "2022-01-01"]);
(0, vitest_1.expect)(availableDates).toEqual(["2022-01-01"]);
(0, vitest_1.expect)(allSlotsByDay).toEqual({
"2021-12-31": [

@@ -446,3 +457,3 @@ {

});
expect(availableSlotsByDay).toEqual({
(0, vitest_1.expect)(availableSlotsByDay).toEqual({
"2022-01-01": [

@@ -456,2 +467,2 @@ {

});
});
}));

@@ -1,3 +0,5 @@

import { defineConfig } from "vitest/config";
export default defineConfig({
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const config_1 = require("vitest/config");
exports.default = (0, config_1.defineConfig)({
test: {

@@ -4,0 +6,0 @@ // ...

import { DateTime } from "luxon";
import equal from "fast-deep-equal";
import equal from "fast-deep-equal/es6";

@@ -4,0 +4,0 @@ export type Day =

@@ -7,2 +7,6 @@ # Problems I had with other similar packages

- Outputted slots did not have `to` property, just a `time`
- No TypeScript support (or even a declaration file)
- No TypeScript support (or even a declaration file)
# Things to remember
- Run `npm run docs` before committing.
{
"name": "slot-calculator",
"version": "2.1.4",
"version": "2.1.5",
"description": "Calculate time slots for your users to choose from.",

@@ -23,4 +23,3 @@ "homepage": "https://github.com/huzaifahj/slot-calculator",

"test": "vitest run",
"build": "tsc",
"prepare": "npm run build",
"prepare": "tsc",
"docs": "typedoc --out docs index.ts"

@@ -39,4 +38,3 @@ },

"vitest": "^0.14.2"
},
"type": "module"
}
}

@@ -14,3 +14,3 @@ {

/* Language and Environment */
"target": "ESNext" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
"target": "ES6" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */,
// "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */

@@ -29,6 +29,6 @@ // "jsx": "preserve", /* Specify what JSX code is generated. */

/* Modules */
"module": "ESNext" /* Specify what module code is generated. */,
"module": "commonjs" /* Specify what module code is generated. */,
"outDir": "dist",
// "rootDir": "./", /* Specify the root folder within your source files. */
"moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
// "moduleResolution": "node" /* Specify how TypeScript looks up a file from a given module specifier. */,
// "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */

@@ -35,0 +35,0 @@ // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

Sorry, the diff of this file is not supported yet

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc