@ue-shed/game-text 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.
package/dist/corpus.js ADDED
@@ -0,0 +1,579 @@
1
+ import { relative } from "node:path";
2
+ import { AssetReader, isHeaderScanEntry } from "@ue-shed/unreal-assets";
3
+ import { Context, Effect, Layer, Ref, Schema, Stream } from "effect";
4
+ import { TextOccurrenceId, TextUnitId } from "./schema.js";
5
+ const makeOccurrenceId = TextOccurrenceId.make;
6
+ const makeUnitId = TextUnitId.make;
7
+ export class TextCorpusScanError extends Schema.TaggedErrorClass()("TextCorpusScanError", {
8
+ code: Schema.Literals(["invalid_project", "scan_limit_exceeded"]),
9
+ message: Schema.String,
10
+ recovery: Schema.String,
11
+ retrySafe: Schema.Boolean
12
+ }) {
13
+ }
14
+ export const TextCorpusScanOptions = Schema.Struct({
15
+ concurrency: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))),
16
+ maximumAssets: Schema.optional(Schema.Int.check(Schema.isGreaterThanOrEqualTo(1))),
17
+ projectRoot: Schema.String
18
+ });
19
+ const decodeScanOptions = Schema.decodeUnknownEffect(TextCorpusScanOptions);
20
+ export const STRING_TABLE_CLASS = "/Script/Engine.StringTable";
21
+ /**
22
+ * Tagged property serialization writes each property's type as a name-table entry, so a package
23
+ * holding any `FText` names `TextProperty` in its header.
24
+ */
25
+ export const TEXT_PROPERTY_NAME = "TextProperty";
26
+ /** Maps a reader failure onto the corpus scan's typed failure, preserving recovery guidance. */
27
+ function textCorpusScanFailure(error) {
28
+ if (error.kind === "resource_limit") {
29
+ return new TextCorpusScanError({
30
+ code: "scan_limit_exceeded",
31
+ message: error.message,
32
+ recovery: "Narrow the project or raise the explicit maximum asset limit.",
33
+ retrySafe: false
34
+ });
35
+ }
36
+ return new TextCorpusScanError({
37
+ code: "invalid_project",
38
+ message: error.message,
39
+ recovery: "Choose an Unreal project directory containing a Content folder.",
40
+ retrySafe: error.retrySafe
41
+ });
42
+ }
43
+ function identityForText(value) {
44
+ if (value.history === "base" && value.key.length > 0) {
45
+ return { status: "resolved", namespace: value.namespace, key: value.key };
46
+ }
47
+ return {
48
+ status: "unresolved",
49
+ reason: value.history === "none" ? "culture_invariant" : "missing_key"
50
+ };
51
+ }
52
+ function occurrenceId(packageFile, location) {
53
+ const suffix = location.kind === "string_table_entry"
54
+ ? `entry:${location.entryKey}`
55
+ : location.kind === "data_table_cell"
56
+ ? `row:${location.row}:property:${location.propertyPath}`
57
+ : `property:${location.propertyPath}`;
58
+ return `occurrence:${location.objectPath}:${suffix}:${packageFile}`;
59
+ }
60
+ function addTextOccurrence(options) {
61
+ options.output.push({
62
+ id: makeOccurrenceId(occurrenceId(options.packageFile, options.location)),
63
+ packageFile: options.packageFile,
64
+ source: options.value.value,
65
+ identity: identityForText(options.value),
66
+ location: options.location,
67
+ editCapability: options.editCapability
68
+ });
69
+ }
70
+ function textOccurrenceFromExtraction(options) {
71
+ const identity = options.occurrence.identity.status === "resolved" &&
72
+ options.occurrence.identity.key.length > 0
73
+ ? {
74
+ status: "resolved",
75
+ namespace: options.occurrence.identity.namespace,
76
+ key: options.occurrence.identity.key
77
+ }
78
+ : {
79
+ status: "unresolved",
80
+ reason: options.occurrence.identity.status === "unresolved"
81
+ ? options.occurrence.identity.reason
82
+ : "missing_key"
83
+ };
84
+ const location = options.occurrence.location.kind === "string_table_entry"
85
+ ? {
86
+ kind: "string_table_entry",
87
+ objectPath: options.occurrence.location.object_path,
88
+ entryKey: options.occurrence.location.entry_key
89
+ }
90
+ : options.occurrence.location.kind === "data_table_cell"
91
+ ? {
92
+ kind: "data_table_cell",
93
+ objectPath: options.occurrence.location.object_path,
94
+ row: options.occurrence.location.row,
95
+ propertyPath: options.occurrence.location.property_path
96
+ }
97
+ : {
98
+ kind: "asset_property",
99
+ objectPath: options.occurrence.location.object_path,
100
+ classPath: options.occurrence.location.class_path,
101
+ propertyPath: options.occurrence.location.property_path
102
+ };
103
+ return {
104
+ id: makeOccurrenceId(occurrenceId(options.packageFile, location)),
105
+ packageFile: options.packageFile,
106
+ source: options.occurrence.source,
107
+ identity,
108
+ location,
109
+ editCapability: options.occurrence.edit_capability
110
+ };
111
+ }
112
+ function visitValue(options) {
113
+ const { value } = options;
114
+ if (value.value_kind === "text") {
115
+ addTextOccurrence({
116
+ output: options.output,
117
+ packageFile: options.packageFile,
118
+ value,
119
+ location: options.location(options.path),
120
+ editCapability: options.editCapability
121
+ });
122
+ return;
123
+ }
124
+ if (value.value_kind === "array" || value.value_kind === "set") {
125
+ value.values.forEach((item, index) => visitValue({ ...options, value: item, path: `${options.path}[${index}]` }));
126
+ return;
127
+ }
128
+ if (value.value_kind === "map") {
129
+ value.entries.forEach((entry, index) => {
130
+ visitValue({ ...options, value: entry.key, path: `${options.path}{${index}}.key` });
131
+ visitValue({ ...options, value: entry.value, path: `${options.path}{${index}}.value` });
132
+ });
133
+ return;
134
+ }
135
+ if (value.value_kind === "struct") {
136
+ visitProperties({ ...options, properties: value.properties });
137
+ }
138
+ }
139
+ function visitProperties(options) {
140
+ for (const property of options.properties) {
141
+ const path = options.path ? `${options.path}.${property.name}` : property.name;
142
+ visitValue({ ...options, value: property, path });
143
+ }
144
+ }
145
+ function unsupportedTextProperties(inspection) {
146
+ const gaps = [];
147
+ const visit = (objectPath, properties, prefix) => {
148
+ for (const property of properties) {
149
+ const propertyPath = prefix ? `${prefix}.${property.name}` : property.name;
150
+ if (property.type === "TextProperty" && property.value_kind === "raw") {
151
+ gaps.push({ objectPath, propertyPath });
152
+ }
153
+ if (property.value_kind === "struct") {
154
+ visit(objectPath, property.properties, propertyPath);
155
+ }
156
+ }
157
+ };
158
+ for (const asset of inspection.assets) {
159
+ if (isPropertyBearingAsset(asset))
160
+ visit(asset.object_path, asset.properties, "");
161
+ if (asset.kind === "DataTable" || asset.kind === "CompositeDataTable") {
162
+ for (const row of asset.rows)
163
+ visit(asset.object_path, row.properties, `row:${row.name}`);
164
+ }
165
+ }
166
+ return gaps;
167
+ }
168
+ function isPropertyBearingAsset(asset) {
169
+ return (asset.kind === "UObject" ||
170
+ asset.kind === "DataAsset" ||
171
+ asset.kind === "PrimaryDataAsset" ||
172
+ asset.kind === "CurveTable" ||
173
+ asset.kind === "Skeleton" ||
174
+ asset.kind === "Struct");
175
+ }
176
+ export function textOccurrencesFromInspection(options) {
177
+ const output = [];
178
+ for (const asset of options.inspection.assets) {
179
+ if (asset.kind === "StringTable") {
180
+ for (const entry of asset.string_table_entries) {
181
+ const location = {
182
+ kind: "string_table_entry",
183
+ objectPath: asset.object_path,
184
+ entryKey: entry.key
185
+ };
186
+ addTextOccurrence({
187
+ output,
188
+ packageFile: options.packageFile,
189
+ value: {
190
+ value_kind: "text",
191
+ value: entry.source,
192
+ history: "base",
193
+ namespace: asset.string_table_namespace,
194
+ key: entry.key
195
+ },
196
+ location,
197
+ editCapability: "source_editable"
198
+ });
199
+ }
200
+ continue;
201
+ }
202
+ if (asset.kind === "DataTable" || asset.kind === "CompositeDataTable") {
203
+ for (const row of asset.rows) {
204
+ visitProperties({
205
+ output,
206
+ packageFile: options.packageFile,
207
+ properties: row.properties,
208
+ path: "",
209
+ location: (propertyPath) => ({
210
+ kind: "data_table_cell",
211
+ objectPath: asset.object_path,
212
+ row: row.name,
213
+ propertyPath
214
+ }),
215
+ editCapability: "source_editable"
216
+ });
217
+ }
218
+ continue;
219
+ }
220
+ if (isPropertyBearingAsset(asset)) {
221
+ visitProperties({
222
+ output,
223
+ packageFile: options.packageFile,
224
+ properties: asset.properties,
225
+ path: "",
226
+ location: (propertyPath) => ({
227
+ kind: "asset_property",
228
+ objectPath: asset.object_path,
229
+ classPath: asset.class_path,
230
+ propertyPath
231
+ }),
232
+ editCapability: "read_only"
233
+ });
234
+ }
235
+ }
236
+ return output.sort((left, right) => left.id.localeCompare(right.id));
237
+ }
238
+ /** Paths whose existing header-index projection proves they may contribute game text. */
239
+ export function textPackagePathsFromProjectIndex(index) {
240
+ return [
241
+ ...new Set(index.assets
242
+ .filter(isHeaderScanEntry)
243
+ .filter((entry) => entry.header.matched_names?.includes(TEXT_PROPERTY_NAME) === true ||
244
+ entry.header.exports.some((exported) => exported.class_path === STRING_TABLE_CLASS))
245
+ .map((entry) => entry.header.path))
246
+ ].sort((left, right) => left.localeCompare(right));
247
+ }
248
+ function unitKey(occurrence) {
249
+ return occurrence.identity.status === "resolved"
250
+ ? `unreal:${encodeURIComponent(occurrence.identity.namespace)}:${encodeURIComponent(occurrence.identity.key)}`
251
+ : occurrence.id;
252
+ }
253
+ export function buildTextCorpus(outcomes, counts) {
254
+ const occurrences = outcomes.flatMap((outcome) => outcome.status === "inspected"
255
+ ? textOccurrencesFromInspection({
256
+ inspection: outcome.inspection,
257
+ packageFile: outcome.packageFile
258
+ })
259
+ : []);
260
+ const grouped = new Map();
261
+ for (const occurrence of occurrences) {
262
+ const key = unitKey(occurrence);
263
+ grouped.set(key, [...(grouped.get(key) ?? []), occurrence]);
264
+ }
265
+ const units = [...grouped.entries()]
266
+ .map(([id, groupedOccurrences]) => {
267
+ const sources = [
268
+ ...new Set(groupedOccurrences.map((occurrence) => occurrence.source))
269
+ ].sort();
270
+ return {
271
+ id: makeUnitId(id),
272
+ source: sources.length === 1
273
+ ? { status: "consistent", value: sources[0] ?? "" }
274
+ : { status: "conflicting", values: sources },
275
+ identity: groupedOccurrences[0]?.identity ?? {
276
+ status: "unresolved",
277
+ reason: "missing_key"
278
+ },
279
+ occurrences: groupedOccurrences
280
+ };
281
+ })
282
+ .sort((left, right) => left.id.localeCompare(right.id));
283
+ const inspected = outcomes.filter((outcome) => outcome.status === "inspected");
284
+ const partialPackages = inspected.filter((outcome) => outcome.inspection.status === "partial").length;
285
+ const failedPackages = outcomes.length - inspected.length;
286
+ const unsupported = inspected.flatMap((outcome) => unsupportedTextProperties(outcome.inspection).map((gap) => ({
287
+ ...gap,
288
+ packageFile: outcome.packageFile
289
+ })));
290
+ const diagnostics = outcomes.flatMap((outcome) => {
291
+ if (outcome.status === "failed") {
292
+ return [
293
+ {
294
+ code: "package_inspection_failed",
295
+ message: outcome.message,
296
+ packageFile: outcome.packageFile
297
+ }
298
+ ];
299
+ }
300
+ if (outcome.inspection.status === "partial") {
301
+ return [
302
+ {
303
+ code: "package_partially_decoded",
304
+ message: `${outcome.inspection.decode_errors.length} decode error(s) limit this package's coverage.`,
305
+ packageFile: outcome.packageFile
306
+ }
307
+ ];
308
+ }
309
+ return [];
310
+ });
311
+ diagnostics.push(...unsupported.map((gap) => ({
312
+ code: "unsupported_text_history",
313
+ message: "This FText history is visible but not decoded by the saved-package reader.",
314
+ packageFile: gap.packageFile,
315
+ objectPath: gap.objectPath,
316
+ propertyPath: gap.propertyPath
317
+ })));
318
+ const resolvedOccurrences = occurrences.filter((occurrence) => occurrence.identity.status === "resolved").length;
319
+ return {
320
+ schemaVersion: 1,
321
+ status: partialPackages > 0 || failedPackages > 0 || unsupported.length > 0
322
+ ? "partial"
323
+ : "complete",
324
+ coverage: {
325
+ discoveredPackages: counts?.discoveredPackages ?? outcomes.length,
326
+ inspectedPackages: counts?.inspectedPackages ?? inspected.length,
327
+ partialPackages,
328
+ failedPackages,
329
+ textUnits: units.length,
330
+ textOccurrences: occurrences.length,
331
+ resolvedOccurrences,
332
+ unresolvedOccurrences: occurrences.length - resolvedOccurrences,
333
+ unsupportedTextProperties: unsupported.length
334
+ },
335
+ units,
336
+ diagnostics
337
+ };
338
+ }
339
+ function emptyTextExtractionAccumulator() {
340
+ return {
341
+ coverageGaps: [],
342
+ diagnostics: [],
343
+ failedPackages: 0,
344
+ inspectedPackages: 0,
345
+ occurrences: [],
346
+ partialPackages: 0
347
+ };
348
+ }
349
+ function foldTextExtractionEvent(projectRoot, accumulator, event) {
350
+ if (event.event === "text_occurrence") {
351
+ accumulator.occurrences.push(textOccurrenceFromExtraction({
352
+ occurrence: event.occurrence,
353
+ packageFile: relative(projectRoot, event.path)
354
+ }));
355
+ return accumulator;
356
+ }
357
+ if (event.event === "text_coverage_gap") {
358
+ accumulator.coverageGaps.push({
359
+ objectPath: event.coverage_gap.object_path,
360
+ packageFile: relative(projectRoot, event.path),
361
+ propertyPath: event.coverage_gap.property_path
362
+ });
363
+ return accumulator;
364
+ }
365
+ if (event.event === "text_package") {
366
+ accumulator.inspectedPackages += 1;
367
+ if (event.status === "partial") {
368
+ accumulator.partialPackages += 1;
369
+ accumulator.diagnostics.push({
370
+ code: "package_partially_decoded",
371
+ message: `${event.diagnostics.length} decode error(s) limit this package's coverage.`,
372
+ packageFile: relative(projectRoot, event.path)
373
+ });
374
+ }
375
+ return accumulator;
376
+ }
377
+ if (event.event === "error") {
378
+ accumulator.failedPackages += 1;
379
+ accumulator.diagnostics.push({
380
+ code: "package_inspection_failed",
381
+ message: event.message,
382
+ packageFile: relative(projectRoot, event.path)
383
+ });
384
+ return accumulator;
385
+ }
386
+ accumulator.summary = event;
387
+ return accumulator;
388
+ }
389
+ function buildTextCorpusFromExtraction(options) {
390
+ const { accumulator } = options;
391
+ const grouped = new Map();
392
+ for (const occurrence of accumulator.occurrences) {
393
+ const key = unitKey(occurrence);
394
+ grouped.set(key, [...(grouped.get(key) ?? []), occurrence]);
395
+ }
396
+ const units = [...grouped.entries()]
397
+ .map(([id, groupedOccurrences]) => {
398
+ const sources = [
399
+ ...new Set(groupedOccurrences.map((occurrence) => occurrence.source))
400
+ ].sort();
401
+ return {
402
+ id: makeUnitId(id),
403
+ source: sources.length === 1
404
+ ? { status: "consistent", value: sources[0] ?? "" }
405
+ : { status: "conflicting", values: sources },
406
+ identity: groupedOccurrences[0]?.identity ?? {
407
+ status: "unresolved",
408
+ reason: "missing_key"
409
+ },
410
+ occurrences: groupedOccurrences
411
+ };
412
+ })
413
+ .sort((left, right) => left.id.localeCompare(right.id));
414
+ const diagnostics = [
415
+ ...accumulator.diagnostics,
416
+ ...accumulator.coverageGaps.map((gap) => ({
417
+ code: "unsupported_text_history",
418
+ message: "This FText history is visible but not decoded by the saved-package reader.",
419
+ packageFile: gap.packageFile,
420
+ objectPath: gap.objectPath,
421
+ propertyPath: gap.propertyPath
422
+ }))
423
+ ];
424
+ const resolvedOccurrences = accumulator.occurrences.filter((occurrence) => occurrence.identity.status === "resolved").length;
425
+ const summary = accumulator.summary;
426
+ const inspectedPackages = summary === undefined
427
+ ? accumulator.inspectedPackages
428
+ : summary.emittedAssets + summary.skippedAssets;
429
+ const discoveredPackages = options.discoveredPackages > 0
430
+ ? options.discoveredPackages
431
+ : (summary?.scannedAssets ?? options.discoveredPackages);
432
+ return {
433
+ schemaVersion: 1,
434
+ status: accumulator.partialPackages > 0 ||
435
+ accumulator.failedPackages > 0 ||
436
+ accumulator.coverageGaps.length > 0
437
+ ? "partial"
438
+ : "complete",
439
+ coverage: {
440
+ discoveredPackages,
441
+ inspectedPackages,
442
+ partialPackages: accumulator.partialPackages,
443
+ failedPackages: accumulator.failedPackages,
444
+ textUnits: units.length,
445
+ textOccurrences: accumulator.occurrences.length,
446
+ resolvedOccurrences,
447
+ unresolvedOccurrences: accumulator.occurrences.length - resolvedOccurrences,
448
+ unsupportedTextProperties: accumulator.coverageGaps.length
449
+ },
450
+ units,
451
+ diagnostics
452
+ };
453
+ }
454
+ function extractTextCorpusWith(reader, options, inheritedFailures = [], reportProgress = () => Effect.void) {
455
+ if (options.paths?.length === 0) {
456
+ const accumulator = emptyTextExtractionAccumulator();
457
+ accumulator.failedPackages = inheritedFailures.length;
458
+ accumulator.diagnostics.push(...inheritedFailures);
459
+ return reportProgress({ phase: "ready", processedAssets: 0, totalAssets: 0 }).pipe(Effect.as(buildTextCorpusFromExtraction({
460
+ accumulator,
461
+ discoveredPackages: options.discoveredPackages
462
+ })));
463
+ }
464
+ const totalAssets = options.paths?.length ?? 0;
465
+ let processedAssets = 0;
466
+ return reportProgress({ phase: "scanning", processedAssets: 0, totalAssets }).pipe(Effect.andThen(reader
467
+ .extractProjectText({
468
+ concurrency: Math.max(1, options.concurrency ?? 8),
469
+ ...(options.maximumAssets === undefined
470
+ ? {}
471
+ : { maximumAssets: options.maximumAssets }),
472
+ ...(options.paths === undefined ? {} : { paths: options.paths }),
473
+ projectRoot: options.projectRoot
474
+ })
475
+ .pipe(Stream.tap((event) => {
476
+ if (event.event === "text_summary") {
477
+ processedAssets =
478
+ event.emittedAssets + event.failedAssets + event.skippedAssets;
479
+ return reportProgress({
480
+ phase: "scanning",
481
+ processedAssets,
482
+ totalAssets: totalAssets > 0 ? totalAssets : event.scannedAssets
483
+ });
484
+ }
485
+ if (event.event !== "text_package" && event.event !== "error") {
486
+ return Effect.void;
487
+ }
488
+ processedAssets += 1;
489
+ return reportProgress({
490
+ phase: "scanning",
491
+ processedAssets,
492
+ totalAssets
493
+ });
494
+ }), Stream.runFold(() => {
495
+ const accumulator = emptyTextExtractionAccumulator();
496
+ accumulator.failedPackages = inheritedFailures.length;
497
+ accumulator.diagnostics.push(...inheritedFailures);
498
+ return accumulator;
499
+ }, (current, event) => foldTextExtractionEvent(options.projectRoot, current, event)), Effect.map((folded) => buildTextCorpusFromExtraction({
500
+ accumulator: folded,
501
+ discoveredPackages: options.discoveredPackages
502
+ })), Effect.mapError(textCorpusScanFailure), Effect.onExit((exit) => reportProgress({
503
+ phase: exit._tag === "Success" ? "ready" : "failed",
504
+ processedAssets,
505
+ totalAssets
506
+ })))));
507
+ }
508
+ function scanTextCorpusWith(reader, options, reportProgress) {
509
+ return extractTextCorpusWith(reader, {
510
+ discoveredPackages: 0,
511
+ ...(options.concurrency === undefined ? {} : { concurrency: options.concurrency }),
512
+ ...(options.maximumAssets === undefined
513
+ ? {}
514
+ : { maximumAssets: options.maximumAssets }),
515
+ projectRoot: options.projectRoot
516
+ }, [], reportProgress).pipe(Effect.withSpan("game-text.scan-corpus"));
517
+ }
518
+ function scanTextCorpusFromProjectIndexWith(reader, index, options, reportProgress) {
519
+ const paths = textPackagePathsFromProjectIndex(index);
520
+ const inheritedFailures = index.failures.map((failure) => ({
521
+ code: "package_inspection_failed",
522
+ message: failure.message,
523
+ packageFile: relative(options.projectRoot, failure.path)
524
+ }));
525
+ return extractTextCorpusWith(reader, {
526
+ discoveredPackages: index.summary.scannedAssets,
527
+ ...(options.concurrency === undefined ? {} : { concurrency: options.concurrency }),
528
+ ...(options.maximumAssets === undefined
529
+ ? {}
530
+ : { maximumAssets: options.maximumAssets }),
531
+ paths,
532
+ projectRoot: options.projectRoot
533
+ }, inheritedFailures, reportProgress).pipe(Effect.withSpan("game-text.scan-corpus-from-project-index"));
534
+ }
535
+ /** Canonical TextCorpus domain service (plan name: TextCorpus.Service). */
536
+ export class TextCorpusService extends Context.Service()("@ue-shed/game-text/TextCorpus") {
537
+ }
538
+ export const TextCorpusServiceLive = Layer.effect(TextCorpusService, Effect.gen(function* () {
539
+ const reader = yield* AssetReader;
540
+ const progressState = yield* Ref.make({
541
+ phase: "idle",
542
+ processedAssets: 0,
543
+ totalAssets: 0
544
+ });
545
+ const reportProgress = (progress) => Ref.set(progressState, progress);
546
+ const progress = Effect.fn("TextCorpus.progress")(() => Ref.get(progressState));
547
+ const scan = Effect.fn("TextCorpus.scan")(function* (options) {
548
+ const validated = yield* decodeScanOptions(options).pipe(Effect.mapError((cause) => new TextCorpusScanError({
549
+ code: "scan_limit_exceeded",
550
+ message: `Invalid text corpus scan options: ${String(cause)}`,
551
+ recovery: "Provide a project root and positive scan limits.",
552
+ retrySafe: false
553
+ })));
554
+ return yield* scanTextCorpusWith(reader, validated, reportProgress);
555
+ });
556
+ const scanFromProjectIndex = Effect.fn("TextCorpus.scanFromProjectIndex")(function* (index, options) {
557
+ const validated = yield* decodeScanOptions(options).pipe(Effect.mapError((cause) => new TextCorpusScanError({
558
+ code: "scan_limit_exceeded",
559
+ message: `Invalid text corpus scan options: ${String(cause)}`,
560
+ recovery: "Provide a project root and positive scan limits.",
561
+ retrySafe: false
562
+ })));
563
+ return yield* scanTextCorpusFromProjectIndexWith(reader, index, validated, reportProgress);
564
+ });
565
+ return TextCorpusService.of({ progress, scan, scanFromProjectIndex });
566
+ }));
567
+ export function makeTextCorpusServiceTestLayer(service) {
568
+ return Layer.succeed(TextCorpusService, TextCorpusService.of({
569
+ ...service,
570
+ progress: service.progress ??
571
+ (() => Effect.succeed({ phase: "idle", processedAssets: 0, totalAssets: 0 })),
572
+ scanFromProjectIndex: service.scanFromProjectIndex ?? ((_index, options) => service.scan(options))
573
+ }));
574
+ }
575
+ /** Compatibility accessor until Plans 012–014 compose TextCorpusService layers directly. */
576
+ export function scanTextCorpus(options) {
577
+ return Effect.flatMap(TextCorpusService, (service) => service.scan(options)).pipe(Effect.provide(TextCorpusServiceLive));
578
+ }
579
+ //# sourceMappingURL=corpus.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"corpus.js","sourceRoot":"","sources":["../src/corpus.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ export * from "./corpus.js";
2
+ export * from "./quality-schema.js";
3
+ export * from "./quality.js";
4
+ export * from "./quality-query.js";
5
+ export * from "./query.js";
6
+ export * from "./search.js";
7
+ export * from "./schema.js";
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export * from "./corpus.js";
2
+ export * from "./quality-schema.js";
3
+ export * from "./quality.js";
4
+ export * from "./quality-query.js";
5
+ export * from "./query.js";
6
+ export * from "./search.js";
7
+ export * from "./schema.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,aAAa,CAAC;AAC5B,cAAc,qBAAqB,CAAC;AACpC,cAAc,cAAc,CAAC;AAC7B,cAAc,oBAAoB,CAAC;AACnC,cAAc,YAAY,CAAC;AAC3B,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC"}