marlarky 1.0.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.
- package/README.md +489 -0
- package/dist/adapters/faker-js-adapter.d.ts +44 -0
- package/dist/adapters/faker-js-adapter.d.ts.map +1 -0
- package/dist/adapters/faker-js-adapter.js +46 -0
- package/dist/adapters/faker-js-adapter.js.map +1 -0
- package/dist/adapters/index.d.ts +3 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/index.js +3 -0
- package/dist/adapters/index.js.map +1 -0
- package/dist/adapters/simple-faker-adapter.d.ts +22 -0
- package/dist/adapters/simple-faker-adapter.d.ts.map +1 -0
- package/dist/adapters/simple-faker-adapter.js +54 -0
- package/dist/adapters/simple-faker-adapter.js.map +1 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +588 -0
- package/dist/cli.js.map +1 -0
- package/dist/defaults/index.d.ts +2 -0
- package/dist/defaults/index.d.ts.map +1 -0
- package/dist/defaults/index.js +2 -0
- package/dist/defaults/index.js.map +1 -0
- package/dist/defaults/word-lists.d.ts +22 -0
- package/dist/defaults/word-lists.d.ts.map +1 -0
- package/dist/defaults/word-lists.js +124 -0
- package/dist/defaults/word-lists.js.map +1 -0
- package/dist/generator/index.d.ts +2 -0
- package/dist/generator/index.d.ts.map +1 -0
- package/dist/generator/index.js +2 -0
- package/dist/generator/index.js.map +1 -0
- package/dist/generator/text-generator.d.ts +93 -0
- package/dist/generator/text-generator.d.ts.map +1 -0
- package/dist/generator/text-generator.js +411 -0
- package/dist/generator/text-generator.js.map +1 -0
- package/dist/generator/text-generator.test.d.ts +2 -0
- package/dist/generator/text-generator.test.d.ts.map +1 -0
- package/dist/generator/text-generator.test.js +151 -0
- package/dist/generator/text-generator.test.js.map +1 -0
- package/dist/grammar/index.d.ts +5 -0
- package/dist/grammar/index.d.ts.map +1 -0
- package/dist/grammar/index.js +3 -0
- package/dist/grammar/index.js.map +1 -0
- package/dist/grammar/phrase-builders.d.ts +72 -0
- package/dist/grammar/phrase-builders.d.ts.map +1 -0
- package/dist/grammar/phrase-builders.js +241 -0
- package/dist/grammar/phrase-builders.js.map +1 -0
- package/dist/grammar/sentence-templates.d.ts +67 -0
- package/dist/grammar/sentence-templates.d.ts.map +1 -0
- package/dist/grammar/sentence-templates.js +272 -0
- package/dist/grammar/sentence-templates.js.map +1 -0
- package/dist/index.d.ts +17 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/interfaces/faker-adapter.d.ts +25 -0
- package/dist/interfaces/faker-adapter.d.ts.map +1 -0
- package/dist/interfaces/faker-adapter.js +2 -0
- package/dist/interfaces/faker-adapter.js.map +1 -0
- package/dist/interfaces/index.d.ts +4 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/interfaces/index.js +2 -0
- package/dist/interfaces/index.js.map +1 -0
- package/dist/interfaces/lexicon-store.d.ts +39 -0
- package/dist/interfaces/lexicon-store.d.ts.map +1 -0
- package/dist/interfaces/lexicon-store.js +2 -0
- package/dist/interfaces/lexicon-store.js.map +1 -0
- package/dist/interfaces/rng.d.ts +25 -0
- package/dist/interfaces/rng.d.ts.map +1 -0
- package/dist/interfaces/rng.js +2 -0
- package/dist/interfaces/rng.js.map +1 -0
- package/dist/lexicon/index.d.ts +4 -0
- package/dist/lexicon/index.d.ts.map +1 -0
- package/dist/lexicon/index.js +4 -0
- package/dist/lexicon/index.js.map +1 -0
- package/dist/lexicon/loader.d.ts +24 -0
- package/dist/lexicon/loader.d.ts.map +1 -0
- package/dist/lexicon/loader.js +47 -0
- package/dist/lexicon/loader.js.map +1 -0
- package/dist/lexicon/store.d.ts +39 -0
- package/dist/lexicon/store.d.ts.map +1 -0
- package/dist/lexicon/store.js +291 -0
- package/dist/lexicon/store.js.map +1 -0
- package/dist/lexicon/validator.d.ts +10 -0
- package/dist/lexicon/validator.d.ts.map +1 -0
- package/dist/lexicon/validator.js +273 -0
- package/dist/lexicon/validator.js.map +1 -0
- package/dist/morphology/articles.d.ts +17 -0
- package/dist/morphology/articles.d.ts.map +1 -0
- package/dist/morphology/articles.js +66 -0
- package/dist/morphology/articles.js.map +1 -0
- package/dist/morphology/articles.test.d.ts +2 -0
- package/dist/morphology/articles.test.d.ts.map +1 -0
- package/dist/morphology/articles.test.js +56 -0
- package/dist/morphology/articles.test.js.map +1 -0
- package/dist/morphology/conjugate.d.ts +46 -0
- package/dist/morphology/conjugate.d.ts.map +1 -0
- package/dist/morphology/conjugate.js +337 -0
- package/dist/morphology/conjugate.js.map +1 -0
- package/dist/morphology/conjugate.test.d.ts +2 -0
- package/dist/morphology/conjugate.test.d.ts.map +1 -0
- package/dist/morphology/conjugate.test.js +168 -0
- package/dist/morphology/conjugate.test.js.map +1 -0
- package/dist/morphology/index.d.ts +6 -0
- package/dist/morphology/index.d.ts.map +1 -0
- package/dist/morphology/index.js +9 -0
- package/dist/morphology/index.js.map +1 -0
- package/dist/morphology/normalize.d.ts +52 -0
- package/dist/morphology/normalize.d.ts.map +1 -0
- package/dist/morphology/normalize.js +127 -0
- package/dist/morphology/normalize.js.map +1 -0
- package/dist/morphology/pluralize.d.ts +17 -0
- package/dist/morphology/pluralize.d.ts.map +1 -0
- package/dist/morphology/pluralize.js +186 -0
- package/dist/morphology/pluralize.js.map +1 -0
- package/dist/morphology/pluralize.test.d.ts +2 -0
- package/dist/morphology/pluralize.test.d.ts.map +1 -0
- package/dist/morphology/pluralize.test.js +86 -0
- package/dist/morphology/pluralize.test.js.map +1 -0
- package/dist/providers/index.d.ts +2 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +2 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/word-provider.d.ts +125 -0
- package/dist/providers/word-provider.d.ts.map +1 -0
- package/dist/providers/word-provider.js +266 -0
- package/dist/providers/word-provider.js.map +1 -0
- package/dist/rng/index.d.ts +2 -0
- package/dist/rng/index.d.ts.map +1 -0
- package/dist/rng/index.js +2 -0
- package/dist/rng/index.js.map +1 -0
- package/dist/rng/seedable-rng.d.ts +19 -0
- package/dist/rng/seedable-rng.d.ts.map +1 -0
- package/dist/rng/seedable-rng.js +77 -0
- package/dist/rng/seedable-rng.js.map +1 -0
- package/dist/rng/seedable-rng.test.d.ts +2 -0
- package/dist/rng/seedable-rng.test.d.ts.map +1 -0
- package/dist/rng/seedable-rng.test.js +165 -0
- package/dist/rng/seedable-rng.test.js.map +1 -0
- package/dist/rules/index.d.ts +3 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +2 -0
- package/dist/rules/index.js.map +1 -0
- package/dist/rules/rule-engine.d.ts +78 -0
- package/dist/rules/rule-engine.d.ts.map +1 -0
- package/dist/rules/rule-engine.js +271 -0
- package/dist/rules/rule-engine.js.map +1 -0
- package/dist/transforms/config-merge.d.ts +19 -0
- package/dist/transforms/config-merge.d.ts.map +1 -0
- package/dist/transforms/config-merge.js +88 -0
- package/dist/transforms/config-merge.js.map +1 -0
- package/dist/transforms/config-merge.test.d.ts +2 -0
- package/dist/transforms/config-merge.test.d.ts.map +1 -0
- package/dist/transforms/config-merge.test.js +91 -0
- package/dist/transforms/config-merge.test.js.map +1 -0
- package/dist/transforms/default-registry.d.ts +10 -0
- package/dist/transforms/default-registry.d.ts.map +1 -0
- package/dist/transforms/default-registry.js +17 -0
- package/dist/transforms/default-registry.js.map +1 -0
- package/dist/transforms/index.d.ts +15 -0
- package/dist/transforms/index.d.ts.map +1 -0
- package/dist/transforms/index.js +20 -0
- package/dist/transforms/index.js.map +1 -0
- package/dist/transforms/pipeline.d.ts +28 -0
- package/dist/transforms/pipeline.d.ts.map +1 -0
- package/dist/transforms/pipeline.js +176 -0
- package/dist/transforms/pipeline.js.map +1 -0
- package/dist/transforms/pipeline.test.d.ts +2 -0
- package/dist/transforms/pipeline.test.d.ts.map +1 -0
- package/dist/transforms/pipeline.test.js +175 -0
- package/dist/transforms/pipeline.test.js.map +1 -0
- package/dist/transforms/protection.d.ts +16 -0
- package/dist/transforms/protection.d.ts.map +1 -0
- package/dist/transforms/protection.js +97 -0
- package/dist/transforms/protection.js.map +1 -0
- package/dist/transforms/protection.test.d.ts +2 -0
- package/dist/transforms/protection.test.d.ts.map +1 -0
- package/dist/transforms/protection.test.js +79 -0
- package/dist/transforms/protection.test.js.map +1 -0
- package/dist/transforms/registry.d.ts +25 -0
- package/dist/transforms/registry.d.ts.map +1 -0
- package/dist/transforms/registry.js +32 -0
- package/dist/transforms/registry.js.map +1 -0
- package/dist/transforms/registry.test.d.ts +2 -0
- package/dist/transforms/registry.test.d.ts.map +1 -0
- package/dist/transforms/registry.test.js +64 -0
- package/dist/transforms/registry.test.js.map +1 -0
- package/dist/transforms/tokenizer.d.ts +26 -0
- package/dist/transforms/tokenizer.d.ts.map +1 -0
- package/dist/transforms/tokenizer.js +137 -0
- package/dist/transforms/tokenizer.js.map +1 -0
- package/dist/transforms/tokenizer.test.d.ts +2 -0
- package/dist/transforms/tokenizer.test.d.ts.map +1 -0
- package/dist/transforms/tokenizer.test.js +85 -0
- package/dist/transforms/tokenizer.test.js.map +1 -0
- package/dist/transforms/transforms/biz-jargon.d.ts +7 -0
- package/dist/transforms/transforms/biz-jargon.d.ts.map +1 -0
- package/dist/transforms/transforms/biz-jargon.js +117 -0
- package/dist/transforms/transforms/biz-jargon.js.map +1 -0
- package/dist/transforms/transforms/emoji.d.ts +7 -0
- package/dist/transforms/transforms/emoji.d.ts.map +1 -0
- package/dist/transforms/transforms/emoji.js +127 -0
- package/dist/transforms/transforms/emoji.js.map +1 -0
- package/dist/transforms/transforms/index.d.ts +17 -0
- package/dist/transforms/transforms/index.d.ts.map +1 -0
- package/dist/transforms/transforms/index.js +37 -0
- package/dist/transforms/transforms/index.js.map +1 -0
- package/dist/transforms/transforms/leet.d.ts +7 -0
- package/dist/transforms/transforms/leet.d.ts.map +1 -0
- package/dist/transforms/transforms/leet.js +109 -0
- package/dist/transforms/transforms/leet.js.map +1 -0
- package/dist/transforms/transforms/mock-case.d.ts +7 -0
- package/dist/transforms/transforms/mock-case.d.ts.map +1 -0
- package/dist/transforms/transforms/mock-case.js +116 -0
- package/dist/transforms/transforms/mock-case.js.map +1 -0
- package/dist/transforms/transforms/pig-latin.d.ts +7 -0
- package/dist/transforms/transforms/pig-latin.d.ts.map +1 -0
- package/dist/transforms/transforms/pig-latin.js +132 -0
- package/dist/transforms/transforms/pig-latin.js.map +1 -0
- package/dist/transforms/transforms/pig-latin.test.d.ts +2 -0
- package/dist/transforms/transforms/pig-latin.test.d.ts.map +1 -0
- package/dist/transforms/transforms/pig-latin.test.js +77 -0
- package/dist/transforms/transforms/pig-latin.test.js.map +1 -0
- package/dist/transforms/transforms/pirate.d.ts +7 -0
- package/dist/transforms/transforms/pirate.d.ts.map +1 -0
- package/dist/transforms/transforms/pirate.js +150 -0
- package/dist/transforms/transforms/pirate.js.map +1 -0
- package/dist/transforms/transforms/redact.d.ts +7 -0
- package/dist/transforms/transforms/redact.d.ts.map +1 -0
- package/dist/transforms/transforms/redact.js +109 -0
- package/dist/transforms/transforms/redact.js.map +1 -0
- package/dist/transforms/transforms/reverse-words.d.ts +7 -0
- package/dist/transforms/transforms/reverse-words.d.ts.map +1 -0
- package/dist/transforms/transforms/reverse-words.js +88 -0
- package/dist/transforms/transforms/reverse-words.js.map +1 -0
- package/dist/transforms/transforms/transforms.test.d.ts +11 -0
- package/dist/transforms/transforms/transforms.test.d.ts.map +1 -0
- package/dist/transforms/transforms/transforms.test.js +489 -0
- package/dist/transforms/transforms/transforms.test.js.map +1 -0
- package/dist/transforms/transforms/ubbi-dubbi.d.ts +7 -0
- package/dist/transforms/transforms/ubbi-dubbi.d.ts.map +1 -0
- package/dist/transforms/transforms/ubbi-dubbi.js +120 -0
- package/dist/transforms/transforms/ubbi-dubbi.js.map +1 -0
- package/dist/transforms/transforms/uwu.d.ts +7 -0
- package/dist/transforms/transforms/uwu.d.ts.map +1 -0
- package/dist/transforms/transforms/uwu.js +106 -0
- package/dist/transforms/transforms/uwu.js.map +1 -0
- package/dist/transforms/types.d.ts +159 -0
- package/dist/transforms/types.d.ts.map +1 -0
- package/dist/transforms/types.js +22 -0
- package/dist/transforms/types.js.map +1 -0
- package/dist/types/api.d.ts +158 -0
- package/dist/types/api.d.ts.map +1 -0
- package/dist/types/api.js +6 -0
- package/dist/types/api.js.map +1 -0
- package/dist/types/config.d.ts +86 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +66 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/context.d.ts +74 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +83 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/lexicon.d.ts +247 -0
- package/dist/types/lexicon.d.ts.map +1 -0
- package/dist/types/lexicon.js +6 -0
- package/dist/types/lexicon.js.map +1 -0
- package/examples/basic-usage.ts +48 -0
- package/examples/corporate-lexicon.ts +71 -0
- package/examples/lexicons/corporate-min.json +200 -0
- package/examples/with-tracing.ts +85 -0
- package/package.json +70 -0
|
@@ -0,0 +1,272 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sentence Templates
|
|
3
|
+
* Defines and builds various sentence structures
|
|
4
|
+
*/
|
|
5
|
+
import { joinTokens, formatSentence } from '../morphology/index.js';
|
|
6
|
+
export class SentenceTemplates {
|
|
7
|
+
phraseBuilders;
|
|
8
|
+
rng;
|
|
9
|
+
config;
|
|
10
|
+
constructor(phraseBuilders, rng, config) {
|
|
11
|
+
this.phraseBuilders = phraseBuilders;
|
|
12
|
+
this.rng = rng;
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Select a sentence type based on weights
|
|
17
|
+
*/
|
|
18
|
+
selectSentenceType() {
|
|
19
|
+
const weights = this.config.sentenceTypeWeights;
|
|
20
|
+
const total = weights.simpleDeclarative +
|
|
21
|
+
weights.compound +
|
|
22
|
+
weights.introAdverbial +
|
|
23
|
+
weights.subordinate +
|
|
24
|
+
weights.interjection +
|
|
25
|
+
weights.question;
|
|
26
|
+
const rand = this.rng.float() * total;
|
|
27
|
+
let cumulative = 0;
|
|
28
|
+
cumulative += weights.simpleDeclarative;
|
|
29
|
+
if (rand < cumulative)
|
|
30
|
+
return 'simpleDeclarative';
|
|
31
|
+
cumulative += weights.compound;
|
|
32
|
+
if (rand < cumulative)
|
|
33
|
+
return 'compound';
|
|
34
|
+
cumulative += weights.introAdverbial;
|
|
35
|
+
if (rand < cumulative)
|
|
36
|
+
return 'introAdverbial';
|
|
37
|
+
cumulative += weights.subordinate;
|
|
38
|
+
if (rand < cumulative)
|
|
39
|
+
return 'subordinate';
|
|
40
|
+
cumulative += weights.interjection;
|
|
41
|
+
if (rand < cumulative)
|
|
42
|
+
return 'interjection';
|
|
43
|
+
return 'question';
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Build a sentence of the given type
|
|
47
|
+
*/
|
|
48
|
+
buildSentence(ctx, type) {
|
|
49
|
+
const sentenceType = type ?? this.selectSentenceType();
|
|
50
|
+
switch (sentenceType) {
|
|
51
|
+
case 'simpleDeclarative':
|
|
52
|
+
return this.buildSimpleDeclarative(ctx);
|
|
53
|
+
case 'compound':
|
|
54
|
+
return this.buildCompound(ctx);
|
|
55
|
+
case 'introAdverbial':
|
|
56
|
+
return this.buildIntroAdverbial(ctx);
|
|
57
|
+
case 'subordinate':
|
|
58
|
+
return this.buildSubordinate(ctx);
|
|
59
|
+
case 'interjection':
|
|
60
|
+
return this.buildInterjection(ctx);
|
|
61
|
+
case 'question':
|
|
62
|
+
return this.buildQuestion(ctx);
|
|
63
|
+
default:
|
|
64
|
+
return this.buildSimpleDeclarative(ctx);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Simple declarative: NP VP
|
|
69
|
+
* "The system processes data."
|
|
70
|
+
*/
|
|
71
|
+
buildSimpleDeclarative(ctx) {
|
|
72
|
+
const clause = this.phraseBuilders.buildClause(ctx, {
|
|
73
|
+
tense: this.rng.pick(['present', 'past']),
|
|
74
|
+
usePronoun: this.rng.chance(0.3),
|
|
75
|
+
});
|
|
76
|
+
const text = formatSentence(joinTokens(clause.tokens));
|
|
77
|
+
return {
|
|
78
|
+
text,
|
|
79
|
+
type: 'simpleDeclarative',
|
|
80
|
+
tokens: clause.tokens,
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Compound: CLAUSE, CONJ CLAUSE
|
|
85
|
+
* "The team works hard, and the project succeeds."
|
|
86
|
+
*/
|
|
87
|
+
buildCompound(ctx) {
|
|
88
|
+
const tense = this.rng.pick(['present', 'past']);
|
|
89
|
+
const clause1 = this.phraseBuilders.buildClause(ctx, { tense });
|
|
90
|
+
const conjunction = this.rng.pick(this.config.coordinators);
|
|
91
|
+
const clause2 = this.phraseBuilders.buildClause(ctx, { tense });
|
|
92
|
+
const tokens = [...clause1.tokens, ',', conjunction, ...clause2.tokens];
|
|
93
|
+
const text = formatSentence(joinTokens(tokens));
|
|
94
|
+
return {
|
|
95
|
+
text,
|
|
96
|
+
type: 'compound',
|
|
97
|
+
tokens,
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
/**
|
|
101
|
+
* Intro adverbial: ADVP/PP, CLAUSE
|
|
102
|
+
* "Generally, the system performs well."
|
|
103
|
+
* "In most cases, the results are positive."
|
|
104
|
+
*/
|
|
105
|
+
buildIntroAdverbial(ctx) {
|
|
106
|
+
const tokens = [];
|
|
107
|
+
// Choose between transition word or PP
|
|
108
|
+
if (this.rng.chance(0.6)) {
|
|
109
|
+
const transition = this.rng.pick(this.config.transitions);
|
|
110
|
+
tokens.push(transition);
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
const pp = this.phraseBuilders.buildPP(ctx);
|
|
114
|
+
tokens.push(...pp.tokens);
|
|
115
|
+
}
|
|
116
|
+
tokens.push(',');
|
|
117
|
+
const clause = this.phraseBuilders.buildClause(ctx, {
|
|
118
|
+
tense: this.rng.pick(['present', 'past']),
|
|
119
|
+
});
|
|
120
|
+
tokens.push(...clause.tokens);
|
|
121
|
+
const text = formatSentence(joinTokens(tokens));
|
|
122
|
+
return {
|
|
123
|
+
text,
|
|
124
|
+
type: 'introAdverbial',
|
|
125
|
+
tokens,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Subordinate: SUBCLAUSE, CLAUSE or CLAUSE SUBCLAUSE
|
|
130
|
+
* "Because the data is accurate, the results are reliable."
|
|
131
|
+
* "The system works well when conditions are optimal."
|
|
132
|
+
*/
|
|
133
|
+
buildSubordinate(ctx) {
|
|
134
|
+
const tokens = [];
|
|
135
|
+
const subClause = this.phraseBuilders.buildSubordinateClause(ctx);
|
|
136
|
+
const mainClause = this.phraseBuilders.buildClause(ctx, {
|
|
137
|
+
tense: this.rng.pick(['present', 'past']),
|
|
138
|
+
});
|
|
139
|
+
// Subordinate clause first or last
|
|
140
|
+
if (this.rng.chance(0.5)) {
|
|
141
|
+
// Subordinate first
|
|
142
|
+
tokens.push(...subClause.tokens, ',', ...mainClause.tokens);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
// Main clause first
|
|
146
|
+
tokens.push(...mainClause.tokens, ...subClause.tokens);
|
|
147
|
+
}
|
|
148
|
+
const text = formatSentence(joinTokens(tokens));
|
|
149
|
+
return {
|
|
150
|
+
text,
|
|
151
|
+
type: 'subordinate',
|
|
152
|
+
tokens,
|
|
153
|
+
};
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Interjection: INTJ, CLAUSE
|
|
157
|
+
* "Indeed, the approach is effective."
|
|
158
|
+
*/
|
|
159
|
+
buildInterjection(ctx) {
|
|
160
|
+
const tokens = [];
|
|
161
|
+
const interjection = this.rng.pick(this.config.interjections);
|
|
162
|
+
tokens.push(interjection, ',');
|
|
163
|
+
const clause = this.phraseBuilders.buildClause(ctx, {
|
|
164
|
+
tense: 'present',
|
|
165
|
+
});
|
|
166
|
+
tokens.push(...clause.tokens);
|
|
167
|
+
const text = formatSentence(joinTokens(tokens));
|
|
168
|
+
return {
|
|
169
|
+
text,
|
|
170
|
+
type: 'interjection',
|
|
171
|
+
tokens,
|
|
172
|
+
};
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Question: Do/Does/Did NP VP? or WH NP VP?
|
|
176
|
+
* "Does the system work efficiently?"
|
|
177
|
+
* "What makes the process effective?"
|
|
178
|
+
*/
|
|
179
|
+
buildQuestion(ctx) {
|
|
180
|
+
const tokens = [];
|
|
181
|
+
// Choose between yes/no question or wh-question
|
|
182
|
+
if (this.rng.chance(0.6)) {
|
|
183
|
+
// Yes/no question with do-support
|
|
184
|
+
const subject = this.phraseBuilders.buildNP(ctx, {
|
|
185
|
+
usePronoun: this.rng.chance(0.4),
|
|
186
|
+
includePP: false,
|
|
187
|
+
});
|
|
188
|
+
// Select do/does/did based on subject and tense
|
|
189
|
+
const isPast = this.rng.chance(0.3);
|
|
190
|
+
let doAux;
|
|
191
|
+
if (isPast) {
|
|
192
|
+
doAux = 'did';
|
|
193
|
+
}
|
|
194
|
+
else if (subject.features.number === 'singular' && subject.features.person === 3) {
|
|
195
|
+
doAux = 'does';
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
doAux = 'do';
|
|
199
|
+
}
|
|
200
|
+
tokens.push(doAux);
|
|
201
|
+
tokens.push(...subject.tokens);
|
|
202
|
+
// VP in base form (after do-support)
|
|
203
|
+
const vp = this.phraseBuilders.buildVP(ctx, subject.features, {
|
|
204
|
+
includeObject: true,
|
|
205
|
+
tense: 'present', // Base form after do-support
|
|
206
|
+
});
|
|
207
|
+
// Remove any conjugated form (the VP might have conjugated it)
|
|
208
|
+
tokens.push(...vp.tokens);
|
|
209
|
+
}
|
|
210
|
+
else {
|
|
211
|
+
// Wh-question
|
|
212
|
+
const whWord = this.rng.pick(['what', 'how', 'why', 'when', 'where']);
|
|
213
|
+
tokens.push(whWord);
|
|
214
|
+
if (whWord === 'what' || whWord === 'how') {
|
|
215
|
+
// "What makes X work?" or "How does X work?"
|
|
216
|
+
if (this.rng.chance(0.5)) {
|
|
217
|
+
// "What + VP"
|
|
218
|
+
const vp = this.phraseBuilders.buildVP(ctx, { number: 'singular', person: 3 }, {
|
|
219
|
+
includeObject: true,
|
|
220
|
+
});
|
|
221
|
+
tokens.push(...vp.tokens);
|
|
222
|
+
}
|
|
223
|
+
else {
|
|
224
|
+
// "How does NP VP"
|
|
225
|
+
const subject = this.phraseBuilders.buildNP(ctx, { includePP: false });
|
|
226
|
+
const doAux = subject.features.number === 'singular' && subject.features.person === 3 ? 'does' : 'do';
|
|
227
|
+
tokens.push(doAux);
|
|
228
|
+
tokens.push(...subject.tokens);
|
|
229
|
+
const vp = this.phraseBuilders.buildVP(ctx, subject.features, { includeObject: false });
|
|
230
|
+
tokens.push(...vp.tokens);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
// "Why/When/Where does NP VP"
|
|
235
|
+
const subject = this.phraseBuilders.buildNP(ctx, { includePP: false });
|
|
236
|
+
const doAux = subject.features.number === 'singular' && subject.features.person === 3 ? 'does' : 'do';
|
|
237
|
+
tokens.push(doAux);
|
|
238
|
+
tokens.push(...subject.tokens);
|
|
239
|
+
const vp = this.phraseBuilders.buildVP(ctx, subject.features, { includeObject: true });
|
|
240
|
+
tokens.push(...vp.tokens);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const text = formatSentence(joinTokens(tokens), '?');
|
|
244
|
+
return {
|
|
245
|
+
text,
|
|
246
|
+
type: 'question',
|
|
247
|
+
tokens,
|
|
248
|
+
};
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Build a sentence with a relative clause
|
|
252
|
+
* "The system that processes data is efficient."
|
|
253
|
+
*/
|
|
254
|
+
buildWithRelativeClause(ctx) {
|
|
255
|
+
// Build subject NP
|
|
256
|
+
const subject = this.phraseBuilders.buildNP(ctx, { includePP: false });
|
|
257
|
+
// Build relative clause
|
|
258
|
+
const relClause = this.phraseBuilders.buildRelativeClause(ctx, subject.features);
|
|
259
|
+
// Build main VP
|
|
260
|
+
const vp = this.phraseBuilders.buildVP(ctx, subject.features, {
|
|
261
|
+
includeObject: false,
|
|
262
|
+
});
|
|
263
|
+
const tokens = [...subject.tokens, ...relClause.tokens, ...vp.tokens];
|
|
264
|
+
const text = formatSentence(joinTokens(tokens));
|
|
265
|
+
return {
|
|
266
|
+
text,
|
|
267
|
+
type: 'simpleDeclarative', // Classify as declarative
|
|
268
|
+
tokens,
|
|
269
|
+
};
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
//# sourceMappingURL=sentence-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sentence-templates.js","sourceRoot":"","sources":["../../src/grammar/sentence-templates.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSETG - Lexicon-Steered English Syntax Text Generator
|
|
3
|
+
* A faker-like library for generating syntactically plausible English text
|
|
4
|
+
*/
|
|
5
|
+
export { TextGenerator } from './generator/index.js';
|
|
6
|
+
export { FakerJsAdapter, SimpleFakerAdapter } from './adapters/index.js';
|
|
7
|
+
export { LexiconStore, validateLexicon, loadLexiconFromString, loadLexiconFromObject, tryLoadLexicon } from './lexicon/index.js';
|
|
8
|
+
export { SeedableRng } from './rng/index.js';
|
|
9
|
+
export { useAn, getIndefiniteArticle, withIndefiniteArticle, pluralize, singularize, isPlural, getPastTense, getPastParticiple, getPresentParticiple, getThirdPersonSingular, conjugateBe, conjugateHave, conjugateDo, conjugate, normalizeWhitespace, capitalize, capitalizeSentences, ensureEndPunctuation, isCapitalized, endsWithPunctuation, hasNoDoubleSpaces, joinTokens, formatSentence, formatParagraph, formatTextBlock, } from './morphology/index.js';
|
|
10
|
+
export { tokenize, render, classifyChar, applyProtection, isProtected, TransformRegistry, createDefaultRegistry, executePipeline, checkPipelineOrder, mergeOutputTransformsConfig, mergeProtectionConfig, DEFAULT_PROTECTION_CONFIG, DEFAULT_OUTPUT_TRANSFORMS_CONFIG, pigLatinTransform, ubbiDubbiTransform, leetTransform, uwuTransform, pirateTransform, redactTransform, emojiTransform, mockCaseTransform, reverseWordsTransform, bizJargonTransform, V1_TRANSFORMS, } from './transforms/index.js';
|
|
11
|
+
export type { IRng, WeightedItem, IFakerAdapter, ILexiconStore, } from './interfaces/index.js';
|
|
12
|
+
export type { Lexicon, TermSet, Term, TermFeatures, LexicalItem, Pattern, DistributionEntry, Correlation, CorrelationCondition, CorrelationBoost, Constraint, Invariant, Archetype, Relation, TermQuery, PatternQuery, ChoiceEvent, RelationResult, POS, GenerationContext, GenerationHistory, PhraseFeatures, ScopeEntry, GeneratorConfig, SentenceTypeWeights, GeneratorInitOptions, SentenceOptions, ParagraphOptions, TextBlockOptions, TokenTrace, SentenceTrace, ParagraphTrace, GenerationTrace, GenerationMeta, GeneratedText, LexiconValidationError, LexiconValidationResult, } from './types/index.js';
|
|
13
|
+
export { DEFAULT_CONFIG, mergeConfig } from './types/index.js';
|
|
14
|
+
export type { Tense, Aspect, ConjugationOptions } from './morphology/conjugate.js';
|
|
15
|
+
export type { SentenceType, SentenceResult, PhraseResult } from './grammar/index.js';
|
|
16
|
+
export type { Token, TokenType, TokenMeta, ProtectionConfig, TransformStep, OutputTransformsConfig, OutputTransformsOverride, TransformCapabilities, TransformInput, TransformOutput, ValidationResult as TransformValidationResult, IOutputTransform, OutputTokenTrace, TransformEvent, LexiconOutputTransforms, ArchetypeOutputTransforms, PipelineResult, } from './transforms/index.js';
|
|
17
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAGrD,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAGzE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGjI,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG7C,OAAO,EAEL,KAAK,EACL,oBAAoB,EACpB,qBAAqB,EAErB,SAAS,EACT,WAAW,EACX,QAAQ,EAER,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS,EAET,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAG/B,OAAO,EAEL,QAAQ,EACR,MAAM,EACN,YAAY,EAEZ,eAAe,EACf,WAAW,EAEX,iBAAiB,EACjB,qBAAqB,EAErB,eAAe,EACf,kBAAkB,EAElB,2BAA2B,EAC3B,qBAAqB,EAErB,yBAAyB,EACzB,gCAAgC,EAEhC,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAG/B,YAAY,EAEV,IAAI,EACJ,YAAY,EACZ,aAAa,EACb,aAAa,GACd,MAAM,uBAAuB,CAAC;AAE/B,YAAY,EAEV,OAAO,EACP,OAAO,EACP,IAAI,EACJ,YAAY,EACZ,WAAW,EACX,OAAO,EACP,iBAAiB,EACjB,WAAW,EACX,oBAAoB,EACpB,gBAAgB,EAChB,UAAU,EACV,SAAS,EACT,SAAS,EACT,QAAQ,EACR,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACd,GAAG,EAEH,iBAAiB,EACjB,iBAAiB,EACjB,cAAc,EACd,UAAU,EAEV,eAAe,EACf,mBAAmB,EAEnB,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,sBAAsB,EACtB,uBAAuB,GACxB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAG/D,YAAY,EAAE,KAAK,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAGnF,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAGrF,YAAY,EACV,KAAK,EACL,SAAS,EACT,SAAS,EACT,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,wBAAwB,EACxB,qBAAqB,EACrB,cAAc,EACd,eAAe,EACf,gBAAgB,IAAI,yBAAyB,EAC7C,gBAAgB,EAChB,gBAAgB,EAChB,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EACzB,cAAc,GACf,MAAM,uBAAuB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSETG - Lexicon-Steered English Syntax Text Generator
|
|
3
|
+
* A faker-like library for generating syntactically plausible English text
|
|
4
|
+
*/
|
|
5
|
+
// Main API
|
|
6
|
+
export { TextGenerator } from './generator/index.js';
|
|
7
|
+
// Adapters
|
|
8
|
+
export { FakerJsAdapter, SimpleFakerAdapter } from './adapters/index.js';
|
|
9
|
+
// Lexicon utilities
|
|
10
|
+
export { LexiconStore, validateLexicon, loadLexiconFromString, loadLexiconFromObject, tryLoadLexicon } from './lexicon/index.js';
|
|
11
|
+
// RNG
|
|
12
|
+
export { SeedableRng } from './rng/index.js';
|
|
13
|
+
// Morphology utilities
|
|
14
|
+
export {
|
|
15
|
+
// Articles
|
|
16
|
+
useAn, getIndefiniteArticle, withIndefiniteArticle,
|
|
17
|
+
// Pluralization
|
|
18
|
+
pluralize, singularize, isPlural,
|
|
19
|
+
// Conjugation
|
|
20
|
+
getPastTense, getPastParticiple, getPresentParticiple, getThirdPersonSingular, conjugateBe, conjugateHave, conjugateDo, conjugate,
|
|
21
|
+
// Normalization
|
|
22
|
+
normalizeWhitespace, capitalize, capitalizeSentences, ensureEndPunctuation, isCapitalized, endsWithPunctuation, hasNoDoubleSpaces, joinTokens, formatSentence, formatParagraph, formatTextBlock, } from './morphology/index.js';
|
|
23
|
+
// Output Transform System
|
|
24
|
+
export {
|
|
25
|
+
// Tokenizer
|
|
26
|
+
tokenize, render, classifyChar,
|
|
27
|
+
// Protection
|
|
28
|
+
applyProtection, isProtected,
|
|
29
|
+
// Registry
|
|
30
|
+
TransformRegistry, createDefaultRegistry,
|
|
31
|
+
// Pipeline
|
|
32
|
+
executePipeline, checkPipelineOrder,
|
|
33
|
+
// Config Merge
|
|
34
|
+
mergeOutputTransformsConfig, mergeProtectionConfig,
|
|
35
|
+
// Constants
|
|
36
|
+
DEFAULT_PROTECTION_CONFIG, DEFAULT_OUTPUT_TRANSFORMS_CONFIG,
|
|
37
|
+
// V1 Transforms
|
|
38
|
+
pigLatinTransform, ubbiDubbiTransform, leetTransform, uwuTransform, pirateTransform, redactTransform, emojiTransform, mockCaseTransform, reverseWordsTransform, bizJargonTransform, V1_TRANSFORMS, } from './transforms/index.js';
|
|
39
|
+
export { DEFAULT_CONFIG, mergeConfig } from './types/index.js';
|
|
40
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,WAAW;AACX,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,WAAW;AACX,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzE,oBAAoB;AACpB,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEjI,MAAM;AACN,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE7C,uBAAuB;AACvB,OAAO;AACL,WAAW;AACX,KAAK,EACL,oBAAoB,EACpB,qBAAqB;AACrB,gBAAgB;AAChB,SAAS,EACT,WAAW,EACX,QAAQ;AACR,cAAc;AACd,YAAY,EACZ,iBAAiB,EACjB,oBAAoB,EACpB,sBAAsB,EACtB,WAAW,EACX,aAAa,EACb,WAAW,EACX,SAAS;AACT,gBAAgB;AAChB,mBAAmB,EACnB,UAAU,EACV,mBAAmB,EACnB,oBAAoB,EACpB,aAAa,EACb,mBAAmB,EACnB,iBAAiB,EACjB,UAAU,EACV,cAAc,EACd,eAAe,EACf,eAAe,GAChB,MAAM,uBAAuB,CAAC;AAE/B,0BAA0B;AAC1B,OAAO;AACL,YAAY;AACZ,QAAQ,EACR,MAAM,EACN,YAAY;AACZ,aAAa;AACb,eAAe,EACf,WAAW;AACX,WAAW;AACX,iBAAiB,EACjB,qBAAqB;AACrB,WAAW;AACX,eAAe,EACf,kBAAkB;AAClB,eAAe;AACf,2BAA2B,EAC3B,qBAAqB;AACrB,YAAY;AACZ,yBAAyB,EACzB,gCAAgC;AAChC,gBAAgB;AAChB,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,YAAY,EACZ,eAAe,EACf,eAAe,EACf,cAAc,EACd,iBAAiB,EACjB,qBAAqB,EACrB,kBAAkB,EAClB,aAAa,GACd,MAAM,uBAAuB,CAAC;AAuD/B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Faker Adapter Interface
|
|
3
|
+
* Provides fallback word generation when lexicon doesn't have terms
|
|
4
|
+
*/
|
|
5
|
+
export interface IFakerAdapter {
|
|
6
|
+
/** Generate an adjective */
|
|
7
|
+
adjective(): string;
|
|
8
|
+
/** Generate an adverb */
|
|
9
|
+
adverb(): string;
|
|
10
|
+
/** Generate a common noun */
|
|
11
|
+
noun(): string;
|
|
12
|
+
/** Generate a verb (base form) */
|
|
13
|
+
verb(): string;
|
|
14
|
+
/** Generate a preposition */
|
|
15
|
+
preposition(): string;
|
|
16
|
+
/** Generate a conjunction */
|
|
17
|
+
conjunction(): string;
|
|
18
|
+
/** Generate an interjection */
|
|
19
|
+
interjection(): string;
|
|
20
|
+
/** Generate a proper noun (name, place, etc.) - optional */
|
|
21
|
+
properNoun?(): string;
|
|
22
|
+
/** Generate a number word or digit - optional */
|
|
23
|
+
number?(): string;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=faker-adapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faker-adapter.d.ts","sourceRoot":"","sources":["../../src/interfaces/faker-adapter.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,4BAA4B;IAC5B,SAAS,IAAI,MAAM,CAAC;IAEpB,yBAAyB;IACzB,MAAM,IAAI,MAAM,CAAC;IAEjB,6BAA6B;IAC7B,IAAI,IAAI,MAAM,CAAC;IAEf,kCAAkC;IAClC,IAAI,IAAI,MAAM,CAAC;IAEf,6BAA6B;IAC7B,WAAW,IAAI,MAAM,CAAC;IAEtB,6BAA6B;IAC7B,WAAW,IAAI,MAAM,CAAC;IAEtB,+BAA+B;IAC/B,YAAY,IAAI,MAAM,CAAC;IAEvB,4DAA4D;IAC5D,UAAU,CAAC,IAAI,MAAM,CAAC;IAEtB,iDAAiD;IACjD,MAAM,CAAC,IAAI,MAAM,CAAC;CACnB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"faker-adapter.js","sourceRoot":"","sources":["../../src/interfaces/faker-adapter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":"AAAA,YAAY,EAAE,IAAI,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/interfaces/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { GenerationContext } from '../types/context.js';
|
|
2
|
+
import type { TermSet, Pattern, LexicalItem, TermQuery, PatternQuery, ChoiceEvent, RelationResult } from '../types/lexicon.js';
|
|
3
|
+
/**
|
|
4
|
+
* Lexicon Store Interface
|
|
5
|
+
* Provides access to lexicon data and sampling utilities
|
|
6
|
+
*/
|
|
7
|
+
export interface ILexiconStore {
|
|
8
|
+
/** Get a term set by ID */
|
|
9
|
+
getTermSet(id: string): TermSet | undefined;
|
|
10
|
+
/** Get all term set IDs */
|
|
11
|
+
getTermSetIds(): string[];
|
|
12
|
+
/** Sample a term from the lexicon based on query and context */
|
|
13
|
+
sampleTerm(termQuery: TermQuery, ctx: GenerationContext): LexicalItem | undefined;
|
|
14
|
+
/** Get a pattern by ID */
|
|
15
|
+
getPattern(id: string): Pattern | undefined;
|
|
16
|
+
/** Get all pattern IDs */
|
|
17
|
+
getPatternIds(): string[];
|
|
18
|
+
/** Sample a pattern based on query and context */
|
|
19
|
+
samplePattern(patternQuery: PatternQuery, ctx: GenerationContext): Pattern | undefined;
|
|
20
|
+
/** Apply correlations after a choice event */
|
|
21
|
+
applyCorrelations(ctx: GenerationContext, chosen: ChoiceEvent): void;
|
|
22
|
+
/** Evaluate relations for an entity or term */
|
|
23
|
+
evaluateRelations(entityOrTerm: string, relationType?: string): RelationResult[];
|
|
24
|
+
/** Get archetype by name */
|
|
25
|
+
getArchetype(name: string): import('../types/lexicon.js').Archetype | undefined;
|
|
26
|
+
/** Get all archetype names */
|
|
27
|
+
getArchetypeNames(): string[];
|
|
28
|
+
/** Get distribution by ID */
|
|
29
|
+
getDistribution(id: string): import('../types/lexicon.js').DistributionEntry[] | undefined;
|
|
30
|
+
/** Check if lexicon is loaded */
|
|
31
|
+
isLoaded(): boolean;
|
|
32
|
+
/** Get lexicon metadata */
|
|
33
|
+
getMeta(): {
|
|
34
|
+
id: string;
|
|
35
|
+
version?: string;
|
|
36
|
+
language: string;
|
|
37
|
+
} | undefined;
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=lexicon-store.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicon-store.d.ts","sourceRoot":"","sources":["../../src/interfaces/lexicon-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,KAAK,EACV,OAAO,EACP,OAAO,EACP,WAAW,EACX,SAAS,EACT,YAAY,EACZ,WAAW,EACX,cAAc,EACf,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,2BAA2B;IAC3B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAE5C,2BAA2B;IAC3B,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B,gEAAgE;IAChE,UAAU,CAAC,SAAS,EAAE,SAAS,EAAE,GAAG,EAAE,iBAAiB,GAAG,WAAW,GAAG,SAAS,CAAC;IAElF,0BAA0B;IAC1B,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC;IAE5C,0BAA0B;IAC1B,aAAa,IAAI,MAAM,EAAE,CAAC;IAE1B,kDAAkD;IAClD,aAAa,CAAC,YAAY,EAAE,YAAY,EAAE,GAAG,EAAE,iBAAiB,GAAG,OAAO,GAAG,SAAS,CAAC;IAEvF,8CAA8C;IAC9C,iBAAiB,CAAC,GAAG,EAAE,iBAAiB,EAAE,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAErE,+CAA+C;IAC/C,iBAAiB,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,cAAc,EAAE,CAAC;IAEjF,4BAA4B;IAC5B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,qBAAqB,EAAE,SAAS,GAAG,SAAS,CAAC;IAEhF,8BAA8B;IAC9B,iBAAiB,IAAI,MAAM,EAAE,CAAC;IAE9B,6BAA6B;IAC7B,eAAe,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,qBAAqB,EAAE,iBAAiB,EAAE,GAAG,SAAS,CAAC;IAE3F,iCAAiC;IACjC,QAAQ,IAAI,OAAO,CAAC;IAEpB,2BAA2B;IAC3B,OAAO,IAAI;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,CAAC;CAC3E"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lexicon-store.js","sourceRoot":"","sources":["../../src/interfaces/lexicon-store.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Random Number Generator Interface
|
|
3
|
+
* Must be deterministic when seeded for reproducible output
|
|
4
|
+
*/
|
|
5
|
+
export interface IRng {
|
|
6
|
+
/** Set the seed for deterministic output */
|
|
7
|
+
seed(n: number): void;
|
|
8
|
+
/** Return a float in [0, 1) */
|
|
9
|
+
float(): number;
|
|
10
|
+
/** Return an integer in [min, max] inclusive */
|
|
11
|
+
int(min: number, max: number): number;
|
|
12
|
+
/** Pick a random element from a non-empty array */
|
|
13
|
+
pick<T>(list: T[]): T;
|
|
14
|
+
/** Pick an element using weighted probability */
|
|
15
|
+
weightedPick<T>(items: WeightedItem<T>[]): T;
|
|
16
|
+
/** Shuffle an array (returns a new array) */
|
|
17
|
+
shuffle<T>(list: T[]): T[];
|
|
18
|
+
/** Return true with the given probability (0-1) */
|
|
19
|
+
chance(probability: number): boolean;
|
|
20
|
+
}
|
|
21
|
+
export interface WeightedItem<T> {
|
|
22
|
+
item: T;
|
|
23
|
+
weight: number;
|
|
24
|
+
}
|
|
25
|
+
//# sourceMappingURL=rng.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rng.d.ts","sourceRoot":"","sources":["../../src/interfaces/rng.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,WAAW,IAAI;IACnB,4CAA4C;IAC5C,IAAI,CAAC,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEtB,+BAA+B;IAC/B,KAAK,IAAI,MAAM,CAAC;IAEhB,gDAAgD;IAChD,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC;IAEtC,mDAAmD;IACnD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,CAAC;IAEtB,iDAAiD;IACjD,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IAE7C,6CAA6C;IAC7C,OAAO,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAE3B,mDAAmD;IACnD,MAAM,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC;CACtC;AAED,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,IAAI,EAAE,CAAC,CAAC;IACR,MAAM,EAAE,MAAM,CAAC;CAChB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rng.js","sourceRoot":"","sources":["../../src/interfaces/rng.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lexicon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lexicon/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexicon Loader
|
|
3
|
+
* Loads and parses lexicon JSON
|
|
4
|
+
*/
|
|
5
|
+
import type { Lexicon } from '../types/lexicon.js';
|
|
6
|
+
import { validateLexicon } from './validator.js';
|
|
7
|
+
/**
|
|
8
|
+
* Load a lexicon from a JSON string
|
|
9
|
+
* @throws Error if JSON is invalid or lexicon validation fails
|
|
10
|
+
*/
|
|
11
|
+
export declare function loadLexiconFromString(jsonString: string): Lexicon;
|
|
12
|
+
/**
|
|
13
|
+
* Load a lexicon from an object (e.g., already parsed JSON)
|
|
14
|
+
* @throws Error if lexicon validation fails
|
|
15
|
+
*/
|
|
16
|
+
export declare function loadLexiconFromObject(obj: unknown): Lexicon;
|
|
17
|
+
/**
|
|
18
|
+
* Try to load a lexicon, returning validation result instead of throwing
|
|
19
|
+
*/
|
|
20
|
+
export declare function tryLoadLexicon(obj: unknown): {
|
|
21
|
+
lexicon?: Lexicon;
|
|
22
|
+
validation: ReturnType<typeof validateLexicon>;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/lexicon/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAiBjE;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAS3D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG;IAAE,OAAO,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAA;CAAE,CAQlH"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Lexicon Loader
|
|
3
|
+
* Loads and parses lexicon JSON
|
|
4
|
+
*/
|
|
5
|
+
import { validateLexicon } from './validator.js';
|
|
6
|
+
/**
|
|
7
|
+
* Load a lexicon from a JSON string
|
|
8
|
+
* @throws Error if JSON is invalid or lexicon validation fails
|
|
9
|
+
*/
|
|
10
|
+
export function loadLexiconFromString(jsonString) {
|
|
11
|
+
let parsed;
|
|
12
|
+
try {
|
|
13
|
+
parsed = JSON.parse(jsonString);
|
|
14
|
+
}
|
|
15
|
+
catch (e) {
|
|
16
|
+
throw new Error(`Invalid JSON: ${e instanceof Error ? e.message : 'Unknown error'}`);
|
|
17
|
+
}
|
|
18
|
+
const validation = validateLexicon(parsed);
|
|
19
|
+
if (!validation.valid) {
|
|
20
|
+
const errorMessages = validation.errors.map(e => ` ${e.path}: ${e.message}`).join('\n');
|
|
21
|
+
throw new Error(`Invalid lexicon:\n${errorMessages}`);
|
|
22
|
+
}
|
|
23
|
+
return parsed;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Load a lexicon from an object (e.g., already parsed JSON)
|
|
27
|
+
* @throws Error if lexicon validation fails
|
|
28
|
+
*/
|
|
29
|
+
export function loadLexiconFromObject(obj) {
|
|
30
|
+
const validation = validateLexicon(obj);
|
|
31
|
+
if (!validation.valid) {
|
|
32
|
+
const errorMessages = validation.errors.map(e => ` ${e.path}: ${e.message}`).join('\n');
|
|
33
|
+
throw new Error(`Invalid lexicon:\n${errorMessages}`);
|
|
34
|
+
}
|
|
35
|
+
return obj;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Try to load a lexicon, returning validation result instead of throwing
|
|
39
|
+
*/
|
|
40
|
+
export function tryLoadLexicon(obj) {
|
|
41
|
+
const validation = validateLexicon(obj);
|
|
42
|
+
if (validation.valid) {
|
|
43
|
+
return { lexicon: obj, validation };
|
|
44
|
+
}
|
|
45
|
+
return { validation };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/lexicon/loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,UAAkB;IACtD,IAAI,MAAe,CAAC;IAEpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,iBAAiB,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC,CAAC;IACvF,CAAC;IAED,MAAM,UAAU,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAE3C,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,MAAiB,CAAC;AAC3B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAY;IAChD,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAExC,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,aAAa,GAAG,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzF,MAAM,IAAI,KAAK,CAAC,qBAAqB,aAAa,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,GAAc,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,MAAM,UAAU,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IAExC,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,EAAE,OAAO,EAAE,GAAc,EAAE,UAAU,EAAE,CAAC;IACjD,CAAC;IAED,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC"}
|