@gracefullight/saju 0.2.0 → 0.4.1

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.
Files changed (81) hide show
  1. package/README.en.md +250 -32
  2. package/README.md +250 -32
  3. package/dist/__tests__/date-fns-adapter.test.js +1 -1
  4. package/dist/__tests__/four-pillars.test.js +10 -9
  5. package/dist/__tests__/luck.test.d.ts +2 -0
  6. package/dist/__tests__/luck.test.d.ts.map +1 -0
  7. package/dist/__tests__/luck.test.js +33 -0
  8. package/dist/__tests__/lunar.test.js +1 -1
  9. package/dist/__tests__/luxon-adapter.test.js +1 -1
  10. package/dist/__tests__/relations.test.d.ts +2 -0
  11. package/dist/__tests__/relations.test.d.ts.map +1 -0
  12. package/dist/__tests__/relations.test.js +90 -0
  13. package/dist/__tests__/saju.test.d.ts +2 -0
  14. package/dist/__tests__/saju.test.d.ts.map +1 -0
  15. package/dist/__tests__/saju.test.js +133 -0
  16. package/dist/__tests__/sinsals.test.d.ts +2 -0
  17. package/dist/__tests__/sinsals.test.d.ts.map +1 -0
  18. package/dist/__tests__/sinsals.test.js +64 -0
  19. package/dist/__tests__/solar-terms.test.d.ts +2 -0
  20. package/dist/__tests__/solar-terms.test.d.ts.map +1 -0
  21. package/dist/__tests__/solar-terms.test.js +121 -0
  22. package/dist/__tests__/strength.test.d.ts +2 -0
  23. package/dist/__tests__/strength.test.d.ts.map +1 -0
  24. package/dist/__tests__/strength.test.js +44 -0
  25. package/dist/__tests__/ten-gods.test.d.ts +2 -0
  26. package/dist/__tests__/ten-gods.test.d.ts.map +1 -0
  27. package/dist/__tests__/ten-gods.test.js +119 -0
  28. package/dist/__tests__/twelve-stages.test.d.ts +2 -0
  29. package/dist/__tests__/twelve-stages.test.d.ts.map +1 -0
  30. package/dist/__tests__/twelve-stages.test.js +86 -0
  31. package/dist/__tests__/utils.test.d.ts +2 -0
  32. package/dist/__tests__/utils.test.d.ts.map +1 -0
  33. package/dist/__tests__/utils.test.js +130 -0
  34. package/dist/__tests__/yongshen.test.d.ts +2 -0
  35. package/dist/__tests__/yongshen.test.d.ts.map +1 -0
  36. package/dist/__tests__/yongshen.test.js +62 -0
  37. package/dist/adapters/date-fns.d.ts +1 -1
  38. package/dist/adapters/luxon.d.ts +1 -1
  39. package/dist/core/four-pillars.d.ts +6 -6
  40. package/dist/core/four-pillars.d.ts.map +1 -1
  41. package/dist/core/four-pillars.js +10 -26
  42. package/dist/core/luck.d.ts +60 -0
  43. package/dist/core/luck.d.ts.map +1 -0
  44. package/dist/core/luck.js +137 -0
  45. package/dist/core/relations.d.ts +94 -0
  46. package/dist/core/relations.d.ts.map +1 -0
  47. package/dist/core/relations.js +309 -0
  48. package/dist/core/sinsals.d.ts +19 -0
  49. package/dist/core/sinsals.d.ts.map +1 -0
  50. package/dist/core/sinsals.js +339 -0
  51. package/dist/core/solar-terms.d.ts +155 -0
  52. package/dist/core/solar-terms.d.ts.map +1 -0
  53. package/dist/core/solar-terms.js +266 -0
  54. package/dist/core/strength.d.ts +18 -0
  55. package/dist/core/strength.d.ts.map +1 -0
  56. package/dist/core/strength.js +255 -0
  57. package/dist/core/ten-gods.d.ts +127 -0
  58. package/dist/core/ten-gods.d.ts.map +1 -0
  59. package/dist/core/ten-gods.js +331 -0
  60. package/dist/core/twelve-stages.d.ts +17 -0
  61. package/dist/core/twelve-stages.d.ts.map +1 -0
  62. package/dist/core/twelve-stages.js +77 -0
  63. package/dist/core/yongshen.d.ts +20 -0
  64. package/dist/core/yongshen.d.ts.map +1 -0
  65. package/dist/core/yongshen.js +216 -0
  66. package/dist/index.d.ts +63 -3
  67. package/dist/index.d.ts.map +1 -1
  68. package/dist/index.js +57 -2
  69. package/dist/types/common.d.ts +12 -0
  70. package/dist/types/common.d.ts.map +1 -0
  71. package/dist/types/common.js +1 -0
  72. package/dist/types/index.d.ts +2 -0
  73. package/dist/types/index.d.ts.map +1 -0
  74. package/dist/types/index.js +1 -0
  75. package/dist/utils/constants.d.ts +13 -0
  76. package/dist/utils/constants.d.ts.map +1 -0
  77. package/dist/utils/constants.js +59 -0
  78. package/dist/utils/index.d.ts +2 -0
  79. package/dist/utils/index.d.ts.map +1 -0
  80. package/dist/utils/index.js +1 -0
  81. package/package.json +13 -12
package/dist/index.d.ts CHANGED
@@ -1,4 +1,64 @@
1
- export type { DateAdapter } from "@/adapters/date-adapter";
2
- export { getLunarDate, getSolarDate, type LunarDate } from "@/core/lunar";
3
- export { applyMeanSolarTime, BRANCHES, dayPillarFromDate, effectiveDayDate, getFourPillars, hourPillar, monthPillar, presetA, presetB, STANDARD_PRESET, STEMS, TRADITIONAL_PRESET, yearPillar, } from "@/core/four-pillars";
1
+ export type { DateAdapter } from "./adapters/date-adapter";
2
+ export { applyMeanSolarTime, BRANCHES, dayPillarFromDate, effectiveDayDate, getFourPillars, hourPillar, monthPillar, presetA, presetB, STANDARD_PRESET, STEMS, TRADITIONAL_PRESET, yearPillar, } from "./core/four-pillars";
3
+ export { calculateDailyLuck, calculateMajorLuck, calculateMonthlyLuck, calculateYearlyLuck, type DailyLuckResult, type Gender, getCurrentMajorLuck, getDayPillar, getMonthPillar, getYearPillar, type LuckPillar, type MajorLuckResult, type MonthlyLuckResult, type StartAgeDetail, type YearlyLuckResult, } from "./core/luck";
4
+ export { getLunarDate, getSolarDate, type LunarDate } from "./core/lunar";
5
+ export { analyzeRelations, BRANCH_CLASHES, BRANCH_DESTRUCTIONS, BRANCH_DIRECTIONAL_COMBINATIONS, BRANCH_HARMS, BRANCH_PUNISHMENTS, BRANCH_SIX_COMBINATIONS, BRANCH_TRIPLE_COMBINATIONS, type BranchClash, type BranchDestruction, type BranchDirectionalCombination, type BranchHarm, type BranchPunishment, type BranchSixCombination, type BranchTripleCombination, findBranchClash, findBranchSixCombination, findStemCombination, type Relation, type RelationsResult, STEM_COMBINATIONS, type StemCombination, } from "./core/relations";
6
+ export { analyzeSinsals, SINSAL_INFO, SINSALS, type Sinsal, type SinsalMatch, type SinsalResult, } from "./core/sinsals";
7
+ export { analyzeSolarTerms, getSolarTermsForYear, SOLAR_TERMS, type SolarTerm, type SolarTermDateInfo, type SolarTermHanja, type SolarTermInfo, type SolarTermName, } from "./core/solar-terms";
8
+ export { analyzeStrength, STRENGTH_LEVELS, type StrengthFactors, type StrengthLevel, type StrengthResult, } from "./core/strength";
9
+ export { analyzeTenGods, countElements, countTenGods, ELEMENTS, type Element, type FourPillarsTenGods, getBranchElement, getBranchPolarity, getHiddenStems, getStemElement, getStemPolarity, getTenGod, getTenGodForBranch, getTenGodsForBranch, HIDDEN_STEMS, type Polarity, TEN_GOD_ENGLISH, TEN_GOD_HANJA, TEN_GODS, type TenGod, } from "./core/ten-gods";
10
+ export { analyzeTwelveStages, getTwelveStage, STAGE_INFO, TWELVE_STAGES, type TwelveStage, type TwelveStagesResult, } from "./core/twelve-stages";
11
+ export { analyzeYongShen, getElementRecommendations, type YongShenMethod, type YongShenResult, } from "./core/yongshen";
12
+ export type { Branch, Pillar, PillarPosition, Stem } from "./types";
13
+ import type { DateAdapter } from "./adapters/date-adapter";
14
+ import { type presetA } from "./core/four-pillars";
15
+ import { type Gender, type MajorLuckResult, type YearlyLuckResult } from "./core/luck";
16
+ import type { LunarDate } from "./core/lunar";
17
+ import { type RelationsResult } from "./core/relations";
18
+ import { type SinsalResult } from "./core/sinsals";
19
+ import { type SolarTermInfo } from "./core/solar-terms";
20
+ import { type StrengthResult } from "./core/strength";
21
+ import { type FourPillarsTenGods } from "./core/ten-gods";
22
+ import { type TwelveStagesResult } from "./core/twelve-stages";
23
+ import { type YongShenResult } from "./core/yongshen";
24
+ export interface SajuResult {
25
+ pillars: {
26
+ year: string;
27
+ month: string;
28
+ day: string;
29
+ hour: string;
30
+ };
31
+ lunar: LunarDate;
32
+ tenGods: FourPillarsTenGods;
33
+ strength: StrengthResult;
34
+ relations: RelationsResult;
35
+ yongShen: YongShenResult;
36
+ solarTerms: SolarTermInfo;
37
+ majorLuck: MajorLuckResult;
38
+ yearlyLuck: YearlyLuckResult[];
39
+ twelveStages: TwelveStagesResult;
40
+ sinsals: SinsalResult;
41
+ meta: {
42
+ solarYearUsed: number;
43
+ sunLonDeg: number;
44
+ effectiveDayDate: {
45
+ year: number;
46
+ month: number;
47
+ day: number;
48
+ };
49
+ adjustedDtForHour: string;
50
+ };
51
+ }
52
+ export interface GetSajuOptions {
53
+ longitudeDeg?: number;
54
+ gender: Gender;
55
+ tzOffsetHours?: number;
56
+ preset?: typeof presetA;
57
+ currentYear?: number;
58
+ yearlyLuckRange?: {
59
+ from: number;
60
+ to: number;
61
+ };
62
+ }
63
+ export declare function getSaju<T>(adapter: DateAdapter<T>, dtLocal: T, options: GetSajuOptions): SajuResult;
4
64
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,SAAS,EAAE,MAAM,cAAc,CAAC;AAE1E,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,WAAW,EACX,OAAO,EACP,OAAO,EACP,eAAe,EACf,KAAK,EACL,kBAAkB,EAClB,UAAU,GACX,MAAM,qBAAqB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -1,2 +1,57 @@
1
- export { getLunarDate, getSolarDate } from "@/core/lunar";
2
- export { applyMeanSolarTime, BRANCHES, dayPillarFromDate, effectiveDayDate, getFourPillars, hourPillar, monthPillar, presetA, presetB, STANDARD_PRESET, STEMS, TRADITIONAL_PRESET, yearPillar, } from "@/core/four-pillars";
1
+ export { applyMeanSolarTime, BRANCHES, dayPillarFromDate, effectiveDayDate, getFourPillars, hourPillar, monthPillar, presetA, presetB, STANDARD_PRESET, STEMS, TRADITIONAL_PRESET, yearPillar, } from "./core/four-pillars";
2
+ export { calculateDailyLuck, calculateMajorLuck, calculateMonthlyLuck, calculateYearlyLuck, getCurrentMajorLuck, getDayPillar, getMonthPillar, getYearPillar, } from "./core/luck";
3
+ export { getLunarDate, getSolarDate } from "./core/lunar";
4
+ export { analyzeRelations, BRANCH_CLASHES, BRANCH_DESTRUCTIONS, BRANCH_DIRECTIONAL_COMBINATIONS, BRANCH_HARMS, BRANCH_PUNISHMENTS, BRANCH_SIX_COMBINATIONS, BRANCH_TRIPLE_COMBINATIONS, findBranchClash, findBranchSixCombination, findStemCombination, STEM_COMBINATIONS, } from "./core/relations";
5
+ export { analyzeSinsals, SINSAL_INFO, SINSALS, } from "./core/sinsals";
6
+ export { analyzeSolarTerms, getSolarTermsForYear, SOLAR_TERMS, } from "./core/solar-terms";
7
+ export { analyzeStrength, STRENGTH_LEVELS, } from "./core/strength";
8
+ export { analyzeTenGods, countElements, countTenGods, ELEMENTS, getBranchElement, getBranchPolarity, getHiddenStems, getStemElement, getStemPolarity, getTenGod, getTenGodForBranch, getTenGodsForBranch, HIDDEN_STEMS, TEN_GOD_ENGLISH, TEN_GOD_HANJA, TEN_GODS, } from "./core/ten-gods";
9
+ export { analyzeTwelveStages, getTwelveStage, STAGE_INFO, TWELVE_STAGES, } from "./core/twelve-stages";
10
+ export { analyzeYongShen, getElementRecommendations, } from "./core/yongshen";
11
+ import { getFourPillars } from "./core/four-pillars";
12
+ import { calculateMajorLuck, calculateYearlyLuck, } from "./core/luck";
13
+ import { analyzeRelations } from "./core/relations";
14
+ import { analyzeSinsals } from "./core/sinsals";
15
+ import { analyzeSolarTerms } from "./core/solar-terms";
16
+ import { analyzeStrength } from "./core/strength";
17
+ import { analyzeTenGods } from "./core/ten-gods";
18
+ import { analyzeTwelveStages } from "./core/twelve-stages";
19
+ import { analyzeYongShen } from "./core/yongshen";
20
+ export function getSaju(adapter, dtLocal, options) {
21
+ const fourPillars = getFourPillars(adapter, dtLocal, {
22
+ longitudeDeg: options.longitudeDeg,
23
+ tzOffsetHours: options.tzOffsetHours,
24
+ preset: options.preset,
25
+ });
26
+ const { year, month, day, hour } = fourPillars;
27
+ const tenGods = analyzeTenGods(year, month, day, hour);
28
+ const strength = analyzeStrength(year, month, day, hour);
29
+ const relations = analyzeRelations(year, month, day, hour);
30
+ const yongShen = analyzeYongShen(year, month, day, hour);
31
+ const solarTerms = analyzeSolarTerms(adapter, dtLocal);
32
+ const twelveStages = analyzeTwelveStages(year, month, day, hour);
33
+ const sinsals = analyzeSinsals(year, month, day, hour);
34
+ const result = {
35
+ pillars: { year, month, day, hour },
36
+ lunar: fourPillars.lunar,
37
+ tenGods,
38
+ strength,
39
+ relations,
40
+ yongShen,
41
+ solarTerms,
42
+ majorLuck: calculateMajorLuck(adapter, dtLocal, options.gender, year, month, {
43
+ nextJieMillis: solarTerms.nextJieMillis,
44
+ prevJieMillis: solarTerms.prevJieMillis,
45
+ }),
46
+ yearlyLuck: calculateYearlyLuck(fourPillars.meta.solarYearUsed, options.yearlyLuckRange?.from ?? (options.currentYear ?? new Date().getFullYear()) - 5, options.yearlyLuckRange?.to ?? (options.currentYear ?? new Date().getFullYear()) + 10),
47
+ twelveStages,
48
+ sinsals,
49
+ meta: {
50
+ solarYearUsed: fourPillars.meta.solarYearUsed,
51
+ sunLonDeg: fourPillars.meta.sunLonDeg,
52
+ effectiveDayDate: fourPillars.meta.effectiveDayDate,
53
+ adjustedDtForHour: fourPillars.meta.adjustedDtForHour,
54
+ },
55
+ };
56
+ return result;
57
+ }
@@ -0,0 +1,12 @@
1
+ export type Stem = "甲" | "乙" | "丙" | "丁" | "戊" | "己" | "庚" | "辛" | "壬" | "癸";
2
+ export type Branch = "子" | "丑" | "寅" | "卯" | "辰" | "巳" | "午" | "未" | "申" | "酉" | "戌" | "亥";
3
+ export type Element = "wood" | "fire" | "earth" | "metal" | "water";
4
+ export type Polarity = "yang" | "yin";
5
+ export type Gender = "male" | "female";
6
+ export type PillarPosition = "year" | "month" | "day" | "hour";
7
+ export interface Pillar {
8
+ stem: Stem;
9
+ branch: Branch;
10
+ pillar: string;
11
+ }
12
+ //# sourceMappingURL=common.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"common.d.ts","sourceRoot":"","sources":["../../src/types/common.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC7E,MAAM,MAAM,MAAM,GACd,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,GACH,GAAG,CAAC;AAER,MAAM,MAAM,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;AACpE,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,KAAK,CAAC;AACtC,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEvC,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,MAAM,CAAC;AAE/D,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,2 @@
1
+ export type { Branch, Element, Gender, Pillar, PillarPosition, Polarity, Stem, } from "../types/common";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,MAAM,EACN,OAAO,EACP,MAAM,EACN,MAAM,EACN,cAAc,EACd,QAAQ,EACR,IAAI,GACL,MAAM,gBAAgB,CAAC"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,13 @@
1
+ import type { Branch, Stem } from "../types";
2
+ export declare const STEMS: readonly Stem[];
3
+ export declare const BRANCHES: readonly Branch[];
4
+ export declare const ELEMENTS: readonly ["wood", "fire", "earth", "metal", "water"];
5
+ export declare function getStemIndex(stem: Stem | string): number;
6
+ export declare function getBranchIndex(branch: Branch | string): number;
7
+ export declare function pillarFromIndex(idx60: number): string;
8
+ export declare function getPillarIndex(pillar: string): number;
9
+ export declare function jdnFromDate(year: number, month: number, day: number): number;
10
+ export declare function dayPillarIndexFromJdn(jdn: number): number;
11
+ export declare function isYangStem(stem: Stem | string): boolean;
12
+ export declare function isYinStem(stem: Stem | string): boolean;
13
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/utils/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAE5C,eAAO,MAAM,KAAK,EAAE,SAAS,IAAI,EAAuD,CAAC;AAEzF,eAAO,MAAM,QAAQ,EAAE,SAAS,MAAM,EAarC,CAAC;AAEF,eAAO,MAAM,QAAQ,sDAAuD,CAAC;AAE7E,wBAAgB,YAAY,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,MAAM,CAExD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAE9D;AAED,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAGrD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAYrD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAa5E;AAED,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,GAAG,OAAO,CAEtD"}
@@ -0,0 +1,59 @@
1
+ export const STEMS = ["甲", "乙", "丙", "丁", "戊", "己", "庚", "辛", "壬", "癸"];
2
+ export const BRANCHES = [
3
+ "子",
4
+ "丑",
5
+ "寅",
6
+ "卯",
7
+ "辰",
8
+ "巳",
9
+ "午",
10
+ "未",
11
+ "申",
12
+ "酉",
13
+ "戌",
14
+ "亥",
15
+ ];
16
+ export const ELEMENTS = ["wood", "fire", "earth", "metal", "water"];
17
+ export function getStemIndex(stem) {
18
+ return STEMS.indexOf(stem);
19
+ }
20
+ export function getBranchIndex(branch) {
21
+ return BRANCHES.indexOf(branch);
22
+ }
23
+ export function pillarFromIndex(idx60) {
24
+ const normalized = ((idx60 % 60) + 60) % 60;
25
+ return STEMS[normalized % 10] + BRANCHES[normalized % 12];
26
+ }
27
+ export function getPillarIndex(pillar) {
28
+ const stem = pillar[0];
29
+ const branch = pillar[1];
30
+ const stemIdx = getStemIndex(stem);
31
+ const branchIdx = getBranchIndex(branch);
32
+ for (let i = 0; i < 60; i++) {
33
+ if (i % 10 === stemIdx && i % 12 === branchIdx) {
34
+ return i;
35
+ }
36
+ }
37
+ return 0;
38
+ }
39
+ export function jdnFromDate(year, month, day) {
40
+ const a = Math.floor((14 - month) / 12);
41
+ const y2 = year + 4800 - a;
42
+ const m2 = month + 12 * a - 3;
43
+ return (day +
44
+ Math.floor((153 * m2 + 2) / 5) +
45
+ 365 * y2 +
46
+ Math.floor(y2 / 4) -
47
+ Math.floor(y2 / 100) +
48
+ Math.floor(y2 / 400) -
49
+ 32045);
50
+ }
51
+ export function dayPillarIndexFromJdn(jdn) {
52
+ return (((jdn + 49) % 60) + 60) % 60;
53
+ }
54
+ export function isYangStem(stem) {
55
+ return ["甲", "丙", "戊", "庚", "壬"].includes(stem);
56
+ }
57
+ export function isYinStem(stem) {
58
+ return ["乙", "丁", "己", "辛", "癸"].includes(stem);
59
+ }
@@ -0,0 +1,2 @@
1
+ export { BRANCHES, dayPillarIndexFromJdn, ELEMENTS, getBranchIndex, getPillarIndex, getStemIndex, isYangStem, isYinStem, jdnFromDate, pillarFromIndex, STEMS, } from "../utils/constants";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,QAAQ,EACR,cAAc,EACd,cAAc,EACd,YAAY,EACZ,UAAU,EACV,SAAS,EACT,WAAW,EACX,eAAe,EACf,KAAK,GACN,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1 @@
1
+ export { BRANCHES, dayPillarIndexFromJdn, ELEMENTS, getBranchIndex, getPillarIndex, getStemIndex, isYangStem, isYinStem, jdnFromDate, pillarFromIndex, STEMS, } from "../utils/constants";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@gracefullight/saju",
3
- "version": "0.2.0",
3
+ "version": "0.4.1",
4
4
  "description": "Four Pillars (四柱) calculator with flexible date adapter support",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -23,16 +23,6 @@
23
23
  "files": [
24
24
  "dist"
25
25
  ],
26
- "scripts": {
27
- "build": "tsc",
28
- "dev": "tsx src/index.ts",
29
- "test": "vitest",
30
- "test:ui": "vitest --ui",
31
- "test:coverage": "vitest --coverage",
32
- "lint": "biome check src",
33
- "lint:fix": "biome check --write src",
34
- "format": "biome format --write src"
35
- },
36
26
  "keywords": [
37
27
  "saju",
38
28
  "four-pillars",
@@ -60,6 +50,7 @@
60
50
  },
61
51
  "devDependencies": {
62
52
  "@types/luxon": "^3.4.2",
53
+ "tsc-alias": "^1.8.10",
63
54
  "@vitest/coverage-v8": "^2.1.8",
64
55
  "@vitest/ui": "^2.1.8",
65
56
  "date-fns": "^4.1.0",
@@ -69,5 +60,15 @@
69
60
  },
70
61
  "dependencies": {
71
62
  "lunar-javascript": "^1.7.7"
63
+ },
64
+ "scripts": {
65
+ "build": "tsc && tsc-alias",
66
+ "dev": "tsx src/index.ts",
67
+ "test": "vitest",
68
+ "test:ui": "vitest --ui",
69
+ "test:coverage": "vitest --coverage",
70
+ "lint": "biome check src",
71
+ "lint:fix": "biome check --write src",
72
+ "format": "biome format --write src"
72
73
  }
73
- }
74
+ }