@timestamp-js/calendar-saka 0.1.0-rc.1 → 0.1.0-rc.3
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/README.md +17 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.global.js +331 -0
- package/dist/index.global.min.js +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -1
- package/package.json +7 -5
package/README.md
CHANGED
|
@@ -42,5 +42,22 @@ monthEnd.date // '1946-01-31'
|
|
|
42
42
|
monthDays.length // 31
|
|
43
43
|
```
|
|
44
44
|
|
|
45
|
+
## Browser Globals
|
|
46
|
+
|
|
47
|
+
For CDN or CodePen usage, load `@timestamp-js/core` before the adapter package:
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<script src="https://cdn.jsdelivr.net/npm/@timestamp-js/core@0.1.0-rc.3/dist/index.global.min.js"></script>
|
|
51
|
+
<script src="https://cdn.jsdelivr.net/npm/@timestamp-js/calendar-saka@0.1.0-rc.3/dist/index.global.min.js"></script>
|
|
52
|
+
<script>
|
|
53
|
+
const visible = TimestampJsCore.parseCalendarTimestamp(
|
|
54
|
+
'1946-01-15',
|
|
55
|
+
TimestampJsCalendarSaka.indianNationalCalendar,
|
|
56
|
+
)
|
|
57
|
+
|
|
58
|
+
console.log(visible?.calendarId)
|
|
59
|
+
</script>
|
|
60
|
+
```
|
|
61
|
+
|
|
45
62
|
This package is early calendar-adapter work. Treat the adapter contract as release-candidate API
|
|
46
63
|
until `@timestamp-js/core` reaches a stable `1.0.0`.
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAqC3E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYnE;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAqB,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAqC3E;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAYnE;AAED;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,EAAE,cAiKnC,CAAA;AAEF;;GAEG;AACH,eAAO,MAAM,YAAY,gBAAyB,CAAA"}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
var TimestampJsCalendarSaka = (function(exports) {
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
|
|
4
|
+
|
|
5
|
+
const MILLISECONDS_IN_DAY$1 = 864e5;
|
|
6
|
+
const GREGORIAN_DAYS_IN_MONTH = [
|
|
7
|
+
0,
|
|
8
|
+
31,
|
|
9
|
+
28,
|
|
10
|
+
31,
|
|
11
|
+
30,
|
|
12
|
+
31,
|
|
13
|
+
30,
|
|
14
|
+
31,
|
|
15
|
+
31,
|
|
16
|
+
30,
|
|
17
|
+
31,
|
|
18
|
+
30,
|
|
19
|
+
31
|
|
20
|
+
];
|
|
21
|
+
const GREGORIAN_DAYS_IN_MONTH_LEAP = [
|
|
22
|
+
0,
|
|
23
|
+
31,
|
|
24
|
+
29,
|
|
25
|
+
31,
|
|
26
|
+
30,
|
|
27
|
+
31,
|
|
28
|
+
30,
|
|
29
|
+
31,
|
|
30
|
+
31,
|
|
31
|
+
30,
|
|
32
|
+
31,
|
|
33
|
+
30,
|
|
34
|
+
31
|
|
35
|
+
];
|
|
36
|
+
function fromUtcDate(date) {
|
|
37
|
+
return {
|
|
38
|
+
year: date.getUTCFullYear(),
|
|
39
|
+
month: date.getUTCMonth() + 1,
|
|
40
|
+
day: date.getUTCDate()
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function toGregorianUtcDate(date) {
|
|
44
|
+
return new Date(Date.UTC(date.year, date.month - 1, date.day));
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const gregorianCalendar = Object.freeze({
|
|
48
|
+
id: "gregorian",
|
|
49
|
+
intlCalendar: "gregory",
|
|
50
|
+
label: "Gregorian",
|
|
51
|
+
defaultLocale: "en-US",
|
|
52
|
+
defaultDirection: "ltr",
|
|
53
|
+
defaultWeekdays: Object.freeze([
|
|
54
|
+
0,
|
|
55
|
+
1,
|
|
56
|
+
2,
|
|
57
|
+
3,
|
|
58
|
+
4,
|
|
59
|
+
5,
|
|
60
|
+
6
|
|
61
|
+
]),
|
|
62
|
+
monthsInYear() {
|
|
63
|
+
return 12;
|
|
64
|
+
},
|
|
65
|
+
isLeapYear(year) {
|
|
66
|
+
return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;
|
|
67
|
+
},
|
|
68
|
+
daysInMonth(year, month) {
|
|
69
|
+
return this.isLeapYear(year) ? GREGORIAN_DAYS_IN_MONTH_LEAP[month] : GREGORIAN_DAYS_IN_MONTH[month];
|
|
70
|
+
},
|
|
71
|
+
toEpochDay(date) {
|
|
72
|
+
return Math.floor(Date.UTC(date.year, date.month - 1, date.day) / MILLISECONDS_IN_DAY$1);
|
|
73
|
+
},
|
|
74
|
+
fromEpochDay(epochDay) {
|
|
75
|
+
return fromUtcDate(/* @__PURE__ */ new Date(epochDay * MILLISECONDS_IN_DAY$1));
|
|
76
|
+
},
|
|
77
|
+
addDays(date, amount) {
|
|
78
|
+
return this.fromEpochDay(this.toEpochDay(date) + amount);
|
|
79
|
+
},
|
|
80
|
+
nextDay(date) {
|
|
81
|
+
return this.addDays(date, 1);
|
|
82
|
+
},
|
|
83
|
+
prevDay(date) {
|
|
84
|
+
return this.addDays(date, -1);
|
|
85
|
+
},
|
|
86
|
+
getDayOfYear(date) {
|
|
87
|
+
const yearStart = this.toEpochDay({
|
|
88
|
+
year: date.year,
|
|
89
|
+
month: 1,
|
|
90
|
+
day: 1
|
|
91
|
+
});
|
|
92
|
+
return this.toEpochDay(date) - yearStart + 1;
|
|
93
|
+
},
|
|
94
|
+
getWeekday(date) {
|
|
95
|
+
return toGregorianUtcDate(date).getUTCDay();
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
const TIME_CONSTANTS = {
|
|
101
|
+
MILLISECONDS_IN: {
|
|
102
|
+
SECOND: 1e3,
|
|
103
|
+
MINUTE: 6e4,
|
|
104
|
+
HOUR: 36e5,
|
|
105
|
+
DAY: 864e5,
|
|
106
|
+
WEEK: 6048e5
|
|
107
|
+
},
|
|
108
|
+
SECONDS_IN: {
|
|
109
|
+
MINUTE: 60,
|
|
110
|
+
HOUR: 3600,
|
|
111
|
+
DAY: 86400,
|
|
112
|
+
WEEK: 604800
|
|
113
|
+
},
|
|
114
|
+
MINUTES_IN: {
|
|
115
|
+
MINUTE: 1,
|
|
116
|
+
HOUR: 60,
|
|
117
|
+
DAY: 1440,
|
|
118
|
+
WEEK: 10080
|
|
119
|
+
},
|
|
120
|
+
HOURS_IN: {
|
|
121
|
+
DAY: 24,
|
|
122
|
+
WEEK: 168
|
|
123
|
+
},
|
|
124
|
+
DAYS_IN: { WEEK: 7 }
|
|
125
|
+
};
|
|
126
|
+
|
|
127
|
+
const DAYS_IN_WEEK = TIME_CONSTANTS.DAYS_IN.WEEK;
|
|
128
|
+
|
|
129
|
+
const MINUTES_IN_HOUR = TIME_CONSTANTS.MINUTES_IN.HOUR;
|
|
130
|
+
|
|
131
|
+
const HOURS_IN_DAY = TIME_CONSTANTS.HOURS_IN.DAY;
|
|
132
|
+
|
|
133
|
+
const MILLISECONDS_IN_MINUTE = TIME_CONSTANTS.MILLISECONDS_IN.MINUTE;
|
|
134
|
+
|
|
135
|
+
const MILLISECONDS_IN_SECOND = TIME_CONSTANTS.MILLISECONDS_IN.SECOND;
|
|
136
|
+
|
|
137
|
+
const MILLISECONDS_IN_HOUR = TIME_CONSTANTS.MILLISECONDS_IN.HOUR;
|
|
138
|
+
|
|
139
|
+
const MILLISECONDS_IN_DAY = TIME_CONSTANTS.MILLISECONDS_IN.DAY;
|
|
140
|
+
|
|
141
|
+
const MILLISECONDS_IN_WEEK = TIME_CONSTANTS.MILLISECONDS_IN.WEEK;
|
|
142
|
+
|
|
143
|
+
const SECONDS_IN_MINUTE = TIME_CONSTANTS.SECONDS_IN.MINUTE;
|
|
144
|
+
|
|
145
|
+
const SECONDS_IN_HOUR = TIME_CONSTANTS.SECONDS_IN.HOUR;
|
|
146
|
+
|
|
147
|
+
const SECONDS_IN_DAY = TIME_CONSTANTS.SECONDS_IN.DAY;
|
|
148
|
+
|
|
149
|
+
const Timestamp = freezeTimestamp({
|
|
150
|
+
date: "",
|
|
151
|
+
hasDay: false,
|
|
152
|
+
year: 0,
|
|
153
|
+
month: 0,
|
|
154
|
+
day: 0,
|
|
155
|
+
hasTime: false,
|
|
156
|
+
hour: 0,
|
|
157
|
+
minute: 0,
|
|
158
|
+
weekday: 0,
|
|
159
|
+
doy: 0,
|
|
160
|
+
workweek: 0,
|
|
161
|
+
past: false,
|
|
162
|
+
current: false,
|
|
163
|
+
future: false,
|
|
164
|
+
disabled: false
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
const TimeObject = Object.freeze({
|
|
168
|
+
hour: 0,
|
|
169
|
+
minute: 0
|
|
170
|
+
});
|
|
171
|
+
function freezeTimestamp(timestamp) {
|
|
172
|
+
return Object.freeze({ ...timestamp });
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
const GREGORIAN_YEAR_OFFSET = 78;
|
|
176
|
+
const MONTHS_IN_YEAR = 12;
|
|
177
|
+
const SAKA_DAYS_IN_MONTH_COMMON = [
|
|
178
|
+
0,
|
|
179
|
+
30,
|
|
180
|
+
31,
|
|
181
|
+
31,
|
|
182
|
+
31,
|
|
183
|
+
31,
|
|
184
|
+
31,
|
|
185
|
+
30,
|
|
186
|
+
30,
|
|
187
|
+
30,
|
|
188
|
+
30,
|
|
189
|
+
30,
|
|
190
|
+
30
|
|
191
|
+
];
|
|
192
|
+
const SAKA_DAYS_IN_MONTH_LEAP = [
|
|
193
|
+
0,
|
|
194
|
+
31,
|
|
195
|
+
31,
|
|
196
|
+
31,
|
|
197
|
+
31,
|
|
198
|
+
31,
|
|
199
|
+
31,
|
|
200
|
+
30,
|
|
201
|
+
30,
|
|
202
|
+
30,
|
|
203
|
+
30,
|
|
204
|
+
30,
|
|
205
|
+
30
|
|
206
|
+
];
|
|
207
|
+
function assertPositiveYear(year) {
|
|
208
|
+
if (year < 1) throw new RangeError("Saka calendar years start at 1.");
|
|
209
|
+
}
|
|
210
|
+
function getGregorianYearForSakaYear(year) {
|
|
211
|
+
assertPositiveYear(year);
|
|
212
|
+
return year + GREGORIAN_YEAR_OFFSET;
|
|
213
|
+
}
|
|
214
|
+
function getSakaYearStartEpochDay(year) {
|
|
215
|
+
const gregorianYear = getGregorianYearForSakaYear(year);
|
|
216
|
+
return gregorianCalendar.toEpochDay({
|
|
217
|
+
year: gregorianYear,
|
|
218
|
+
month: 3,
|
|
219
|
+
day: gregorianCalendar.isLeapYear(gregorianYear) === true ? 21 : 22
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
function daysBeforeMonth(year, month) {
|
|
223
|
+
let days = 0;
|
|
224
|
+
for (let currentMonth = 1; currentMonth < month; currentMonth += 1) days += sakaDaysInMonth(year, currentMonth);
|
|
225
|
+
return days;
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
function isSakaLeapYear(year) {
|
|
229
|
+
return gregorianCalendar.isLeapYear(getGregorianYearForSakaYear(year));
|
|
230
|
+
}
|
|
231
|
+
|
|
232
|
+
function sakaDaysInMonth(year, month) {
|
|
233
|
+
assertPositiveYear(year);
|
|
234
|
+
if (month < 1 || month > MONTHS_IN_YEAR) return 0;
|
|
235
|
+
return isSakaLeapYear(year) === true ? SAKA_DAYS_IN_MONTH_LEAP[month] : SAKA_DAYS_IN_MONTH_COMMON[month];
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const indianNationalCalendar = Object.freeze({
|
|
239
|
+
|
|
240
|
+
id: "saka",
|
|
241
|
+
|
|
242
|
+
intlCalendar: "indian",
|
|
243
|
+
|
|
244
|
+
label: "Indian National (Saka)",
|
|
245
|
+
|
|
246
|
+
defaultLocale: "hi-IN",
|
|
247
|
+
|
|
248
|
+
defaultDirection: "ltr",
|
|
249
|
+
|
|
250
|
+
defaultWeekdays: Object.freeze([
|
|
251
|
+
0,
|
|
252
|
+
1,
|
|
253
|
+
2,
|
|
254
|
+
3,
|
|
255
|
+
4,
|
|
256
|
+
5,
|
|
257
|
+
6
|
|
258
|
+
]),
|
|
259
|
+
|
|
260
|
+
monthsInYear() {
|
|
261
|
+
return MONTHS_IN_YEAR;
|
|
262
|
+
},
|
|
263
|
+
|
|
264
|
+
isLeapYear(year) {
|
|
265
|
+
return isSakaLeapYear(year);
|
|
266
|
+
},
|
|
267
|
+
|
|
268
|
+
daysInMonth(year, month) {
|
|
269
|
+
return sakaDaysInMonth(year, month);
|
|
270
|
+
},
|
|
271
|
+
|
|
272
|
+
toEpochDay(date) {
|
|
273
|
+
assertPositiveYear(date.year);
|
|
274
|
+
return getSakaYearStartEpochDay(date.year) + daysBeforeMonth(date.year, date.month) + date.day - 1;
|
|
275
|
+
},
|
|
276
|
+
|
|
277
|
+
fromEpochDay(epochDay) {
|
|
278
|
+
let year = gregorianCalendar.fromEpochDay(epochDay).year - GREGORIAN_YEAR_OFFSET;
|
|
279
|
+
let yearStart = getSakaYearStartEpochDay(year);
|
|
280
|
+
if (epochDay < yearStart) {
|
|
281
|
+
year -= 1;
|
|
282
|
+
yearStart = getSakaYearStartEpochDay(year);
|
|
283
|
+
}
|
|
284
|
+
let dayOfYear = epochDay - yearStart;
|
|
285
|
+
let month = 1;
|
|
286
|
+
while (month < MONTHS_IN_YEAR) {
|
|
287
|
+
const daysInCurrentMonth = this.daysInMonth(year, month);
|
|
288
|
+
if (dayOfYear < daysInCurrentMonth) break;
|
|
289
|
+
dayOfYear -= daysInCurrentMonth;
|
|
290
|
+
month += 1;
|
|
291
|
+
}
|
|
292
|
+
return {
|
|
293
|
+
year,
|
|
294
|
+
month,
|
|
295
|
+
day: dayOfYear + 1
|
|
296
|
+
};
|
|
297
|
+
},
|
|
298
|
+
|
|
299
|
+
addDays(date, amount) {
|
|
300
|
+
return this.fromEpochDay(this.toEpochDay(date) + amount);
|
|
301
|
+
},
|
|
302
|
+
|
|
303
|
+
nextDay(date) {
|
|
304
|
+
return this.addDays(date, 1);
|
|
305
|
+
},
|
|
306
|
+
|
|
307
|
+
prevDay(date) {
|
|
308
|
+
return this.addDays(date, -1);
|
|
309
|
+
},
|
|
310
|
+
|
|
311
|
+
getDayOfYear(date) {
|
|
312
|
+
return this.toEpochDay(date) - this.toEpochDay({
|
|
313
|
+
year: date.year,
|
|
314
|
+
month: 1,
|
|
315
|
+
day: 1
|
|
316
|
+
}) + 1;
|
|
317
|
+
},
|
|
318
|
+
|
|
319
|
+
getWeekday(date) {
|
|
320
|
+
return gregorianCalendar.getWeekday(gregorianCalendar.fromEpochDay(this.toEpochDay(date)));
|
|
321
|
+
}
|
|
322
|
+
});
|
|
323
|
+
|
|
324
|
+
const sakaCalendar = indianNationalCalendar;
|
|
325
|
+
|
|
326
|
+
exports.indianNationalCalendar = indianNationalCalendar;
|
|
327
|
+
exports.isSakaLeapYear = isSakaLeapYear;
|
|
328
|
+
exports.sakaCalendar = sakaCalendar;
|
|
329
|
+
exports.sakaDaysInMonth = sakaDaysInMonth;
|
|
330
|
+
return exports;
|
|
331
|
+
})({});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
var TimestampJsCalendarSaka=(function(e){Object.defineProperty(e,Symbol.toStringTag,{value:`Module`});let t=864e5,n=[0,31,28,31,30,31,30,31,31,30,31,30,31],r=[0,31,29,31,30,31,30,31,31,30,31,30,31];function i(e){return{year:e.getUTCFullYear(),month:e.getUTCMonth()+1,day:e.getUTCDate()}}function a(e){return new Date(Date.UTC(e.year,e.month-1,e.day))}let o=Object.freeze({id:`gregorian`,intlCalendar:`gregory`,label:`Gregorian`,defaultLocale:`en-US`,defaultDirection:`ltr`,defaultWeekdays:Object.freeze([0,1,2,3,4,5,6]),monthsInYear(){return 12},isLeapYear(e){return e%4==0&&e%100!=0||e%400==0},daysInMonth(e,t){return this.isLeapYear(e)?r[t]:n[t]},toEpochDay(e){return Math.floor(Date.UTC(e.year,e.month-1,e.day)/t)},fromEpochDay(e){return i(new Date(e*t))},addDays(e,t){return this.fromEpochDay(this.toEpochDay(e)+t)},nextDay(e){return this.addDays(e,1)},prevDay(e){return this.addDays(e,-1)},getDayOfYear(e){let t=this.toEpochDay({year:e.year,month:1,day:1});return this.toEpochDay(e)-t+1},getWeekday(e){return a(e).getUTCDay()}}),s={MILLISECONDS_IN:{SECOND:1e3,MINUTE:6e4,HOUR:36e5,DAY:864e5,WEEK:6048e5},SECONDS_IN:{MINUTE:60,HOUR:3600,DAY:86400,WEEK:604800},MINUTES_IN:{MINUTE:1,HOUR:60,DAY:1440,WEEK:10080},HOURS_IN:{DAY:24,WEEK:168},DAYS_IN:{WEEK:7}};s.DAYS_IN.WEEK,s.MINUTES_IN.HOUR,s.HOURS_IN.DAY,s.MILLISECONDS_IN.MINUTE,s.MILLISECONDS_IN.SECOND,s.MILLISECONDS_IN.HOUR,s.MILLISECONDS_IN.DAY,s.MILLISECONDS_IN.WEEK,s.SECONDS_IN.MINUTE,s.SECONDS_IN.HOUR,s.SECONDS_IN.DAY,c({date:``,hasDay:!1,year:0,month:0,day:0,hasTime:!1,hour:0,minute:0,weekday:0,doy:0,workweek:0,past:!1,current:!1,future:!1,disabled:!1}),Object.freeze({hour:0,minute:0});function c(e){return Object.freeze({...e})}let l=[0,30,31,31,31,31,31,30,30,30,30,30,30],u=[0,31,31,31,31,31,31,30,30,30,30,30,30];function d(e){if(e<1)throw RangeError(`Saka calendar years start at 1.`)}function f(e){return d(e),e+78}function p(e){let t=f(e);return o.toEpochDay({year:t,month:3,day:o.isLeapYear(t)===!0?21:22})}function m(e,t){let n=0;for(let r=1;r<t;r+=1)n+=g(e,r);return n}function h(e){return o.isLeapYear(f(e))}function g(e,t){return d(e),t<1||t>12?0:h(e)===!0?u[t]:l[t]}let _=Object.freeze({id:`saka`,intlCalendar:`indian`,label:`Indian National (Saka)`,defaultLocale:`hi-IN`,defaultDirection:`ltr`,defaultWeekdays:Object.freeze([0,1,2,3,4,5,6]),monthsInYear(){return 12},isLeapYear(e){return h(e)},daysInMonth(e,t){return g(e,t)},toEpochDay(e){return d(e.year),p(e.year)+m(e.year,e.month)+e.day-1},fromEpochDay(e){let t=o.fromEpochDay(e).year-78,n=p(t);e<n&&(--t,n=p(t));let r=e-n,i=1;for(;i<12;){let e=this.daysInMonth(t,i);if(r<e)break;r-=e,i+=1}return{year:t,month:i,day:r+1}},addDays(e,t){return this.fromEpochDay(this.toEpochDay(e)+t)},nextDay(e){return this.addDays(e,1)},prevDay(e){return this.addDays(e,-1)},getDayOfYear(e){return this.toEpochDay(e)-this.toEpochDay({year:e.year,month:1,day:1})+1},getWeekday(e){return o.getWeekday(o.fromEpochDay(this.toEpochDay(e)))}}),v=_;return e.indianNationalCalendar=_,e.isSakaLeapYear=h,e.sakaCalendar=v,e.sakaDaysInMonth=g,e})({});
|
package/dist/index.js
CHANGED
|
@@ -61,22 +61,75 @@ export function sakaDaysInMonth(year, month) {
|
|
|
61
61
|
* when the corresponding Gregorian year is leap, and March 22 otherwise.
|
|
62
62
|
*/
|
|
63
63
|
export const indianNationalCalendar = Object.freeze({
|
|
64
|
+
/**
|
|
65
|
+
* Package-facing id for the Saka adapter.
|
|
66
|
+
*/
|
|
64
67
|
id: 'saka',
|
|
68
|
+
/**
|
|
69
|
+
* Intl calendar id for the Indian National Calendar.
|
|
70
|
+
*/
|
|
65
71
|
intlCalendar: 'indian',
|
|
72
|
+
/**
|
|
73
|
+
* Human-readable adapter name.
|
|
74
|
+
*/
|
|
66
75
|
label: 'Indian National (Saka)',
|
|
76
|
+
/**
|
|
77
|
+
* Default locale used for Indian National Calendar presentation.
|
|
78
|
+
*/
|
|
79
|
+
defaultLocale: 'hi-IN',
|
|
80
|
+
/**
|
|
81
|
+
* Default text direction for Saka presentation.
|
|
82
|
+
*/
|
|
83
|
+
defaultDirection: 'ltr',
|
|
84
|
+
/**
|
|
85
|
+
* Default visible week order for Saka presentation: Sunday through Saturday.
|
|
86
|
+
*
|
|
87
|
+
* Weekdays use JavaScript numbering, where Sunday is `0` and Saturday is `6`.
|
|
88
|
+
*/
|
|
89
|
+
defaultWeekdays: Object.freeze([0, 1, 2, 3, 4, 5, 6]),
|
|
90
|
+
/**
|
|
91
|
+
* Returns the number of months in a Saka year.
|
|
92
|
+
*
|
|
93
|
+
* @returns Number of months in the year.
|
|
94
|
+
*/
|
|
67
95
|
monthsInYear() {
|
|
68
96
|
return MONTHS_IN_YEAR;
|
|
69
97
|
},
|
|
98
|
+
/**
|
|
99
|
+
* Returns true when the Saka year begins in a Gregorian leap year.
|
|
100
|
+
*
|
|
101
|
+
* @param year Saka year number.
|
|
102
|
+
* @returns True when Chaitra has 31 days.
|
|
103
|
+
*/
|
|
70
104
|
isLeapYear(year) {
|
|
71
105
|
return isSakaLeapYear(year);
|
|
72
106
|
},
|
|
107
|
+
/**
|
|
108
|
+
* Returns the number of days in a Saka month.
|
|
109
|
+
*
|
|
110
|
+
* @param year Saka year number.
|
|
111
|
+
* @param month Saka month number, where Chaitra is `1`.
|
|
112
|
+
* @returns Number of days in the month, or `0` for an invalid month number.
|
|
113
|
+
*/
|
|
73
114
|
daysInMonth(year, month) {
|
|
74
115
|
return sakaDaysInMonth(year, month);
|
|
75
116
|
},
|
|
117
|
+
/**
|
|
118
|
+
* Converts a Saka date into the equivalent epoch day.
|
|
119
|
+
*
|
|
120
|
+
* @param date Saka date fields.
|
|
121
|
+
* @returns Epoch day for the equivalent civil instant.
|
|
122
|
+
*/
|
|
76
123
|
toEpochDay(date) {
|
|
77
124
|
assertPositiveYear(date.year);
|
|
78
125
|
return (getSakaYearStartEpochDay(date.year) + daysBeforeMonth(date.year, date.month) + date.day - 1);
|
|
79
126
|
},
|
|
127
|
+
/**
|
|
128
|
+
* Converts an epoch day into Saka date fields.
|
|
129
|
+
*
|
|
130
|
+
* @param epochDay Epoch day to convert.
|
|
131
|
+
* @returns Saka date fields.
|
|
132
|
+
*/
|
|
80
133
|
fromEpochDay(epochDay) {
|
|
81
134
|
const gregorianDate = gregorianCalendar.fromEpochDay(epochDay);
|
|
82
135
|
let year = gregorianDate.year - GREGORIAN_YEAR_OFFSET;
|
|
@@ -101,18 +154,49 @@ export const indianNationalCalendar = Object.freeze({
|
|
|
101
154
|
day: dayOfYear + 1,
|
|
102
155
|
};
|
|
103
156
|
},
|
|
157
|
+
/**
|
|
158
|
+
* Moves a Saka date by a whole number of days.
|
|
159
|
+
*
|
|
160
|
+
* @param date Saka date fields.
|
|
161
|
+
* @param amount Number of days to add. Negative values move backward.
|
|
162
|
+
* @returns Shifted Saka date fields.
|
|
163
|
+
*/
|
|
104
164
|
addDays(date, amount) {
|
|
105
165
|
return this.fromEpochDay(this.toEpochDay(date) + amount);
|
|
106
166
|
},
|
|
167
|
+
/**
|
|
168
|
+
* Returns the next Saka date.
|
|
169
|
+
*
|
|
170
|
+
* @param date Saka date fields.
|
|
171
|
+
* @returns Date fields for the following day.
|
|
172
|
+
*/
|
|
107
173
|
nextDay(date) {
|
|
108
174
|
return this.addDays(date, 1);
|
|
109
175
|
},
|
|
176
|
+
/**
|
|
177
|
+
* Returns the previous Saka date.
|
|
178
|
+
*
|
|
179
|
+
* @param date Saka date fields.
|
|
180
|
+
* @returns Date fields for the previous day.
|
|
181
|
+
*/
|
|
110
182
|
prevDay(date) {
|
|
111
183
|
return this.addDays(date, -1);
|
|
112
184
|
},
|
|
185
|
+
/**
|
|
186
|
+
* Returns the one-based day-of-year for a Saka date.
|
|
187
|
+
*
|
|
188
|
+
* @param date Saka date fields.
|
|
189
|
+
* @returns One-based day-of-year.
|
|
190
|
+
*/
|
|
113
191
|
getDayOfYear(date) {
|
|
114
192
|
return this.toEpochDay(date) - this.toEpochDay({ year: date.year, month: 1, day: 1 }) + 1;
|
|
115
193
|
},
|
|
194
|
+
/**
|
|
195
|
+
* Returns the weekday for a Saka date using JavaScript weekday numbering.
|
|
196
|
+
*
|
|
197
|
+
* @param date Saka date fields.
|
|
198
|
+
* @returns Weekday number where Sunday is `0` and Saturday is `6`.
|
|
199
|
+
*/
|
|
116
200
|
getWeekday(date) {
|
|
117
201
|
return gregorianCalendar.getWeekday(gregorianCalendar.fromEpochDay(this.toEpochDay(date)));
|
|
118
202
|
},
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAA;AAGtD,MAAM,qBAAqB,GAAG,EAAE,CAAA;AAChC,MAAM,cAAc,GAAG,EAAE,CAAA;AACzB,MAAM,yBAAyB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AACrF,MAAM,uBAAuB,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAA;AAEnF,SAAS,kBAAkB,CAAC,IAAY;IACtC,IAAI,IAAI,GAAG,CAAC,EAAE,CAAC;QACb,MAAM,IAAI,UAAU,CAAC,iCAAiC,CAAC,CAAA;IACzD,CAAC;AACH,CAAC;AAED,SAAS,2BAA2B,CAAC,IAAY;IAC/C,kBAAkB,CAAC,IAAI,CAAC,CAAA;IACxB,OAAO,IAAI,GAAG,qBAAqB,CAAA;AACrC,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAY;IAC5C,MAAM,aAAa,GAAG,2BAA2B,CAAC,IAAI,CAAC,CAAA;IACvD,OAAO,iBAAiB,CAAC,UAAU,CAAC;QAClC,IAAI,EAAE,aAAa;QACnB,KAAK,EAAE,CAAC;QACR,GAAG,EAAE,iBAAiB,CAAC,UAAU,CAAC,aAAa,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE;KACpE,CAAC,CAAA;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,IAAY,EAAE,KAAa;IAClD,IAAI,IAAI,GAAG,CAAC,CAAA;IAEZ,KAAK,IAAI,YAAY,GAAG,CAAC,EAAE,YAAY,GAAG,KAAK,EAAE,YAAY,IAAI,CAAC,EAAE,CAAC;QACnE,IAAI,IAAI,eAAe,CAAC,IAAI,EAAE,YAAY,CAAC,CAAA;IAC7C,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,OAAO,iBAAiB,CAAC,UAAU,CAAC,2BAA2B,CAAC,IAAI,CAAC,CAAC,CAAA;AACxE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,IAAY,EAAE,KAAa;IACzD,kBAAkB,CAAC,IAAI,CAAC,CAAA;IAExB,IAAI,KAAK,GAAG,CAAC,IAAI,KAAK,GAAG,cAAc,EAAE,CAAC;QACxC,OAAO,CAAC,CAAA;IACV,CAAC;IAED,OAAO,CACL,cAAc,CAAC,IAAI,CAAC,KAAK,IAAI;QAC3B,CAAC,CAAC,uBAAuB,CAAC,KAAK,CAAC;QAChC,CAAC,CAAC,yBAAyB,CAAC,KAAK,CAAC,CAC3B,CAAA;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAmB,MAAM,CAAC,MAAM,CAAC;IAClE,EAAE,EAAE,MAAM;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@timestamp-js/calendar-saka",
|
|
3
|
-
"version": "0.1.0-rc.
|
|
3
|
+
"version": "0.1.0-rc.3",
|
|
4
4
|
"description": "Indian National Calendar (Saka) adapter for Timestamp.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"calendar",
|
|
@@ -29,6 +29,8 @@
|
|
|
29
29
|
"sideEffects": false,
|
|
30
30
|
"main": "./dist/index.js",
|
|
31
31
|
"types": "./dist/index.d.ts",
|
|
32
|
+
"unpkg": "./dist/index.global.min.js",
|
|
33
|
+
"jsdelivr": "./dist/index.global.min.js",
|
|
32
34
|
"exports": {
|
|
33
35
|
".": {
|
|
34
36
|
"types": "./dist/index.d.ts",
|
|
@@ -39,12 +41,12 @@
|
|
|
39
41
|
"access": "public"
|
|
40
42
|
},
|
|
41
43
|
"dependencies": {
|
|
42
|
-
"@timestamp-js/core": "0.1.0-rc.
|
|
44
|
+
"@timestamp-js/core": "0.1.0-rc.3"
|
|
43
45
|
},
|
|
44
46
|
"devDependencies": {
|
|
45
47
|
"@types/node": "26.0.1",
|
|
46
|
-
"oxfmt": "0.
|
|
47
|
-
"oxlint": "1.
|
|
48
|
+
"oxfmt": "0.57.0",
|
|
49
|
+
"oxlint": "1.72.0",
|
|
48
50
|
"typescript": "6.0.3",
|
|
49
51
|
"vitest": "4.1.9"
|
|
50
52
|
},
|
|
@@ -55,7 +57,7 @@
|
|
|
55
57
|
"scripts": {
|
|
56
58
|
"clean": "rm -rf dist node_modules",
|
|
57
59
|
"prebuild": "pnpm --filter @timestamp-js/core build",
|
|
58
|
-
"build": "tsc -p tsconfig.build.json",
|
|
60
|
+
"build": "node ../../scripts/build-browser-globals.mjs @timestamp-js/calendar-saka && tsc -p tsconfig.build.json",
|
|
59
61
|
"format": "oxfmt",
|
|
60
62
|
"format:check": "oxfmt --check",
|
|
61
63
|
"lint": "oxlint",
|