Skip to content

Commit

Permalink
add isInArray function and write tests & change webpack to rollup
Browse files Browse the repository at this point in the history
  • Loading branch information
alireza-ab committed Jul 15, 2021
1 parent 62de9a9 commit 6f0fb82
Show file tree
Hide file tree
Showing 22 changed files with 6,534 additions and 10,156 deletions.
3 changes: 3 additions & 0 deletions .babelrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
{
"presets": ["@babel/preset-env"]
}
7,328 changes: 3,011 additions & 4,317 deletions dist/PersianDate.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion dist/PersianDate.js.map

This file was deleted.

3 changes: 1 addition & 2 deletions dist/PersianDate.min.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion dist/PersianDate.min.js.map

This file was deleted.

7,444 changes: 3,072 additions & 4,372 deletions dist/PersianDate.umd.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion dist/PersianDate.umd.js.map

This file was deleted.

3 changes: 1 addition & 2 deletions dist/PersianDate.umd.min.js

Large diffs are not rendered by default.

1 change: 0 additions & 1 deletion dist/PersianDate.umd.min.js.map

This file was deleted.

7 changes: 0 additions & 7 deletions lib/plugin.js

This file was deleted.

File renamed without changes.
7 changes: 7 additions & 0 deletions nuxt/plugin.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
import PersianDate from "@alireza-ab/persian-date";

export default (ctx, inject) => {
const persianDate = new PersianDate();
ctx.$PersianDate = persianDate;
inject("PersianDate", persianDate);
};
14 changes: 6 additions & 8 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@alireza-ab/persian-date",
"version": "2.5.0",
"version": "2.6.0",
"description": "A lightweight but professional library for working with Persian dates",
"main": "./dist/PersianDate.min.js",
"typings": "./typings/PersianDate.d.ts",
Expand All @@ -13,7 +13,7 @@
"url": "https://github.com/alireza-ab/persian-date/issues"
},
"scripts": {
"build": "webpack",
"build": "rollup -c",
"test": "jest",
"bt": "yarn build && yarn test"
},
Expand All @@ -27,13 +27,11 @@
"license": "MIT",
"devDependencies": {
"@alireza-ab/performance-check": "^1.0.0",
"@babel/cli": "^7.14.3",
"@babel/core": "^7.14.3",
"@babel/plugin-transform-modules-umd": "^7.14.0",
"@babel/preset-env": "^7.14.2",
"babel-plugin-add-module-exports": "^1.0.4",
"@rollup/plugin-babel": "^5.3.0",
"@rollup/plugin-node-resolve": "^13.0.0",
"jest": "^27.0.1",
"webpack": "^5.37.1",
"webpack-cli": "^4.7.0"
"rollup": "^2.53.2",
"rollup-plugin-terser": "^7.0.2"
}
}
86 changes: 86 additions & 0 deletions rollup.config.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
import { defineConfig } from "rollup";
import { nodeResolve } from "@rollup/plugin-node-resolve";
import { babel } from "@rollup/plugin-babel";
import { terser } from "rollup-plugin-terser";

export default defineConfig({
input: "src/PersianDate.js",
output: [
{
file: "dist/PersianDate.js",
format: "cjs",
exports: "auto",
},
{
file: "dist/PersianDate.min.js",
format: "cjs",
plugins: [terser()],
exports: "auto",
},
{
file: "dist/PersianDate.umd.js",
format: "umd",
name: "PersianDate",
},
{
file: "dist/PersianDate.umd.min.js",
format: "umd",
plugins: [terser()],
name: "PersianDate",
},
],
plugins: [nodeResolve(), babel({ babelHelpers: "bundled" })],
});
// const path = require('path');
// module.exports = [
// {
// mode: "development",
// target: "node",
// entry: './src/PersianDate.js',
// devtool: 'source-map',
// output: {
// path: path.resolve(__dirname, "dist"),
// filename: 'PersianDate.js',
// library: "PersianDate",
// libraryTarget: "umd",
// libraryExport: "default",
// },
// },
// {
// mode: "production",
// target: "node",
// entry: './src/PersianDate.js',
// devtool: 'source-map',
// output: {
// path: path.resolve(__dirname, "dist"),
// filename: 'PersianDate.min.js',
// library: "PersianDate",
// libraryTarget: "umd",
// libraryExport: "default",
// },
// },
// {
// mode: "development",
// entry: './src/PersianDate.js',
// devtool: 'source-map',
// output: {
// path: path.resolve(__dirname, "dist"),
// filename: 'PersianDate.umd.js',
// library: "PersianDate",
// libraryTarget: "umd",
// libraryExport: "default",
// },
// },
// {
// mode: "production",
// entry: './src/PersianDate.js',
// devtool: 'source-map',
// output: {
// path: path.resolve(__dirname, "dist"),
// filename: 'PersianDate.umd.min.js',
// library: "PersianDate",
// libraryTarget: "umd",
// libraryExport: "default",
// },
// }
// ];
46 changes: 40 additions & 6 deletions src/PersianDate.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@ import {
isValid,
isSame,
isBetween,
isInArray,
} from "./comparison";

import { diff, diffForHumans } from "./diff";
Expand Down Expand Up @@ -1079,7 +1080,7 @@ const PersianDate = function (dateVal, calendarVal) {
* @param {Null|Number|String} minute minute of date
* @param {Null|Number|String} second second of date
* @param {Null|Number|String} millisecond millisecond of date
* @returns {‌Boolean} if date valid, return true of false
* @returns {‌Boolean} if this date is same to the argument, return true of false
*/
PersianDate.prototype.isSame = function () {
if (this.error) return false;
Expand Down Expand Up @@ -1118,7 +1119,7 @@ const PersianDate = function (dateVal, calendarVal) {
* @param {Null|Number|String} minute minute of date
* @param {Null|Number|String} second second of date
* @param {Null|Number|String} millisecond millisecond of date
* @returns {‌Boolean} if date valid, return true of false
* @returns {‌Boolean} if this date is before the argument, return true of false
*/
PersianDate.prototype.isBefore = function () {
if (this.error) return false;
Expand Down Expand Up @@ -1157,7 +1158,7 @@ const PersianDate = function (dateVal, calendarVal) {
* @param {Null|Number|String} minute minute of date
* @param {Null|Number|String} second second of date
* @param {Null|Number|String} millisecond millisecond of date
* @returns {‌Boolean} if date valid, return true of false
* @returns {‌Boolean} if this date is after the argument, return true of false
*/
PersianDate.prototype.isAfter = function () {
if (this.error) return false;
Expand Down Expand Up @@ -1196,7 +1197,7 @@ const PersianDate = function (dateVal, calendarVal) {
* @param {Null|Number|String} minute minute of date
* @param {Null|Number|String} second second of date
* @param {Null|Number|String} millisecond millisecond of date
* @returns {‌Boolean} if date valid, return true of false
* @returns {‌Boolean} if this date is samr or before the argument, return true of false
*/
PersianDate.prototype.isSameOrBefore = function () {
if (this.error) return false;
Expand Down Expand Up @@ -1235,7 +1236,7 @@ const PersianDate = function (dateVal, calendarVal) {
* @param {Null|Number|String} minute minute of date
* @param {Null|Number|String} second second of date
* @param {Null|Number|String} millisecond millisecond of date
* @returns {‌Boolean} if date valid, return true of false
* @returns {‌Boolean} if this date is same or after the argument, return true of false
*/
PersianDate.prototype.isSameOrAfter = function () {
if (this.error) return false;
Expand Down Expand Up @@ -1292,13 +1293,46 @@ const PersianDate = function (dateVal, calendarVal) {
* @param {Null|String|Number} to.millisecond - millisecond of date
* @param {Null|String|Number} to.milliseconds - millisecond of date
* @param {String} method - determines that consider the dates themselves
* @returns {‌Boolean} if date valid, return true or false
* @returns {‌Boolean} if this date is between the arguments, return true of false
*/
PersianDate.prototype.isBetween = function (from, to, method = "()") {
if (this.error) return false;
return isBetween.call(this, from, to, method);
};

/**
* checks this date is in array of dates
* @since 2.6.0
* @param {(PersianDate|Date|String|Array|Object)[]} array - this param must be array of PersianDate - string - array - Object and array date
* @param {String|Number} array[].y - year of date
* @param {Null|String|Number} array[].year - year of date
* @param {Null|String|Number} array[].years - year of date
* @param {Null|String|Number} array[].M - month of date
* @param {Null|String|Number} array[].month - month of date
* @param {Null|String|Number} array[].months - month of date
* @param {Null|String|Number} array[].d - day of date
* @param {Null|String|Number} array[].day - day of date
* @param {Null|String|Number} array[].days - day of date
* @param {Null|String|Number} array[].date - day of date
* @param {Null|String|Number} array[].h - hour of date
* @param {Null|String|Number} array[].hour - hour of date
* @param {Null|String|Number} array[].hours - hour of date
* @param {Null|String|Number} array[].m - minute of date
* @param {Null|String|Number} array[].minute - minute of date
* @param {Null|String|Number} array[].minutes - minute of date
* @param {Null|String|Number} array[].s - second of date
* @param {Null|String|Number} array[].second - second of date
* @param {Null|String|Number} array[].seconds - second of date
* @param {Null|String|Number} array[].ms - millisecond of date
* @param {Null|String|Number} array[].millisecond - millisecond of date
* @param {Null|String|Number} array[].milliseconds - millisecond of date
* @returns {‌Boolean} if date is in array return true
*/
PersianDate.prototype.isInArray = function (array) {
if (this.error) return false;
return isInArray.call(this, array);
};

/**
* checks date is a native js Date object
* @since 1.3.0
Expand Down
13 changes: 1 addition & 12 deletions src/base/gtj.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,18 +37,7 @@ export const gtj = (year, month, day, hour, minute, second, millisecond) => {
millisecond = date.getMilliseconds();
let jYear, jMonth, jDay;
const pastDaysInMonth = [
0,
31,
59,
90,
120,
151,
181,
212,
243,
273,
304,
334,
0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334,
]; // Past days from the start of the year in each month
if (year > 1600) {
jYear = 979;
Expand Down
1 change: 1 addition & 0 deletions src/comparison/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@ export * from "./isValidDate";
export * from "./isValidTime";
export * from "./isSame";
export * from "./isBetween";
export * from "./isInArray";
5 changes: 5 additions & 0 deletions src/comparison/isInArray.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import { isSame } from ".";

export function isInArray(array) {
return array.some((date) => isSame.call(this, date));
}
58 changes: 56 additions & 2 deletions test.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ let persianDate = new PersianDate();

const now = {
year: 1400,
month: 3,
date: 5,
month: 4,
date: 24,
};

test("create date and return now", () => {
Expand Down Expand Up @@ -2318,3 +2318,57 @@ test("test errors", () => {

perf.end();
});

////////////////////--- Version 2.6.0 ---////////////////////

test("isInArray function", () => {
persianDate.calendar("j").parse("1399/6/1 12:20:30.235");
expect(
persianDate.isInArray([[1399, "6", 1, "12", 20, 30, 235], new PersianDate()])
).toBe(true);
expect(
persianDate.isInArray([[1399, 7], new Date(2020, 7, 22, 12, 20, 30, 235)])
).toBe(true);
expect(
persianDate.isInArray([
{
year: 1399,
month: 6,
date: 24,
hour: 11,
minute: 2,
second: 55,
millisecond: 112,
},
"1399/13/1",
])
).toBe(false);
expect(persianDate.isInArray(["1399/6/1"])).toBe(true);
expect(persianDate.isInArray([])).toBe(false);
expect(persianDate.isInArray([[1399, "6", 1, "12", 20, 30, 0]])).toBe(false);

persianDate.calendar("g").parse("2020-6-1 12:20:30.235");
expect(
persianDate.isInArray([[2020, "6", 1, "12", 20, 30, 235], new PersianDate()])
).toBe(true);
expect(
persianDate.isInArray([[2020, 7], new Date(2020, 5, 1, 12, 20, 30, 235)])
).toBe(true);
expect(
persianDate.isInArray([
{
year: 2020,
month: 6,
date: 24,
hour: 11,
minute: 2,
second: 55,
millisecond: 112,
},
"2020-13-1",
])
).toBe(false);
expect(persianDate.isInArray(["2020-6-1"])).toBe(true);
expect(persianDate.isInArray([])).toBe(false);
expect(persianDate.isInArray([[2020, "6", 1, "12", 20, 30, 0]])).toBe(false);
});
Loading

0 comments on commit 6f0fb82

Please sign in to comment.