@lokascript/domain-learn 2.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.
Files changed (44) hide show
  1. package/dist/generators/gloss-generator.d.ts +18 -0
  2. package/dist/generators/learn-renderer.d.ts +13 -0
  3. package/dist/generators/sentence-generator.d.ts +34 -0
  4. package/dist/index.cjs +6116 -0
  5. package/dist/index.cjs.map +1 -0
  6. package/dist/index.d.cts +441 -0
  7. package/dist/index.d.ts +55 -0
  8. package/dist/index.js +6056 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/profiles/ar.d.ts +2 -0
  11. package/dist/profiles/de.d.ts +2 -0
  12. package/dist/profiles/en.d.ts +2 -0
  13. package/dist/profiles/es.d.ts +2 -0
  14. package/dist/profiles/fr.d.ts +2 -0
  15. package/dist/profiles/index.d.ts +20 -0
  16. package/dist/profiles/ja.d.ts +2 -0
  17. package/dist/profiles/ko.d.ts +2 -0
  18. package/dist/profiles/pt.d.ts +2 -0
  19. package/dist/profiles/tr.d.ts +2 -0
  20. package/dist/profiles/zh.d.ts +2 -0
  21. package/dist/schemas/index.d.ts +31 -0
  22. package/dist/tokenizers/index.d.ts +23 -0
  23. package/dist/types.d.ts +266 -0
  24. package/package.json +63 -0
  25. package/src/__tests__/schemas.test.ts +145 -0
  26. package/src/__tests__/sentence-generation.test.ts +189 -0
  27. package/src/generators/gloss-generator.ts +145 -0
  28. package/src/generators/learn-renderer.ts +291 -0
  29. package/src/generators/sentence-generator.ts +501 -0
  30. package/src/index.ts +237 -0
  31. package/src/profiles/ar.ts +526 -0
  32. package/src/profiles/de.ts +481 -0
  33. package/src/profiles/en.ts +181 -0
  34. package/src/profiles/es.ts +829 -0
  35. package/src/profiles/fr.ts +466 -0
  36. package/src/profiles/index.ts +34 -0
  37. package/src/profiles/ja.ts +301 -0
  38. package/src/profiles/ko.ts +286 -0
  39. package/src/profiles/pt.ts +484 -0
  40. package/src/profiles/tr.ts +511 -0
  41. package/src/profiles/zh.ts +256 -0
  42. package/src/schemas/index.ts +576 -0
  43. package/src/tokenizers/index.ts +409 -0
  44. package/src/types.ts +321 -0
package/src/index.ts ADDED
@@ -0,0 +1,237 @@
1
+ /**
2
+ * @lokascript/domain-learn — Multilingual Learning DSL
3
+ *
4
+ * A learning domain built on @lokascript/framework that formalizes
5
+ * the morphology engine: 15 verbs x 10 languages x 7 communicative
6
+ * functions, with sentence generation, interlinear glosses, and
7
+ * cross-language rendering.
8
+ *
9
+ * Unlike domain-sql (natural language -> SQL), domain-learn's "compiled
10
+ * output" IS natural language sentences with morphology applied. The
11
+ * standard CodeGenerator.generate() returns the commanding form in English.
12
+ * The extended generateForFunction() powers the exercise engine.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { createLearnDSL } from '@lokascript/domain-learn';
17
+ *
18
+ * const learn = createLearnDSL();
19
+ *
20
+ * // Parse multilingual command input
21
+ * const node = learn.parse('add .active to #button', 'en');
22
+ *
23
+ * // Generate sentence in any language x function
24
+ * import { generateForFunction } from '@lokascript/domain-learn';
25
+ * generateForFunction(node, 'narrating', 'ja');
26
+ * // -> { sentence: 'システムは #buttonに .activeを 追加しました', ... }
27
+ *
28
+ * // Cross-language translation
29
+ * learn.translate('add .active to #button', 'en', 'ja');
30
+ *
31
+ * // Interlinear gloss
32
+ * import { generateGloss } from '@lokascript/domain-learn';
33
+ * generateGloss(node, 'commanding', 'ja');
34
+ * // -> { tokens: ['#buttonに', '.activeを', '追加して'], roles: ['DEST', 'PAT', 'VERB'], ... }
35
+ * ```
36
+ */
37
+
38
+ import { createMultilingualDSL, type MultilingualDSL } from '@lokascript/framework';
39
+ import { allSchemas } from './schemas';
40
+ import {
41
+ ALL_PROFILES,
42
+ enProfile,
43
+ jaProfile,
44
+ esProfile,
45
+ arProfile,
46
+ zhProfile,
47
+ koProfile,
48
+ frProfile,
49
+ trProfile,
50
+ deProfile,
51
+ ptProfile,
52
+ } from './profiles';
53
+ import {
54
+ EnglishLearnTokenizer,
55
+ JapaneseLearnTokenizer,
56
+ SpanishLearnTokenizer,
57
+ ArabicLearnTokenizer,
58
+ ChineseLearnTokenizer,
59
+ KoreanLearnTokenizer,
60
+ FrenchLearnTokenizer,
61
+ TurkishLearnTokenizer,
62
+ GermanLearnTokenizer,
63
+ PortugueseLearnTokenizer,
64
+ } from './tokenizers';
65
+ import { learnCodeGenerator, registerProfile } from './generators/sentence-generator';
66
+
67
+ /**
68
+ * Create a multilingual learning DSL instance with all 10 supported languages.
69
+ * Also registers all language profiles with the sentence generator.
70
+ */
71
+ export function createLearnDSL(): MultilingualDSL {
72
+ // Register all profiles with the sentence generator
73
+ for (const [code, profile] of Object.entries(ALL_PROFILES)) {
74
+ registerProfile(code, profile);
75
+ }
76
+
77
+ return createMultilingualDSL({
78
+ name: 'Learn',
79
+ schemas: allSchemas,
80
+ languages: [
81
+ {
82
+ code: 'en',
83
+ name: 'English',
84
+ nativeName: 'English',
85
+ tokenizer: EnglishLearnTokenizer,
86
+ patternProfile: enProfile.patternProfile,
87
+ },
88
+ {
89
+ code: 'ja',
90
+ name: 'Japanese',
91
+ nativeName: '日本語',
92
+ tokenizer: JapaneseLearnTokenizer,
93
+ patternProfile: jaProfile.patternProfile,
94
+ },
95
+ {
96
+ code: 'es',
97
+ name: 'Spanish',
98
+ nativeName: 'Español',
99
+ tokenizer: SpanishLearnTokenizer,
100
+ patternProfile: esProfile.patternProfile,
101
+ },
102
+ {
103
+ code: 'ar',
104
+ name: 'Arabic',
105
+ nativeName: 'العربية',
106
+ tokenizer: ArabicLearnTokenizer,
107
+ patternProfile: arProfile.patternProfile,
108
+ },
109
+ {
110
+ code: 'zh',
111
+ name: 'Chinese',
112
+ nativeName: '中文',
113
+ tokenizer: ChineseLearnTokenizer,
114
+ patternProfile: zhProfile.patternProfile,
115
+ },
116
+ {
117
+ code: 'ko',
118
+ name: 'Korean',
119
+ nativeName: '한국어',
120
+ tokenizer: KoreanLearnTokenizer,
121
+ patternProfile: koProfile.patternProfile,
122
+ },
123
+ {
124
+ code: 'fr',
125
+ name: 'French',
126
+ nativeName: 'Français',
127
+ tokenizer: FrenchLearnTokenizer,
128
+ patternProfile: frProfile.patternProfile,
129
+ },
130
+ {
131
+ code: 'tr',
132
+ name: 'Turkish',
133
+ nativeName: 'Türkçe',
134
+ tokenizer: TurkishLearnTokenizer,
135
+ patternProfile: trProfile.patternProfile,
136
+ },
137
+ {
138
+ code: 'de',
139
+ name: 'German',
140
+ nativeName: 'Deutsch',
141
+ tokenizer: GermanLearnTokenizer,
142
+ patternProfile: deProfile.patternProfile,
143
+ },
144
+ {
145
+ code: 'pt',
146
+ name: 'Portuguese',
147
+ nativeName: 'Português',
148
+ tokenizer: PortugueseLearnTokenizer,
149
+ patternProfile: ptProfile.patternProfile,
150
+ },
151
+ ],
152
+ codeGenerator: learnCodeGenerator,
153
+ });
154
+ }
155
+
156
+ // ─── Re-exports ──────────────────────────────────────────────────
157
+
158
+ // Types
159
+ export type {
160
+ CommunicativeFunction,
161
+ CoreVerb,
162
+ SemanticRole,
163
+ VerbValence,
164
+ CommandProfile,
165
+ SentenceFrame,
166
+ LanguageFrames,
167
+ RenderedSentence,
168
+ InterlinearGloss,
169
+ LearnLanguageProfile,
170
+ EnglishForms,
171
+ JapaneseForms,
172
+ SpanishForms,
173
+ ArabicForms,
174
+ ChineseForms,
175
+ KoreanForms,
176
+ FrenchForms,
177
+ TurkishForms,
178
+ GermanForms,
179
+ PortugueseForms,
180
+ AnyForms,
181
+ } from './types';
182
+
183
+ export { ALL_FUNCTIONS, ALL_VERBS } from './types';
184
+
185
+ // Schemas
186
+ export { allSchemas } from './schemas';
187
+
188
+ // Profiles
189
+ export {
190
+ ALL_PROFILES,
191
+ enProfile,
192
+ jaProfile,
193
+ esProfile,
194
+ arProfile,
195
+ zhProfile,
196
+ koProfile,
197
+ frProfile,
198
+ trProfile,
199
+ deProfile,
200
+ ptProfile,
201
+ } from './profiles';
202
+
203
+ // Tokenizers
204
+ export {
205
+ EnglishLearnTokenizer,
206
+ JapaneseLearnTokenizer,
207
+ SpanishLearnTokenizer,
208
+ ArabicLearnTokenizer,
209
+ ChineseLearnTokenizer,
210
+ KoreanLearnTokenizer,
211
+ FrenchLearnTokenizer,
212
+ TurkishLearnTokenizer,
213
+ GermanLearnTokenizer,
214
+ PortugueseLearnTokenizer,
215
+ } from './tokenizers';
216
+
217
+ // Generators
218
+ export {
219
+ learnCodeGenerator,
220
+ generateForFunction,
221
+ generateAllFunctions,
222
+ generateCrossLingual,
223
+ registerProfile,
224
+ getProfile,
225
+ resolveMarker,
226
+ attachMarker,
227
+ } from './generators/sentence-generator';
228
+
229
+ export { renderLearn } from './generators/learn-renderer';
230
+ export { generateGloss } from './generators/gloss-generator';
231
+
232
+ // Domain scan config (for AOT / Vite plugin integration)
233
+ export const learnScanConfig = {
234
+ attributes: ['data-learn', '_learn'] as const,
235
+ scriptTypes: ['text/learn-dsl'] as const,
236
+ defaultLanguage: 'en',
237
+ };