age-ts 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/calcage.d.ts +3 -0
- package/dist/calcage.js +56 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +100 -0
- package/package.json +27 -0
- package/readme.md +49 -0
- package/src/calcage.ts +18 -0
- package/src/index.tsx +21 -0
- package/tsconfig.json +16 -0
package/dist/calcage.js
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
12
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
13
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
14
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
15
|
+
function step(op) {
|
|
16
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
17
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
18
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
19
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
20
|
+
switch (op[0]) {
|
|
21
|
+
case 0: case 1: t = op; break;
|
|
22
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
23
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
24
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
25
|
+
default:
|
|
26
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
27
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
28
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
29
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
30
|
+
if (t[2]) _.ops.pop();
|
|
31
|
+
_.trys.pop(); continue;
|
|
32
|
+
}
|
|
33
|
+
op = body.call(thisArg, _);
|
|
34
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
35
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.calculateAge = void 0;
|
|
40
|
+
var calculateAge = function (_a) { return __awaiter(void 0, [_a], void 0, function (_b) {
|
|
41
|
+
var birthdate = _b.birthdate;
|
|
42
|
+
return __generator(this, function (_c) {
|
|
43
|
+
return [2 /*return*/, new Promise(function (resolve) {
|
|
44
|
+
var birthDate = new Date(birthdate);
|
|
45
|
+
var today = new Date();
|
|
46
|
+
var age = today.getFullYear() - birthDate.getFullYear();
|
|
47
|
+
var monthDifference = today.getMonth() - birthDate.getMonth();
|
|
48
|
+
if (monthDifference < 0 ||
|
|
49
|
+
(monthDifference === 0 && today.getDate() < birthDate.getDate())) {
|
|
50
|
+
age--;
|
|
51
|
+
}
|
|
52
|
+
resolve(age);
|
|
53
|
+
})];
|
|
54
|
+
});
|
|
55
|
+
}); };
|
|
56
|
+
exports.calculateAge = calculateAge;
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
36
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
37
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
38
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
39
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
40
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
41
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
42
|
+
});
|
|
43
|
+
};
|
|
44
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
45
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
|
|
46
|
+
return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
47
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
48
|
+
function step(op) {
|
|
49
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
50
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
51
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
52
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
53
|
+
switch (op[0]) {
|
|
54
|
+
case 0: case 1: t = op; break;
|
|
55
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
56
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
57
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
58
|
+
default:
|
|
59
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
60
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
61
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
62
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
63
|
+
if (t[2]) _.ops.pop();
|
|
64
|
+
_.trys.pop(); continue;
|
|
65
|
+
}
|
|
66
|
+
op = body.call(thisArg, _);
|
|
67
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
68
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
72
|
+
exports.default = Age;
|
|
73
|
+
var calcage_1 = require("./calcage");
|
|
74
|
+
var react_1 = __importStar(require("react"));
|
|
75
|
+
function Age(_a) {
|
|
76
|
+
var _this = this;
|
|
77
|
+
var birthdate = _a.birthdate;
|
|
78
|
+
var _b = (0, react_1.useState)(null), age = _b[0], setAge = _b[1];
|
|
79
|
+
var effectiveBirthdate = birthdate || process.env.NEXT_PUBLIC_BIRTHDATE || "";
|
|
80
|
+
(0, react_1.useEffect)(function () {
|
|
81
|
+
var fetchAge = function () { return __awaiter(_this, void 0, void 0, function () {
|
|
82
|
+
var calculatedAge;
|
|
83
|
+
return __generator(this, function (_a) {
|
|
84
|
+
switch (_a.label) {
|
|
85
|
+
case 0:
|
|
86
|
+
if (effectiveBirthdate === "") {
|
|
87
|
+
throw new Error("I didn't get a birthdate, \nset one on the enviroment variable or ad the \"birthdate\" argument");
|
|
88
|
+
}
|
|
89
|
+
return [4 /*yield*/, (0, calcage_1.calculateAge)({ birthdate: effectiveBirthdate })];
|
|
90
|
+
case 1:
|
|
91
|
+
calculatedAge = _a.sent();
|
|
92
|
+
setAge(calculatedAge);
|
|
93
|
+
return [2 /*return*/];
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}); };
|
|
97
|
+
fetchAge();
|
|
98
|
+
}, [effectiveBirthdate]);
|
|
99
|
+
return react_1.default.createElement(react_1.default.Fragment, null, Number.isNaN(age) ? "Error" : age !== null ? age : "...");
|
|
100
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "age-ts",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "A simple React component that calculates your age",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"keywords": [
|
|
8
|
+
"calculation",
|
|
9
|
+
"react",
|
|
10
|
+
"age",
|
|
11
|
+
"next-js"
|
|
12
|
+
],
|
|
13
|
+
"author": "GameLord2011",
|
|
14
|
+
"license": "MIT",
|
|
15
|
+
"peerDependencies": {
|
|
16
|
+
"react": ">=17.0.2",
|
|
17
|
+
"react-dom": ">=17.0.2"
|
|
18
|
+
},
|
|
19
|
+
"dependencies": {
|
|
20
|
+
"@types/node": ">=22.13.14",
|
|
21
|
+
"@types/react": ">=19.0.12",
|
|
22
|
+
"typescript": ">=5.8.2"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc"
|
|
26
|
+
}
|
|
27
|
+
}
|
package/readme.md
ADDED
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Age.js
|
|
2
|
+
|
|
3
|
+
This is a simple NextJs component that calculates your age.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
Install the package via npm:
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install @gamelord2011/age-js
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
pnpm:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
pnpm i @gamelord2011/age-js
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
or yarn:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
yarn add @gamelord2011/age-js
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Usage
|
|
26
|
+
|
|
27
|
+
Import the `Age` component and use it in your NextJS application:
|
|
28
|
+
|
|
29
|
+
```tsx
|
|
30
|
+
"use-client";
|
|
31
|
+
|
|
32
|
+
import Age from "@gamelord2011/age-js";
|
|
33
|
+
|
|
34
|
+
function App() {
|
|
35
|
+
return <Age />;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export default App;
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Environment Variable
|
|
42
|
+
|
|
43
|
+
Set the `BIRTHDATE` environment variable in the following format:
|
|
44
|
+
|
|
45
|
+
```text
|
|
46
|
+
NEXT_PUBLIC_BIRTHDATE = '<your birthdate here>'
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
Or just pass the birthdate argument through the component.
|
package/src/calcage.ts
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const calculateAge = async ({ birthdate }: { birthdate: string }) => {
|
|
2
|
+
return new Promise((resolve) => {
|
|
3
|
+
const birthDate = new Date(birthdate);
|
|
4
|
+
const today = new Date();
|
|
5
|
+
let age = today.getFullYear() - birthDate.getFullYear();
|
|
6
|
+
const monthDifference = today.getMonth() - birthDate.getMonth();
|
|
7
|
+
|
|
8
|
+
if (
|
|
9
|
+
monthDifference < 0 ||
|
|
10
|
+
(monthDifference === 0 && today.getDate() < birthDate.getDate())
|
|
11
|
+
) {
|
|
12
|
+
age--;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
resolve(age);
|
|
16
|
+
});
|
|
17
|
+
};
|
|
18
|
+
|
package/src/index.tsx
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { calculateAge } from "./calcage";
|
|
2
|
+
import React, { useEffect, useState } from "react";
|
|
3
|
+
|
|
4
|
+
export default function Age({ birthdate }: { birthdate?: string }) {
|
|
5
|
+
const [age, setAge] = useState<number | null>(null);
|
|
6
|
+
const effectiveBirthdate = birthdate || "";
|
|
7
|
+
|
|
8
|
+
useEffect(() => {
|
|
9
|
+
const fetchAge = async () => {
|
|
10
|
+
if(effectiveBirthdate === "") {
|
|
11
|
+
throw new Error("I didn't get a birthdate, \nset one on the enviroment variable or ad the \"birthdate\" argument")
|
|
12
|
+
}
|
|
13
|
+
const calculatedAge = await calculateAge({ birthdate: effectiveBirthdate }) as number;
|
|
14
|
+
setAge(calculatedAge);
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
fetchAge();
|
|
18
|
+
}, [effectiveBirthdate]);
|
|
19
|
+
|
|
20
|
+
return <>{Number.isNaN(age) ? "Error" : age !== null ? age : "..."}</>
|
|
21
|
+
}
|
package/tsconfig.json
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES5",
|
|
4
|
+
"module": "CommonJS",
|
|
5
|
+
"jsx": "react",
|
|
6
|
+
"declaration": true,
|
|
7
|
+
"declarationDir": "dist",
|
|
8
|
+
"outDir": "dist",
|
|
9
|
+
"strict": true,
|
|
10
|
+
"esModuleInterop": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"forceConsistentCasingInFileNames": true
|
|
13
|
+
},
|
|
14
|
+
"include": ["src/**/*"],
|
|
15
|
+
"exclude": ["node_modules", "dist"]
|
|
16
|
+
}
|