@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
@@ -0,0 +1,576 @@
1
+ /**
2
+ * Learn Domain Command Schemas
3
+ *
4
+ * 15 core verbs formalized as CommandSchemas using the framework's
5
+ * defineCommand/defineRole helpers. Each schema defines the semantic
6
+ * roles and per-language marker overrides for sentence rendering.
7
+ *
8
+ * Role markers are the RESOLVED values combining:
9
+ * - @lokascript/semantic schema markerOverrides (Tiers 1-2)
10
+ * - lokascript-learn LEARNING_OVERRIDES (Tier 3)
11
+ * - LANGUAGE_RENDERING_OVERRIDES (Tier 4)
12
+ * - Profile defaults (Tier 5)
13
+ *
14
+ * This collapses the 5-tier resolution into flat markerOverride maps.
15
+ */
16
+
17
+ import { defineCommand, defineRole } from '@lokascript/framework';
18
+
19
+ // ─── Markers used across multiple verbs ─────────────────────────
20
+
21
+ /** Destination markers: "to" / allative */
22
+ const DEST_TO = {
23
+ en: 'to',
24
+ ja: '',
25
+ es: 'a',
26
+ ar: 'إلى',
27
+ zh: '到',
28
+ ko: '에',
29
+ fr: 'à',
30
+ tr: 'a',
31
+ de: 'zu',
32
+ pt: 'a',
33
+ };
34
+
35
+ /** Destination markers: "into" / illative */
36
+ const DEST_INTO = {
37
+ en: 'into',
38
+ ja: '',
39
+ es: 'en',
40
+ ar: 'في',
41
+ zh: '到',
42
+ ko: '에',
43
+ fr: 'dans',
44
+ tr: 'a',
45
+ de: 'in',
46
+ pt: 'em',
47
+ };
48
+
49
+ /** Destination markers: "on" / locative (default profile) */
50
+ const DEST_ON = {
51
+ en: 'on',
52
+ ja: '',
53
+ es: 'en',
54
+ ar: 'على',
55
+ zh: '在',
56
+ ko: '에',
57
+ fr: 'sur',
58
+ tr: 'da',
59
+ de: 'auf',
60
+ pt: 'em',
61
+ };
62
+
63
+ /** Source markers: "from" / ablative */
64
+ const SOURCE_FROM = {
65
+ en: 'from',
66
+ ja: '',
67
+ es: 'de',
68
+ ar: 'من',
69
+ zh: '从',
70
+ ko: '에서',
71
+ fr: 'de',
72
+ tr: 'dan',
73
+ de: 'von',
74
+ pt: 'de',
75
+ };
76
+
77
+ /** Patient markers: empty for SVO, particles for SOV */
78
+ const PATIENT = {
79
+ en: '',
80
+ ja: '',
81
+ es: '',
82
+ ar: '',
83
+ zh: '',
84
+ ko: '',
85
+ fr: '',
86
+ tr: '',
87
+ de: '',
88
+ pt: '',
89
+ };
90
+
91
+ // =============================================================================
92
+ // add — ditransitive: patient + destination (to)
93
+ // =============================================================================
94
+
95
+ export const addSchema = defineCommand({
96
+ action: 'add',
97
+ description: 'Add a class or attribute to an element',
98
+ category: 'mutation',
99
+ primaryRole: 'patient',
100
+ roles: [
101
+ defineRole({
102
+ role: 'patient',
103
+ description: 'The class or attribute to add',
104
+ required: true,
105
+ expectedTypes: ['selector', 'literal', 'expression'],
106
+ svoPosition: 3,
107
+ sovPosition: 1,
108
+ markerOverride: PATIENT,
109
+ }),
110
+ defineRole({
111
+ role: 'destination',
112
+ description: 'The target element',
113
+ required: false,
114
+ expectedTypes: ['selector', 'reference', 'expression'],
115
+ svoPosition: 2,
116
+ sovPosition: 2,
117
+ markerOverride: DEST_TO,
118
+ }),
119
+ ],
120
+ });
121
+
122
+ // =============================================================================
123
+ // remove — ditransitive: patient + source (from)
124
+ // =============================================================================
125
+
126
+ export const removeSchema = defineCommand({
127
+ action: 'remove',
128
+ description: 'Remove a class or attribute from an element',
129
+ category: 'mutation',
130
+ primaryRole: 'patient',
131
+ roles: [
132
+ defineRole({
133
+ role: 'patient',
134
+ description: 'The class or attribute to remove',
135
+ required: true,
136
+ expectedTypes: ['selector', 'literal', 'expression'],
137
+ svoPosition: 3,
138
+ sovPosition: 1,
139
+ markerOverride: PATIENT,
140
+ }),
141
+ defineRole({
142
+ role: 'source',
143
+ description: 'The element to remove from',
144
+ required: false,
145
+ expectedTypes: ['selector', 'reference', 'expression'],
146
+ svoPosition: 2,
147
+ sovPosition: 2,
148
+ markerOverride: SOURCE_FROM,
149
+ }),
150
+ ],
151
+ });
152
+
153
+ // =============================================================================
154
+ // toggle — ditransitive: patient + destination (on)
155
+ // =============================================================================
156
+
157
+ export const toggleSchema = defineCommand({
158
+ action: 'toggle',
159
+ description: 'Toggle a class or attribute on an element',
160
+ category: 'mutation',
161
+ primaryRole: 'patient',
162
+ roles: [
163
+ defineRole({
164
+ role: 'patient',
165
+ description: 'The class or attribute to toggle',
166
+ required: true,
167
+ expectedTypes: ['selector', 'literal', 'expression'],
168
+ svoPosition: 3,
169
+ sovPosition: 1,
170
+ markerOverride: PATIENT,
171
+ }),
172
+ defineRole({
173
+ role: 'destination',
174
+ description: 'The target element',
175
+ required: false,
176
+ expectedTypes: ['selector', 'reference', 'expression'],
177
+ svoPosition: 2,
178
+ sovPosition: 2,
179
+ markerOverride: DEST_ON,
180
+ }),
181
+ ],
182
+ });
183
+
184
+ // =============================================================================
185
+ // put — ditransitive: patient + destination (into)
186
+ // =============================================================================
187
+
188
+ export const putSchema = defineCommand({
189
+ action: 'put',
190
+ description: 'Put content into a target element',
191
+ category: 'mutation',
192
+ primaryRole: 'patient',
193
+ roles: [
194
+ defineRole({
195
+ role: 'patient',
196
+ description: 'The content to put',
197
+ required: true,
198
+ expectedTypes: ['literal', 'selector', 'reference', 'expression'],
199
+ svoPosition: 3,
200
+ sovPosition: 1,
201
+ markerOverride: PATIENT,
202
+ }),
203
+ defineRole({
204
+ role: 'destination',
205
+ description: 'Where to put the content',
206
+ required: false,
207
+ expectedTypes: ['selector', 'reference', 'expression'],
208
+ svoPosition: 2,
209
+ sovPosition: 2,
210
+ markerOverride: DEST_INTO,
211
+ }),
212
+ ],
213
+ });
214
+
215
+ // =============================================================================
216
+ // set — ditransitive: destination (the property) + patient (the value)
217
+ // Note: set has swapped primary role — destination comes first
218
+ // =============================================================================
219
+
220
+ export const setSchema = defineCommand({
221
+ action: 'set',
222
+ description: 'Set a property or variable to a value',
223
+ category: 'variable',
224
+ primaryRole: 'destination',
225
+ roles: [
226
+ defineRole({
227
+ role: 'destination',
228
+ description: 'The property to set',
229
+ required: true,
230
+ expectedTypes: ['selector', 'reference', 'expression'],
231
+ svoPosition: 3,
232
+ sovPosition: 1,
233
+ markerOverride: {
234
+ en: '',
235
+ ja: 'を',
236
+ es: '',
237
+ ar: '',
238
+ zh: '',
239
+ ko: '를',
240
+ fr: '',
241
+ tr: '',
242
+ de: '',
243
+ pt: '',
244
+ },
245
+ }),
246
+ defineRole({
247
+ role: 'patient',
248
+ description: 'The value to set',
249
+ required: true,
250
+ expectedTypes: ['literal', 'expression', 'reference'],
251
+ svoPosition: 2,
252
+ sovPosition: 2,
253
+ markerOverride: {
254
+ en: 'to',
255
+ ja: 'に',
256
+ es: 'a',
257
+ ar: 'إلى',
258
+ zh: '到',
259
+ ko: '으로',
260
+ fr: 'à',
261
+ tr: 'e',
262
+ de: 'auf',
263
+ pt: 'para',
264
+ },
265
+ }),
266
+ ],
267
+ });
268
+
269
+ // =============================================================================
270
+ // show — transitive: patient only
271
+ // =============================================================================
272
+
273
+ export const showSchema = defineCommand({
274
+ action: 'show',
275
+ description: 'Show an element',
276
+ category: 'visibility',
277
+ primaryRole: 'patient',
278
+ roles: [
279
+ defineRole({
280
+ role: 'patient',
281
+ description: 'The element to show',
282
+ required: true,
283
+ expectedTypes: ['selector', 'reference', 'expression'],
284
+ svoPosition: 2,
285
+ sovPosition: 1,
286
+ markerOverride: PATIENT,
287
+ }),
288
+ ],
289
+ });
290
+
291
+ // =============================================================================
292
+ // hide — transitive: patient only
293
+ // =============================================================================
294
+
295
+ export const hideSchema = defineCommand({
296
+ action: 'hide',
297
+ description: 'Hide an element',
298
+ category: 'visibility',
299
+ primaryRole: 'patient',
300
+ roles: [
301
+ defineRole({
302
+ role: 'patient',
303
+ description: 'The element to hide',
304
+ required: true,
305
+ expectedTypes: ['selector', 'reference', 'expression'],
306
+ svoPosition: 2,
307
+ sovPosition: 1,
308
+ markerOverride: PATIENT,
309
+ }),
310
+ ],
311
+ });
312
+
313
+ // =============================================================================
314
+ // get — transitive: source (what to get)
315
+ // Note: get has no patient; source is the primary role
316
+ // =============================================================================
317
+
318
+ export const getSchema = defineCommand({
319
+ action: 'get',
320
+ description: 'Get a value from an element or property',
321
+ category: 'variable',
322
+ primaryRole: 'source',
323
+ roles: [
324
+ defineRole({
325
+ role: 'source',
326
+ description: 'The value to get',
327
+ required: true,
328
+ expectedTypes: ['selector', 'reference', 'expression'],
329
+ svoPosition: 2,
330
+ sovPosition: 1,
331
+ markerOverride: {
332
+ en: '',
333
+ ja: 'を',
334
+ es: '',
335
+ ar: '',
336
+ zh: '',
337
+ ko: '를',
338
+ fr: '',
339
+ tr: '',
340
+ de: '',
341
+ pt: '',
342
+ },
343
+ }),
344
+ ],
345
+ });
346
+
347
+ // =============================================================================
348
+ // wait — transitive: patient (duration or event)
349
+ // =============================================================================
350
+
351
+ export const waitSchema = defineCommand({
352
+ action: 'wait',
353
+ description: 'Wait for a duration or event',
354
+ category: 'async',
355
+ primaryRole: 'patient',
356
+ roles: [
357
+ defineRole({
358
+ role: 'patient',
359
+ description: 'Duration or event to wait for',
360
+ required: true,
361
+ expectedTypes: ['literal', 'expression'],
362
+ svoPosition: 2,
363
+ sovPosition: 1,
364
+ markerOverride: PATIENT,
365
+ }),
366
+ ],
367
+ });
368
+
369
+ // =============================================================================
370
+ // fetch — transitive: source (URL)
371
+ // Simplified for learning: just source role (URL to fetch)
372
+ // =============================================================================
373
+
374
+ export const fetchSchema = defineCommand({
375
+ action: 'fetch',
376
+ description: 'Fetch data from a URL',
377
+ category: 'async',
378
+ primaryRole: 'source',
379
+ roles: [
380
+ defineRole({
381
+ role: 'source',
382
+ description: 'The URL to fetch from',
383
+ required: true,
384
+ expectedTypes: ['literal', 'expression'],
385
+ svoPosition: 2,
386
+ sovPosition: 1,
387
+ // renderOverride in semantic has en: '' — no preposition in rendered output
388
+ markerOverride: {
389
+ en: '',
390
+ ja: 'を',
391
+ es: '',
392
+ ar: '',
393
+ zh: '',
394
+ ko: '를',
395
+ fr: '',
396
+ tr: '',
397
+ de: '',
398
+ pt: '',
399
+ },
400
+ }),
401
+ ],
402
+ });
403
+
404
+ // =============================================================================
405
+ // send — ditransitive: event (patient-like) + destination
406
+ // Note: send's patient-equivalent is the 'event' role
407
+ // =============================================================================
408
+
409
+ export const sendSchema = defineCommand({
410
+ action: 'send',
411
+ description: 'Send an event to an element',
412
+ category: 'event',
413
+ primaryRole: 'patient',
414
+ roles: [
415
+ defineRole({
416
+ role: 'patient',
417
+ description: 'The event to send',
418
+ required: true,
419
+ expectedTypes: ['literal', 'expression'],
420
+ svoPosition: 3,
421
+ sovPosition: 1,
422
+ markerOverride: PATIENT,
423
+ }),
424
+ defineRole({
425
+ role: 'destination',
426
+ description: 'The target element',
427
+ required: false,
428
+ expectedTypes: ['selector', 'reference', 'expression'],
429
+ svoPosition: 2,
430
+ sovPosition: 2,
431
+ markerOverride: {
432
+ en: 'to',
433
+ ja: 'に',
434
+ es: 'a',
435
+ ar: 'إلى',
436
+ zh: '到',
437
+ ko: '에게',
438
+ fr: 'à',
439
+ tr: '-e',
440
+ de: 'an',
441
+ pt: 'para',
442
+ },
443
+ }),
444
+ ],
445
+ });
446
+
447
+ // =============================================================================
448
+ // go — transitive: destination only (no patient)
449
+ // =============================================================================
450
+
451
+ export const goSchema = defineCommand({
452
+ action: 'go',
453
+ description: 'Navigate to a URL',
454
+ category: 'navigation',
455
+ primaryRole: 'destination',
456
+ roles: [
457
+ defineRole({
458
+ role: 'destination',
459
+ description: 'The URL to navigate to',
460
+ required: true,
461
+ expectedTypes: ['literal', 'expression'],
462
+ svoPosition: 2,
463
+ sovPosition: 1,
464
+ // renderOverride en: '' means no preposition in rendered sentences
465
+ markerOverride: {
466
+ en: '',
467
+ ja: '',
468
+ es: 'a',
469
+ ar: 'إلى',
470
+ zh: '',
471
+ ko: '에',
472
+ fr: 'à',
473
+ tr: 'a',
474
+ de: 'zu',
475
+ pt: 'para',
476
+ },
477
+ }),
478
+ ],
479
+ });
480
+
481
+ // =============================================================================
482
+ // increment — transitive: patient
483
+ // =============================================================================
484
+
485
+ export const incrementSchema = defineCommand({
486
+ action: 'increment',
487
+ description: 'Increment a counter or value',
488
+ category: 'variable',
489
+ primaryRole: 'patient',
490
+ roles: [
491
+ defineRole({
492
+ role: 'patient',
493
+ description: 'The value to increment',
494
+ required: true,
495
+ expectedTypes: ['selector', 'reference', 'expression'],
496
+ svoPosition: 2,
497
+ sovPosition: 1,
498
+ markerOverride: PATIENT,
499
+ }),
500
+ ],
501
+ });
502
+
503
+ // =============================================================================
504
+ // decrement — transitive: patient
505
+ // =============================================================================
506
+
507
+ export const decrementSchema = defineCommand({
508
+ action: 'decrement',
509
+ description: 'Decrement a counter or value',
510
+ category: 'variable',
511
+ primaryRole: 'patient',
512
+ roles: [
513
+ defineRole({
514
+ role: 'patient',
515
+ description: 'The value to decrement',
516
+ required: true,
517
+ expectedTypes: ['selector', 'reference', 'expression'],
518
+ svoPosition: 2,
519
+ sovPosition: 1,
520
+ markerOverride: PATIENT,
521
+ }),
522
+ ],
523
+ });
524
+
525
+ // =============================================================================
526
+ // take — ditransitive: patient + source (from)
527
+ // =============================================================================
528
+
529
+ export const takeSchema = defineCommand({
530
+ action: 'take',
531
+ description: 'Take a class or element from a source',
532
+ category: 'mutation',
533
+ primaryRole: 'patient',
534
+ roles: [
535
+ defineRole({
536
+ role: 'patient',
537
+ description: 'The class or element to take',
538
+ required: true,
539
+ expectedTypes: ['selector', 'expression'],
540
+ svoPosition: 3,
541
+ sovPosition: 1,
542
+ markerOverride: PATIENT,
543
+ }),
544
+ defineRole({
545
+ role: 'source',
546
+ description: 'The element to take from',
547
+ required: false,
548
+ expectedTypes: ['selector', 'reference', 'expression'],
549
+ svoPosition: 2,
550
+ sovPosition: 2,
551
+ markerOverride: SOURCE_FROM,
552
+ }),
553
+ ],
554
+ });
555
+
556
+ // =============================================================================
557
+ // All Schemas
558
+ // =============================================================================
559
+
560
+ export const allSchemas = [
561
+ addSchema,
562
+ removeSchema,
563
+ toggleSchema,
564
+ putSchema,
565
+ setSchema,
566
+ showSchema,
567
+ hideSchema,
568
+ getSchema,
569
+ waitSchema,
570
+ fetchSchema,
571
+ sendSchema,
572
+ goSchema,
573
+ incrementSchema,
574
+ decrementSchema,
575
+ takeSchema,
576
+ ];