@arcanea/core 0.1.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.
@@ -0,0 +1,150 @@
1
+ /**
2
+ * Arcanea Core Utilities
3
+ *
4
+ * Common utility functions for the Arcanea ecosystem.
5
+ */
6
+ import { GATES, ELEMENTS, GUARDIANS } from '../constants/mythology.js';
7
+ // ============================================
8
+ // FREQUENCY UTILITIES
9
+ // ============================================
10
+ /**
11
+ * Solfeggio frequencies used in the Gate system
12
+ */
13
+ export const SOLFEGGIO_FREQUENCIES = [396, 417, 528, 639, 741, 852, 963, 1111];
14
+ /**
15
+ * Get the healing/creative property of a frequency
16
+ */
17
+ export function getFrequencyProperty(frequency) {
18
+ const properties = {
19
+ 396: 'Liberating guilt and fear',
20
+ 417: 'Facilitating change',
21
+ 528: 'Transformation and miracles (Love frequency)',
22
+ 639: 'Connecting relationships',
23
+ 741: 'Awakening intuition',
24
+ 852: 'Returning to spiritual order',
25
+ 963: 'Cosmic consciousness',
26
+ 1111: 'Angelic gateway / master number',
27
+ };
28
+ return properties[frequency] || 'Unknown frequency';
29
+ }
30
+ // ============================================
31
+ // GATE UTILITIES
32
+ // ============================================
33
+ /**
34
+ * Calculate magic rank based on gates opened
35
+ */
36
+ export function calculateMagicRank(gatesOpened) {
37
+ if (gatesOpened >= 9)
38
+ return 'luminor';
39
+ if (gatesOpened >= 7)
40
+ return 'archmage';
41
+ if (gatesOpened >= 5)
42
+ return 'master';
43
+ if (gatesOpened >= 3)
44
+ return 'mage';
45
+ return 'apprentice';
46
+ }
47
+ /**
48
+ * Get gate progression percentage
49
+ */
50
+ export function getGateProgress(gatesOpened) {
51
+ return Math.min(100, (gatesOpened / 10) * 100);
52
+ }
53
+ /**
54
+ * Get next gate to open
55
+ */
56
+ export function getNextGate(gatesOpened) {
57
+ if (gatesOpened >= 10)
58
+ return null;
59
+ return GATES[gatesOpened];
60
+ }
61
+ // ============================================
62
+ // ELEMENT UTILITIES
63
+ // ============================================
64
+ /**
65
+ * Get element color (primary)
66
+ */
67
+ export function getElementColor(element) {
68
+ const el = ELEMENTS.find(e => e.name === element);
69
+ return el?.colors[0] || '#888888';
70
+ }
71
+ /**
72
+ * Get complementary elements
73
+ */
74
+ export function getComplementaryElements(element) {
75
+ const complements = {
76
+ fire: ['water', 'void'],
77
+ water: ['fire', 'earth'],
78
+ earth: ['wind', 'water'],
79
+ wind: ['earth', 'fire'],
80
+ void: ['fire', 'water', 'earth', 'wind'],
81
+ };
82
+ return complements[element] || [];
83
+ }
84
+ // ============================================
85
+ // GUARDIAN UTILITIES
86
+ // ============================================
87
+ /**
88
+ * Get guardian by gate number
89
+ */
90
+ export function getGuardianByGateNumber(gateNumber) {
91
+ const gate = GATES.find(g => g.number === gateNumber);
92
+ if (!gate)
93
+ return null;
94
+ return GUARDIANS.find(g => g.name === gate.guardian);
95
+ }
96
+ /**
97
+ * Get guardians by element
98
+ */
99
+ export function getGuardiansByElement(element) {
100
+ return GUARDIANS.filter(g => g.element === element);
101
+ }
102
+ // ============================================
103
+ // STRING UTILITIES
104
+ // ============================================
105
+ /**
106
+ * Convert gate name to display format
107
+ */
108
+ export function formatGateName(gate) {
109
+ return gate.charAt(0).toUpperCase() + gate.slice(1) + ' Gate';
110
+ }
111
+ /**
112
+ * Create a slug from text
113
+ */
114
+ export function slugify(text) {
115
+ return text
116
+ .toLowerCase()
117
+ .replace(/[^\w\s-]/g, '')
118
+ .replace(/[\s_-]+/g, '-')
119
+ .replace(/^-+|-+$/g, '');
120
+ }
121
+ // ============================================
122
+ // DATE UTILITIES
123
+ // ============================================
124
+ /**
125
+ * Format date for Arcanea display
126
+ */
127
+ export function formatArcaneaDate(date) {
128
+ const d = typeof date === 'string' ? new Date(date) : date;
129
+ return d.toLocaleDateString('en-US', {
130
+ year: 'numeric',
131
+ month: 'long',
132
+ day: 'numeric',
133
+ });
134
+ }
135
+ // ============================================
136
+ // VALIDATION UTILITIES
137
+ // ============================================
138
+ /**
139
+ * Check if a string is a valid gate name
140
+ */
141
+ export function isValidGateName(name) {
142
+ return GATES.some(g => g.name === name);
143
+ }
144
+ /**
145
+ * Check if a string is a valid element
146
+ */
147
+ export function isValidElement(name) {
148
+ return ELEMENTS.some(e => e.name === name);
149
+ }
150
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,58 @@
1
+ {
2
+ "name": "@arcanea/core",
3
+ "version": "0.1.0",
4
+ "description": "Core types, constants, and utilities for the Arcanea ecosystem",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.js"
13
+ },
14
+ "./types": {
15
+ "types": "./dist/types/index.d.ts",
16
+ "import": "./dist/types/index.js"
17
+ },
18
+ "./constants": {
19
+ "types": "./dist/constants/index.d.ts",
20
+ "import": "./dist/constants/index.js"
21
+ },
22
+ "./utils": {
23
+ "types": "./dist/utils/index.d.ts",
24
+ "import": "./dist/utils/index.js"
25
+ }
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md"
30
+ ],
31
+ "scripts": {
32
+ "build": "tsc",
33
+ "dev": "tsc --watch",
34
+ "clean": "rm -rf dist",
35
+ "prepublishOnly": "npm run build"
36
+ },
37
+ "keywords": [
38
+ "arcanea",
39
+ "mythology",
40
+ "ai",
41
+ "creative",
42
+ "types",
43
+ "typescript"
44
+ ],
45
+ "author": "FrankX <frank@frankx.ai>",
46
+ "license": "MIT",
47
+ "repository": {
48
+ "type": "git",
49
+ "url": "https://github.com/frankxai/arcanea.git",
50
+ "directory": "packages/core"
51
+ },
52
+ "devDependencies": {
53
+ "typescript": "^5.9.3"
54
+ },
55
+ "publishConfig": {
56
+ "access": "public"
57
+ }
58
+ }