ai-database 2.1.3 → 2.3.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/CHANGELOG.md +35 -1
- package/README.md +880 -669
- package/dist/actions.d.ts +2 -2
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +1 -1
- package/dist/actions.js.map +1 -1
- package/dist/ai-promise-db.d.ts +49 -23
- package/dist/ai-promise-db.d.ts.map +1 -1
- package/dist/ai-promise-db.js +91 -63
- package/dist/ai-promise-db.js.map +1 -1
- package/dist/authorization.d.ts.map +1 -1
- package/dist/authorization.js +38 -30
- package/dist/authorization.js.map +1 -1
- package/dist/cascade-orchestrator.d.ts +404 -0
- package/dist/cascade-orchestrator.d.ts.map +1 -0
- package/dist/cascade-orchestrator.js +828 -0
- package/dist/cascade-orchestrator.js.map +1 -0
- package/dist/cascade-write-strategy.d.ts +584 -0
- package/dist/cascade-write-strategy.d.ts.map +1 -0
- package/dist/cascade-write-strategy.js +590 -0
- package/dist/cascade-write-strategy.js.map +1 -0
- package/dist/ch-adapter.d.ts +358 -0
- package/dist/ch-adapter.d.ts.map +1 -0
- package/dist/ch-adapter.js +929 -0
- package/dist/ch-adapter.js.map +1 -0
- package/dist/client/index.d.ts +42 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +43 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client.d.ts +266 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +81 -0
- package/dist/client.js.map +1 -0
- package/dist/constants.d.ts +64 -1
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +52 -2
- package/dist/constants.js.map +1 -1
- package/dist/dataloader.d.ts +99 -0
- package/dist/dataloader.d.ts.map +1 -0
- package/dist/dataloader.js +225 -0
- package/dist/dataloader.js.map +1 -0
- package/dist/db-provider-port.d.ts +501 -0
- package/dist/db-provider-port.d.ts.map +1 -0
- package/dist/db-provider-port.js +113 -0
- package/dist/db-provider-port.js.map +1 -0
- package/dist/digital-objects-provider.d.ts +49 -0
- package/dist/digital-objects-provider.d.ts.map +1 -0
- package/dist/digital-objects-provider.js +55 -0
- package/dist/digital-objects-provider.js.map +1 -0
- package/dist/do-sqlite-adapter.d.ts +402 -0
- package/dist/do-sqlite-adapter.d.ts.map +1 -0
- package/dist/do-sqlite-adapter.js +745 -0
- package/dist/do-sqlite-adapter.js.map +1 -0
- package/dist/docs-rels/custom-types.d.ts +134 -0
- package/dist/docs-rels/custom-types.d.ts.map +1 -0
- package/dist/docs-rels/custom-types.js +70 -0
- package/dist/docs-rels/custom-types.js.map +1 -0
- package/dist/docs-rels/index.d.ts +16 -0
- package/dist/docs-rels/index.d.ts.map +1 -0
- package/dist/docs-rels/index.js +16 -0
- package/dist/docs-rels/index.js.map +1 -0
- package/dist/docs-rels/migrations/index.d.ts +30 -0
- package/dist/docs-rels/migrations/index.d.ts.map +1 -0
- package/dist/docs-rels/migrations/index.js +128 -0
- package/dist/docs-rels/migrations/index.js.map +1 -0
- package/dist/docs-rels/schema.d.ts +2961 -0
- package/dist/docs-rels/schema.d.ts.map +1 -0
- package/dist/docs-rels/schema.js +244 -0
- package/dist/docs-rels/schema.js.map +1 -0
- package/dist/durable-clickhouse.d.ts.map +1 -1
- package/dist/durable-clickhouse.js +16 -13
- package/dist/durable-clickhouse.js.map +1 -1
- package/dist/durable-promise.d.ts.map +1 -1
- package/dist/durable-promise.js +34 -15
- package/dist/durable-promise.js.map +1 -1
- package/dist/errors.d.ts +127 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +210 -0
- package/dist/errors.js.map +1 -0
- package/dist/eventbridge.d.ts +117 -0
- package/dist/eventbridge.d.ts.map +1 -0
- package/dist/eventbridge.js +238 -0
- package/dist/eventbridge.js.map +1 -0
- package/dist/events.d.ts +2 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +1 -1
- package/dist/events.js.map +1 -1
- package/dist/execution-queue.d.ts.map +1 -1
- package/dist/execution-queue.js +4 -5
- package/dist/execution-queue.js.map +1 -1
- package/dist/index.d.ts +35 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +106 -6
- package/dist/index.js.map +1 -1
- package/dist/linguistic.d.ts +3 -108
- package/dist/linguistic.d.ts.map +1 -1
- package/dist/linguistic.js +3 -372
- package/dist/linguistic.js.map +1 -1
- package/dist/logger.d.ts +132 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +137 -0
- package/dist/logger.js.map +1 -0
- package/dist/memory-provider.d.ts +128 -0
- package/dist/memory-provider.d.ts.map +1 -1
- package/dist/memory-provider.js +592 -257
- package/dist/memory-provider.js.map +1 -1
- package/dist/pg-adapter.d.ts +424 -0
- package/dist/pg-adapter.d.ts.map +1 -0
- package/dist/pg-adapter.js +921 -0
- package/dist/pg-adapter.js.map +1 -0
- package/dist/pipelines-iceberg-emitter.d.ts +327 -0
- package/dist/pipelines-iceberg-emitter.d.ts.map +1 -0
- package/dist/pipelines-iceberg-emitter.js +351 -0
- package/dist/pipelines-iceberg-emitter.js.map +1 -0
- package/dist/provider-capabilities.d.ts +146 -0
- package/dist/provider-capabilities.d.ts.map +1 -0
- package/dist/provider-capabilities.js +214 -0
- package/dist/provider-capabilities.js.map +1 -0
- package/dist/rdb-provider-adapter.d.ts +195 -0
- package/dist/rdb-provider-adapter.d.ts.map +1 -0
- package/dist/rdb-provider-adapter.js +291 -0
- package/dist/rdb-provider-adapter.js.map +1 -0
- package/dist/schema/cascade.d.ts +48 -17
- package/dist/schema/cascade.d.ts.map +1 -1
- package/dist/schema/cascade.js +477 -278
- package/dist/schema/cascade.js.map +1 -1
- package/dist/schema/definition-caches.d.ts +24 -0
- package/dist/schema/definition-caches.d.ts.map +1 -0
- package/dist/schema/definition-caches.js +26 -0
- package/dist/schema/definition-caches.js.map +1 -0
- package/dist/schema/dependency-graph.d.ts +21 -109
- package/dist/schema/dependency-graph.d.ts.map +1 -1
- package/dist/schema/dependency-graph.js +25 -333
- package/dist/schema/dependency-graph.js.map +1 -1
- package/dist/schema/diff.d.ts +103 -0
- package/dist/schema/diff.d.ts.map +1 -0
- package/dist/schema/diff.js +329 -0
- package/dist/schema/diff.js.map +1 -0
- package/dist/schema/entity-operations.d.ts +99 -0
- package/dist/schema/entity-operations.d.ts.map +1 -0
- package/dist/schema/entity-operations.js +818 -0
- package/dist/schema/entity-operations.js.map +1 -0
- package/dist/schema/index.d.ts +28 -34
- package/dist/schema/index.d.ts.map +1 -1
- package/dist/schema/index.js +454 -521
- package/dist/schema/index.js.map +1 -1
- package/dist/schema/migration.d.ts +205 -0
- package/dist/schema/migration.d.ts.map +1 -0
- package/dist/schema/migration.js +327 -0
- package/dist/schema/migration.js.map +1 -0
- package/dist/schema/nl-query-generator.d.ts +68 -0
- package/dist/schema/nl-query-generator.d.ts.map +1 -0
- package/dist/schema/nl-query-generator.js +362 -0
- package/dist/schema/nl-query-generator.js.map +1 -0
- package/dist/schema/nl-query.d.ts +65 -0
- package/dist/schema/nl-query.d.ts.map +1 -0
- package/dist/schema/nl-query.js +178 -0
- package/dist/schema/nl-query.js.map +1 -0
- package/dist/schema/parse.d.ts.map +1 -1
- package/dist/schema/parse.js +144 -89
- package/dist/schema/parse.js.map +1 -1
- package/dist/schema/provider.d.ts +37 -0
- package/dist/schema/provider.d.ts.map +1 -1
- package/dist/schema/provider.js +15 -7
- package/dist/schema/provider.js.map +1 -1
- package/dist/schema/resolve.d.ts +46 -5
- package/dist/schema/resolve.d.ts.map +1 -1
- package/dist/schema/resolve.js +237 -95
- package/dist/schema/resolve.js.map +1 -1
- package/dist/schema/search-utils.d.ts +76 -0
- package/dist/schema/search-utils.d.ts.map +1 -0
- package/dist/schema/search-utils.js +86 -0
- package/dist/schema/search-utils.js.map +1 -0
- package/dist/schema/seed.d.ts +53 -0
- package/dist/schema/seed.d.ts.map +1 -0
- package/dist/schema/seed.js +94 -0
- package/dist/schema/seed.js.map +1 -0
- package/dist/schema/semantic.d.ts +10 -0
- package/dist/schema/semantic.d.ts.map +1 -1
- package/dist/schema/semantic.js +192 -86
- package/dist/schema/semantic.js.map +1 -1
- package/dist/schema/sub-apis.d.ts +52 -0
- package/dist/schema/sub-apis.d.ts.map +1 -0
- package/dist/schema/sub-apis.js +216 -0
- package/dist/schema/sub-apis.js.map +1 -0
- package/dist/schema/system-entities.d.ts +42 -0
- package/dist/schema/system-entities.d.ts.map +1 -0
- package/dist/schema/system-entities.js +101 -0
- package/dist/schema/system-entities.js.map +1 -0
- package/dist/schema/types.d.ts +91 -9
- package/dist/schema/types.d.ts.map +1 -1
- package/dist/schema/union-fallback.d.ts.map +1 -1
- package/dist/schema/union-fallback.js +21 -15
- package/dist/schema/union-fallback.js.map +1 -1
- package/dist/schema/value-generators/ai.d.ts +54 -0
- package/dist/schema/value-generators/ai.d.ts.map +1 -0
- package/dist/schema/value-generators/ai.js +136 -0
- package/dist/schema/value-generators/ai.js.map +1 -0
- package/dist/schema/value-generators/index.d.ts +126 -0
- package/dist/schema/value-generators/index.d.ts.map +1 -0
- package/dist/schema/value-generators/index.js +219 -0
- package/dist/schema/value-generators/index.js.map +1 -0
- package/dist/schema/value-generators/placeholder.d.ts +52 -0
- package/dist/schema/value-generators/placeholder.d.ts.map +1 -0
- package/dist/schema/value-generators/placeholder.js +328 -0
- package/dist/schema/value-generators/placeholder.js.map +1 -0
- package/dist/schema/value-generators/types.d.ts +116 -0
- package/dist/schema/value-generators/types.d.ts.map +1 -0
- package/dist/schema/value-generators/types.js +11 -0
- package/dist/schema/value-generators/types.js.map +1 -0
- package/dist/schema/version.d.ts +111 -0
- package/dist/schema/version.d.ts.map +1 -0
- package/dist/schema/version.js +190 -0
- package/dist/schema/version.js.map +1 -0
- package/dist/schema.d.ts +1095 -24
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +2852 -40
- package/dist/schema.js.map +1 -1
- package/dist/semantic-vectors.d.ts +39 -0
- package/dist/semantic-vectors.d.ts.map +1 -0
- package/dist/semantic-vectors.js +334 -0
- package/dist/semantic-vectors.js.map +1 -0
- package/dist/semantic.d.ts +29 -1
- package/dist/semantic.d.ts.map +1 -1
- package/dist/semantic.js +26 -16
- package/dist/semantic.js.map +1 -1
- package/dist/telemetry.d.ts +128 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +305 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/tests.d.ts.map +1 -1
- package/dist/tests.js +30 -22
- package/dist/tests.js.map +1 -1
- package/dist/type-guards.d.ts +50 -5
- package/dist/type-guards.d.ts.map +1 -1
- package/dist/type-guards.js +87 -16
- package/dist/type-guards.js.map +1 -1
- package/dist/types.d.ts +33 -245
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +62 -72
- package/dist/types.js.map +1 -1
- package/dist/validation.d.ts +2 -5
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +65 -93
- package/dist/validation.js.map +1 -1
- package/dist/worker/db-provider.d.ts +168 -0
- package/dist/worker/db-provider.d.ts.map +1 -0
- package/dist/worker/db-provider.js +277 -0
- package/dist/worker/db-provider.js.map +1 -0
- package/dist/worker/index.d.ts +35 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +37 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/worker.d.ts +779 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +2786 -0
- package/dist/worker.js.map +1 -0
- package/package.json +46 -16
- package/src/docs-rels/migrations/0001-init.sql +125 -0
- package/LICENSE +0 -21
package/dist/index.js
CHANGED
|
@@ -38,7 +38,9 @@ export {
|
|
|
38
38
|
// Thing conversion utilities
|
|
39
39
|
toExpanded, toFlat,
|
|
40
40
|
// Configuration
|
|
41
|
-
setProvider, setNLQueryGenerator,
|
|
41
|
+
setProvider, setNLQueryGenerator, getNLQueryGenerator,
|
|
42
|
+
// AI Generation configuration
|
|
43
|
+
configureAIGeneration, getAIGenerationConfig,
|
|
42
44
|
// Schema parsing
|
|
43
45
|
parseSchema,
|
|
44
46
|
// Schema Definition
|
|
@@ -48,13 +50,29 @@ conjugate, pluralize, singularize, inferNoun, Type,
|
|
|
48
50
|
// URL utilities
|
|
49
51
|
resolveUrl, resolveShortUrl, parseUrl,
|
|
50
52
|
// Verb derivation
|
|
51
|
-
FORWARD_TO_REVERSE, BIDIRECTIONAL_PAIRS, deriveReverseVerb, fieldNameToVerb, isPassiveVerb, registerVerbPair, registerBidirectionalPair, registerFieldVerb,
|
|
52
|
-
|
|
53
|
+
FORWARD_TO_REVERSE, BIDIRECTIONAL_PAIRS, deriveReverseVerb, fieldNameToVerb, isPassiveVerb, registerVerbPair, registerBidirectionalPair, registerFieldVerb,
|
|
54
|
+
// Entity operations
|
|
55
|
+
createEntityOperations, createEdgeEntityOperations,
|
|
56
|
+
// NL Query execution
|
|
57
|
+
buildNLQueryContext, executeNLQuery, createNLQueryFn,
|
|
58
|
+
// Schema versioning
|
|
59
|
+
computeSchemaHash, getSchemaVersion, setSchemaVersion,
|
|
60
|
+
// Schema diff
|
|
61
|
+
diffSchemas,
|
|
62
|
+
// Migrations
|
|
63
|
+
defineMigration, runMigrations, } from './schema.js';
|
|
64
|
+
export { MemoryProvider, MemoryTransaction, createMemoryProvider, Semaphore, } from './memory-provider.js';
|
|
65
|
+
export { DataLoader, createRequestLoader, getRequestLoader, clearRequestLoader, withDataLoader, loadEntity, } from './dataloader.js';
|
|
66
|
+
export { createDigitalObjectsProvider } from './digital-objects-provider.js';
|
|
53
67
|
// =============================================================================
|
|
54
68
|
// Events API - Public event subscription and emission
|
|
55
69
|
// =============================================================================
|
|
56
70
|
// Export event utilities and constants
|
|
57
|
-
export { StandardEventTypes, entityEvent, typePattern, actionPattern
|
|
71
|
+
export { StandardEventTypes, entityEvent, typePattern, actionPattern } from './events.js';
|
|
72
|
+
// =============================================================================
|
|
73
|
+
// EventBridge - Cloudflare Queues integration
|
|
74
|
+
// =============================================================================
|
|
75
|
+
export { createEventBridge, createEventBridgeAPI } from './eventbridge.js';
|
|
58
76
|
// =============================================================================
|
|
59
77
|
// Actions API - Durable execution for long-running operations
|
|
60
78
|
// =============================================================================
|
|
@@ -63,7 +81,11 @@ export { ActionStatuses, isTerminal, isInProgress, canRetry, canCancel, getProgr
|
|
|
63
81
|
// Promise pipelining exports
|
|
64
82
|
export { DBPromise, isDBPromise, getRawDBPromise, createListPromise, createEntityPromise, createSearchPromise, wrapEntityOperations, setProviderResolver, setSchemaRelationInfo, DB_PROMISE_SYMBOL, RAW_DB_PROMISE_SYMBOL, } from './ai-promise-db.js';
|
|
65
83
|
// Semantic Search exports
|
|
66
|
-
export { cosineSimilarity, computeRRF, extractEmbeddableText, generateContentHash,
|
|
84
|
+
export { cosineSimilarity, computeRRF, extractEmbeddableText, generateContentHash,
|
|
85
|
+
// NOTE: createMockSemanticProvider has been moved to test utilities.
|
|
86
|
+
// Import from '../test/utils/mock-semantic.js' for testing.
|
|
87
|
+
// The export is kept here temporarily for backward compatibility but is deprecated.
|
|
88
|
+
createMockSemanticProvider, } from './semantic.js';
|
|
67
89
|
export {
|
|
68
90
|
// Standard definitions
|
|
69
91
|
StandardHierarchies, StandardPermissions, CRUDPermissions, createStandardRoles,
|
|
@@ -89,9 +111,87 @@ getBatchScheduler, setBatchScheduler, } from './durable-promise.js';
|
|
|
89
111
|
// Execution queue for priority-based scheduling
|
|
90
112
|
export { ExecutionQueue, createExecutionQueue, getDefaultQueue, setDefaultQueue, } from './execution-queue.js';
|
|
91
113
|
// ClickHouse-backed durable provider
|
|
92
|
-
export { ClickHouseDurableProvider, createClickHouseDurableProvider
|
|
114
|
+
export { ClickHouseDurableProvider, createClickHouseDurableProvider } from './durable-clickhouse.js';
|
|
93
115
|
// =============================================================================
|
|
94
116
|
// Generation Context - Context accumulation across cascading generations
|
|
95
117
|
// =============================================================================
|
|
96
118
|
export { GenerationContext, createGenerationContext, ContextOverflowError, } from './schema/generation-context.js';
|
|
119
|
+
// =============================================================================
|
|
120
|
+
// Error Handling - Custom error classes with context
|
|
121
|
+
// =============================================================================
|
|
122
|
+
export {
|
|
123
|
+
// Utility functions
|
|
124
|
+
isNotFoundError, isEntityExistsError, isExpectedError, wrapDatabaseError,
|
|
125
|
+
// Base error class
|
|
126
|
+
DatabaseError,
|
|
127
|
+
// Custom error classes
|
|
128
|
+
EntityNotFoundError, EntityAlreadyExistsError, ValidationError, AIGenerationError, SemanticSearchError, VectorSearchUnavailableError,
|
|
129
|
+
// Capability errors (re-exported from provider-capabilities)
|
|
130
|
+
CapabilityNotSupportedError, isCapabilityNotSupportedError, } from './errors.js';
|
|
131
|
+
// =============================================================================
|
|
132
|
+
// Provider Capabilities - Runtime feature detection
|
|
133
|
+
// =============================================================================
|
|
134
|
+
export { detectCapabilities, requireCapability, warnIfUnavailable, clearCapabilityCache, clearWarningHistory, PROVIDER_CAPABILITY_MATRIX, } from './provider-capabilities.js';
|
|
135
|
+
export { createMemoryProvider as createDigitalObjectsMemoryProvider } from 'digital-objects';
|
|
136
|
+
// =============================================================================
|
|
137
|
+
// Shared Constants
|
|
138
|
+
// =============================================================================
|
|
139
|
+
export { RelationOperator, DEFAULT_EMBEDDING_DIMENSIONS, EMBEDDING_DIMENSIONS, } from './constants.js';
|
|
140
|
+
// =============================================================================
|
|
141
|
+
// RDB Provider Adapter - Bridges RDB and ai-database DBProvider interfaces
|
|
142
|
+
// =============================================================================
|
|
143
|
+
export { RDBProviderAdapter, createRDBAdapter } from './rdb-provider-adapter.js';
|
|
144
|
+
// =============================================================================
|
|
145
|
+
// DO SQLite Adapter — Stack B transactional DBProvider
|
|
146
|
+
// =============================================================================
|
|
147
|
+
// Per ADR-0003: per-cascade DO isolation gives parallel write paths each at
|
|
148
|
+
// full single-DO throughput, the enabling pattern for cascade-heavy workloads.
|
|
149
|
+
export { DOSqliteAdapter, createDOSqliteAdapter, ShardingStrategies } from './do-sqlite-adapter.js';
|
|
150
|
+
// =============================================================================
|
|
151
|
+
// Postgres + pgvector Adapter — Stack A transactional DBProvider
|
|
152
|
+
// =============================================================================
|
|
153
|
+
// Per ADR-0003: Stack A's transactional layer. Bulk-VALUES CTE write path
|
|
154
|
+
// (91ms p50 for 500 docs+499 rels via Neon HTTP per substrate-write-probes).
|
|
155
|
+
export { PostgresProvider, createPostgresProvider, createNeonHttpExecutor, createPgClientExecutor, bootstrapSchema as bootstrapPostgresSchema, } from './pg-adapter.js';
|
|
156
|
+
// =============================================================================
|
|
157
|
+
// ClickHouse Adapter — Stack A analytics DBProvider
|
|
158
|
+
// =============================================================================
|
|
159
|
+
// Per ADR-0003: Tier 3 first-class on ClickHouse. Native vector functions for
|
|
160
|
+
// Tier 4 (up to 64,000 dims; cosine/L2/dot). Bulk JSONEachRow write path.
|
|
161
|
+
export { ClickHouseProvider, createClickHouseProvider, createClickHouseHttpFetcher, bootstrapClickHouseSchema, } from './ch-adapter.js';
|
|
162
|
+
// =============================================================================
|
|
163
|
+
// Cascade Write Strategy — sharded parallel writes (Phase 2 entry; aip-g1i9)
|
|
164
|
+
// =============================================================================
|
|
165
|
+
// Per ADR-0003: cascade orchestrator must write through a partition-aware
|
|
166
|
+
// adapter. This module is the *primitive* the orchestrator (`aip-8yal`) calls.
|
|
167
|
+
// PG path uses the CTE jsonb-bulk shape proven by the substrate-write-probes
|
|
168
|
+
// (91ms p50 / 500 docs+499 rels on Neon HTTP); DO SQLite path routes through
|
|
169
|
+
// the per-cascade DO via the adapter's `withContext` binding.
|
|
170
|
+
export { CascadeWriteStrategy, CascadeShardingStrategies, createCascadeWriteStrategy, buildPgCommitBatchSql, resolveDOIdName, chunkBatch, } from './cascade-write-strategy.js';
|
|
171
|
+
// =============================================================================
|
|
172
|
+
// Pipelines → Iceberg analytical fan-out emitter (aip-0ypt)
|
|
173
|
+
// =============================================================================
|
|
174
|
+
// Per ADR-0003: Stack B's dual-write pattern. DO SQLite is the transactional
|
|
175
|
+
// source of truth; Cloudflare Pipelines fans out into R2 Iceberg as the
|
|
176
|
+
// analytical SOR. The emitter is fire-and-forget on the cascade hot path —
|
|
177
|
+
// failures are logged and swallowed so analytical fan-out can never break
|
|
178
|
+
// cascade correctness.
|
|
179
|
+
export { createPipelinesIcebergEmitter, createHttpPipelinesIcebergEmitter, } from './pipelines-iceberg-emitter.js';
|
|
180
|
+
// =============================================================================
|
|
181
|
+
// Cascade Orchestrator — the moat work (aip-8yal)
|
|
182
|
+
// =============================================================================
|
|
183
|
+
// Real LLM-driven cascade generation built on the canonical SVO foundation:
|
|
184
|
+
// AIPromise-style generate() from ai-functions, ModelPolicy from
|
|
185
|
+
// language-models for retry/fallback, BatchProvider-shaped sibling-parallel
|
|
186
|
+
// fan-out, CascadeWriteStrategy for sharded writes, embed-on-write, and
|
|
187
|
+
// rubric-style $validate with four verdict policies. Replaces the
|
|
188
|
+
// PlaceholderValueGenerator path for the SVO surface.
|
|
189
|
+
export { generateCascade, buildEmbedText, CascadeValidationEscalation, } from './cascade-orchestrator.js';
|
|
190
|
+
// =============================================================================
|
|
191
|
+
// DBProvider Port — SVO-shaped contract with declared capability tiers
|
|
192
|
+
// =============================================================================
|
|
193
|
+
// Per ADR-0003: Tier 1+2 are universal (shape unchanged from `schema/provider`);
|
|
194
|
+
// Tier 3 (analytics) and Tier 4 (vector search) are declared per-adapter.
|
|
195
|
+
// Sharding model is declared so cascade write strategy can pick the right adapter.
|
|
196
|
+
export { DEFAULT_TIER_CAPABILITIES, getProviderCapabilities, hasActionRecording, hasVerbRegistry, hasVectorSearch, hasAnalytics, } from './db-provider-port.js';
|
|
97
197
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,OAAO,EAAE,EAAE,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/linguistic.d.ts
CHANGED
|
@@ -1,115 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Linguistic
|
|
2
|
+
* Linguistic utilities - re-exported from @graphdl/core
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Provides verb conjugation, noun pluralization, and linguistic inference.
|
|
5
5
|
* Used for auto-generating forms, events, and semantic metadata.
|
|
6
6
|
*
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
/**
|
|
11
|
-
* Auto-conjugate a verb from just the base form
|
|
12
|
-
*
|
|
13
|
-
* Given just "publish", generates all forms:
|
|
14
|
-
* - actor: publisher
|
|
15
|
-
* - act: publishes
|
|
16
|
-
* - activity: publishing
|
|
17
|
-
* - result: publication
|
|
18
|
-
* - reverse: { at: publishedAt, by: publishedBy, ... }
|
|
19
|
-
*
|
|
20
|
-
* @example
|
|
21
|
-
* ```ts
|
|
22
|
-
* conjugate('publish')
|
|
23
|
-
* // => { action: 'publish', actor: 'publisher', act: 'publishes', activity: 'publishing', ... }
|
|
24
|
-
*
|
|
25
|
-
* conjugate('create')
|
|
26
|
-
* // => { action: 'create', actor: 'creator', act: 'creates', activity: 'creating', ... }
|
|
27
|
-
* ```
|
|
28
|
-
*/
|
|
29
|
-
export declare function conjugate(action: string): Verb;
|
|
30
|
-
/**
|
|
31
|
-
* Auto-pluralize a noun
|
|
32
|
-
*
|
|
33
|
-
* @example
|
|
34
|
-
* ```ts
|
|
35
|
-
* pluralize('post') // => 'posts'
|
|
36
|
-
* pluralize('category') // => 'categories'
|
|
37
|
-
* pluralize('person') // => 'people'
|
|
38
|
-
* pluralize('child') // => 'children'
|
|
39
|
-
* ```
|
|
40
|
-
*/
|
|
41
|
-
export declare function pluralize(singular: string): string;
|
|
42
|
-
/**
|
|
43
|
-
* Auto-singularize a noun (reverse of pluralize)
|
|
44
|
-
*
|
|
45
|
-
* @example
|
|
46
|
-
* ```ts
|
|
47
|
-
* singularize('posts') // => 'post'
|
|
48
|
-
* singularize('categories') // => 'category'
|
|
49
|
-
* singularize('people') // => 'person'
|
|
50
|
-
* ```
|
|
51
|
-
*/
|
|
52
|
-
export declare function singularize(plural: string): string;
|
|
53
|
-
/**
|
|
54
|
-
* Infer a complete Noun from just a type name
|
|
55
|
-
*
|
|
56
|
-
* @example
|
|
57
|
-
* ```ts
|
|
58
|
-
* inferNoun('BlogPost')
|
|
59
|
-
* // => { singular: 'blog post', plural: 'blog posts', ... }
|
|
60
|
-
*
|
|
61
|
-
* inferNoun('Category')
|
|
62
|
-
* // => { singular: 'category', plural: 'categories', ... }
|
|
63
|
-
* ```
|
|
64
|
-
*/
|
|
65
|
-
export declare function inferNoun(typeName: string): Noun;
|
|
66
|
-
/**
|
|
67
|
-
* Create TypeMeta from a type name - all linguistic forms auto-inferred
|
|
68
|
-
*
|
|
69
|
-
* @example
|
|
70
|
-
* ```ts
|
|
71
|
-
* const meta = createTypeMeta('BlogPost')
|
|
72
|
-
* meta.singular // 'blog post'
|
|
73
|
-
* meta.plural // 'blog posts'
|
|
74
|
-
* meta.slug // 'blog-post'
|
|
75
|
-
* meta.created // 'BlogPost.created'
|
|
76
|
-
* meta.createdAt // 'createdAt'
|
|
77
|
-
* meta.creator // 'creator'
|
|
78
|
-
* ```
|
|
79
|
-
*/
|
|
80
|
-
export declare function createTypeMeta(typeName: string): TypeMeta;
|
|
81
|
-
/**
|
|
82
|
-
* Get or create TypeMeta for a type name (cached)
|
|
83
|
-
*/
|
|
84
|
-
export declare function getTypeMeta(typeName: string): TypeMeta;
|
|
85
|
-
/**
|
|
86
|
-
* Type proxy - provides dynamic access to type metadata
|
|
87
|
-
*
|
|
88
|
-
* @example
|
|
89
|
-
* ```ts
|
|
90
|
-
* const Post = Type('Post')
|
|
91
|
-
* Post.singular // 'post'
|
|
92
|
-
* Post.plural // 'posts'
|
|
93
|
-
* Post.created // 'Post.created'
|
|
94
|
-
*
|
|
95
|
-
* // In event handlers:
|
|
96
|
-
* on.create(thing => {
|
|
97
|
-
* console.log(thing.$type.plural) // 'posts'
|
|
98
|
-
* })
|
|
99
|
-
* ```
|
|
100
|
-
*/
|
|
101
|
-
export declare function Type(name: string): TypeMeta;
|
|
102
|
-
/**
|
|
103
|
-
* Get reverse property names for a verb action
|
|
104
|
-
*
|
|
105
|
-
* @example
|
|
106
|
-
* ```ts
|
|
107
|
-
* getVerbFields('create')
|
|
108
|
-
* // => { at: 'createdAt', by: 'createdBy', in: 'createdIn', for: 'createdFor' }
|
|
109
|
-
*
|
|
110
|
-
* getVerbFields('publish')
|
|
111
|
-
* // => { at: 'publishedAt', by: 'publishedBy' }
|
|
112
|
-
* ```
|
|
113
|
-
*/
|
|
114
|
-
export declare function getVerbFields(action: keyof typeof Verbs): Record<string, string>;
|
|
9
|
+
export { conjugate, pluralize, singularize, inferNoun, createTypeMeta, getTypeMeta, Type, getVerbFields, capitalize, preserveCase, isVowel, splitCamelCase, toKebabCase, toPastParticiple, toActor, toPresent, toGerund, toResult, clearTypeMetaCache, } from '@graphdl/core';
|
|
115
10
|
//# sourceMappingURL=linguistic.d.ts.map
|
package/dist/linguistic.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linguistic.d.ts","sourceRoot":"","sources":["../src/linguistic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"linguistic.d.ts","sourceRoot":"","sources":["../src/linguistic.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,EACL,SAAS,EACT,SAAS,EACT,WAAW,EACX,SAAS,EACT,cAAc,EACd,WAAW,EACX,IAAI,EACJ,aAAa,EACb,UAAU,EACV,YAAY,EACZ,OAAO,EACP,cAAc,EACd,WAAW,EACX,gBAAgB,EAChB,OAAO,EACP,SAAS,EACT,QAAQ,EACR,QAAQ,EACR,kBAAkB,GACnB,MAAM,eAAe,CAAA"}
|
package/dist/linguistic.js
CHANGED
|
@@ -1,379 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Linguistic
|
|
2
|
+
* Linguistic utilities - re-exported from @graphdl/core
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* Provides verb conjugation, noun pluralization, and linguistic inference.
|
|
5
5
|
* Used for auto-generating forms, events, and semantic metadata.
|
|
6
6
|
*
|
|
7
7
|
* @packageDocumentation
|
|
8
8
|
*/
|
|
9
|
-
|
|
10
|
-
// =============================================================================
|
|
11
|
-
// Internal Helpers
|
|
12
|
-
// =============================================================================
|
|
13
|
-
function capitalize(s) {
|
|
14
|
-
return s.charAt(0).toUpperCase() + s.slice(1);
|
|
15
|
-
}
|
|
16
|
-
function preserveCase(original, replacement) {
|
|
17
|
-
if (original[0] === original[0]?.toUpperCase()) {
|
|
18
|
-
return capitalize(replacement);
|
|
19
|
-
}
|
|
20
|
-
return replacement;
|
|
21
|
-
}
|
|
22
|
-
function isVowel(char) {
|
|
23
|
-
return char ? 'aeiou'.includes(char.toLowerCase()) : false;
|
|
24
|
-
}
|
|
25
|
-
function splitCamelCase(s) {
|
|
26
|
-
return s.replace(/([a-z])([A-Z])/g, '$1 $2').split(' ');
|
|
27
|
-
}
|
|
28
|
-
/** Check if we should double the final consonant (CVC pattern) */
|
|
29
|
-
function shouldDoubleConsonant(verb) {
|
|
30
|
-
if (verb.length < 2)
|
|
31
|
-
return false;
|
|
32
|
-
const last = verb[verb.length - 1];
|
|
33
|
-
const secondLast = verb[verb.length - 2];
|
|
34
|
-
// Don't double w, x, y
|
|
35
|
-
if ('wxy'.includes(last))
|
|
36
|
-
return false;
|
|
37
|
-
// Must end in consonant preceded by vowel
|
|
38
|
-
if (isVowel(last) || !isVowel(secondLast))
|
|
39
|
-
return false;
|
|
40
|
-
// Common verbs that double the final consonant
|
|
41
|
-
const doublingVerbs = ['submit', 'commit', 'permit', 'omit', 'admit', 'emit', 'transmit', 'refer', 'prefer', 'defer', 'occur', 'recur', 'begin', 'stop', 'drop', 'shop', 'plan', 'scan', 'ban', 'run', 'gun', 'stun', 'cut', 'shut', 'hit', 'sit', 'fit', 'spit', 'quit', 'knit', 'get', 'set', 'pet', 'wet', 'bet', 'let', 'put', 'drag', 'brag', 'flag', 'tag', 'bag', 'nag', 'wag', 'hug', 'bug', 'mug', 'tug', 'rub', 'scrub', 'grab', 'stab', 'rob', 'sob', 'throb', 'nod', 'prod', 'plod', 'plot', 'rot', 'blot', 'spot', 'knot', 'trot', 'chat', 'pat', 'bat', 'mat', 'rat', 'slap', 'clap', 'flap', 'tap', 'wrap', 'snap', 'trap', 'cap', 'map', 'nap', 'zap', 'tip', 'sip', 'dip', 'rip', 'zip', 'slip', 'trip', 'drip', 'chip', 'clip', 'flip', 'grip', 'ship', 'skip', 'whip', 'strip', 'equip', 'hop', 'pop', 'mop', 'cop', 'chop', 'crop', 'prop', 'flop', 'swim', 'trim', 'slim', 'skim', 'dim', 'rim', 'brim', 'grim', 'hem', 'stem', 'jam', 'cram', 'ram', 'slam', 'dam', 'ham', 'scam', 'spam', 'tram', 'hum', 'drum', 'strum', 'sum', 'gum', 'chum', 'plum'];
|
|
42
|
-
// Short words (3 letters) almost always double
|
|
43
|
-
if (verb.length <= 3)
|
|
44
|
-
return true;
|
|
45
|
-
// Check if verb matches any known doubling pattern
|
|
46
|
-
return doublingVerbs.some(v => verb === v || verb.endsWith(v));
|
|
47
|
-
}
|
|
48
|
-
/** Convert verb to past participle (create → created, publish → published) */
|
|
49
|
-
function toPastParticiple(verb) {
|
|
50
|
-
if (verb.endsWith('e'))
|
|
51
|
-
return verb + 'd';
|
|
52
|
-
if (verb.endsWith('y') && !isVowel(verb[verb.length - 2])) {
|
|
53
|
-
return verb.slice(0, -1) + 'ied';
|
|
54
|
-
}
|
|
55
|
-
if (shouldDoubleConsonant(verb)) {
|
|
56
|
-
return verb + verb[verb.length - 1] + 'ed';
|
|
57
|
-
}
|
|
58
|
-
return verb + 'ed';
|
|
59
|
-
}
|
|
60
|
-
/** Convert verb to actor noun (create → creator, publish → publisher) */
|
|
61
|
-
function toActor(verb) {
|
|
62
|
-
if (verb.endsWith('e'))
|
|
63
|
-
return verb + 'r';
|
|
64
|
-
if (verb.endsWith('y') && !isVowel(verb[verb.length - 2])) {
|
|
65
|
-
return verb.slice(0, -1) + 'ier';
|
|
66
|
-
}
|
|
67
|
-
if (shouldDoubleConsonant(verb)) {
|
|
68
|
-
return verb + verb[verb.length - 1] + 'er';
|
|
69
|
-
}
|
|
70
|
-
return verb + 'er';
|
|
71
|
-
}
|
|
72
|
-
/** Convert verb to present 3rd person (create → creates, publish → publishes) */
|
|
73
|
-
function toPresent(verb) {
|
|
74
|
-
if (verb.endsWith('y') && !isVowel(verb[verb.length - 2])) {
|
|
75
|
-
return verb.slice(0, -1) + 'ies';
|
|
76
|
-
}
|
|
77
|
-
if (verb.endsWith('s') || verb.endsWith('x') || verb.endsWith('z') ||
|
|
78
|
-
verb.endsWith('ch') || verb.endsWith('sh')) {
|
|
79
|
-
return verb + 'es';
|
|
80
|
-
}
|
|
81
|
-
return verb + 's';
|
|
82
|
-
}
|
|
83
|
-
/** Convert verb to gerund (create → creating, publish → publishing) */
|
|
84
|
-
function toGerund(verb) {
|
|
85
|
-
if (verb.endsWith('ie'))
|
|
86
|
-
return verb.slice(0, -2) + 'ying';
|
|
87
|
-
if (verb.endsWith('e') && !verb.endsWith('ee'))
|
|
88
|
-
return verb.slice(0, -1) + 'ing';
|
|
89
|
-
if (shouldDoubleConsonant(verb)) {
|
|
90
|
-
return verb + verb[verb.length - 1] + 'ing';
|
|
91
|
-
}
|
|
92
|
-
return verb + 'ing';
|
|
93
|
-
}
|
|
94
|
-
/** Convert verb to result noun (create → creation, publish → publication) */
|
|
95
|
-
function toResult(verb) {
|
|
96
|
-
// Common -ate → -ation
|
|
97
|
-
if (verb.endsWith('ate'))
|
|
98
|
-
return verb.slice(0, -1) + 'ion';
|
|
99
|
-
// Common -ify → -ification
|
|
100
|
-
if (verb.endsWith('ify'))
|
|
101
|
-
return verb.slice(0, -1) + 'ication';
|
|
102
|
-
// Common -ize → -ization
|
|
103
|
-
if (verb.endsWith('ize'))
|
|
104
|
-
return verb.slice(0, -1) + 'ation';
|
|
105
|
-
// Common -e → -ion (but not always correct)
|
|
106
|
-
if (verb.endsWith('e'))
|
|
107
|
-
return verb.slice(0, -1) + 'ion';
|
|
108
|
-
// Default: just add -ion
|
|
109
|
-
return verb + 'ion';
|
|
110
|
-
}
|
|
111
|
-
// =============================================================================
|
|
112
|
-
// Public API
|
|
113
|
-
// =============================================================================
|
|
114
|
-
/**
|
|
115
|
-
* Auto-conjugate a verb from just the base form
|
|
116
|
-
*
|
|
117
|
-
* Given just "publish", generates all forms:
|
|
118
|
-
* - actor: publisher
|
|
119
|
-
* - act: publishes
|
|
120
|
-
* - activity: publishing
|
|
121
|
-
* - result: publication
|
|
122
|
-
* - reverse: { at: publishedAt, by: publishedBy, ... }
|
|
123
|
-
*
|
|
124
|
-
* @example
|
|
125
|
-
* ```ts
|
|
126
|
-
* conjugate('publish')
|
|
127
|
-
* // => { action: 'publish', actor: 'publisher', act: 'publishes', activity: 'publishing', ... }
|
|
128
|
-
*
|
|
129
|
-
* conjugate('create')
|
|
130
|
-
* // => { action: 'create', actor: 'creator', act: 'creates', activity: 'creating', ... }
|
|
131
|
-
* ```
|
|
132
|
-
*/
|
|
133
|
-
export function conjugate(action) {
|
|
134
|
-
// Check if it's a known verb first
|
|
135
|
-
if (action in Verbs) {
|
|
136
|
-
return Verbs[action];
|
|
137
|
-
}
|
|
138
|
-
const base = action.toLowerCase();
|
|
139
|
-
const pastParticiple = toPastParticiple(base);
|
|
140
|
-
return {
|
|
141
|
-
action: base,
|
|
142
|
-
actor: toActor(base),
|
|
143
|
-
act: toPresent(base),
|
|
144
|
-
activity: toGerund(base),
|
|
145
|
-
result: toResult(base),
|
|
146
|
-
reverse: {
|
|
147
|
-
at: `${pastParticiple}At`,
|
|
148
|
-
by: `${pastParticiple}By`,
|
|
149
|
-
in: `${pastParticiple}In`,
|
|
150
|
-
for: `${pastParticiple}For`,
|
|
151
|
-
},
|
|
152
|
-
};
|
|
153
|
-
}
|
|
154
|
-
/**
|
|
155
|
-
* Auto-pluralize a noun
|
|
156
|
-
*
|
|
157
|
-
* @example
|
|
158
|
-
* ```ts
|
|
159
|
-
* pluralize('post') // => 'posts'
|
|
160
|
-
* pluralize('category') // => 'categories'
|
|
161
|
-
* pluralize('person') // => 'people'
|
|
162
|
-
* pluralize('child') // => 'children'
|
|
163
|
-
* ```
|
|
164
|
-
*/
|
|
165
|
-
export function pluralize(singular) {
|
|
166
|
-
const lower = singular.toLowerCase();
|
|
167
|
-
// Irregular plurals
|
|
168
|
-
const irregulars = {
|
|
169
|
-
person: 'people',
|
|
170
|
-
child: 'children',
|
|
171
|
-
man: 'men',
|
|
172
|
-
woman: 'women',
|
|
173
|
-
foot: 'feet',
|
|
174
|
-
tooth: 'teeth',
|
|
175
|
-
goose: 'geese',
|
|
176
|
-
mouse: 'mice',
|
|
177
|
-
ox: 'oxen',
|
|
178
|
-
leaf: 'leaves',
|
|
179
|
-
life: 'lives',
|
|
180
|
-
knife: 'knives',
|
|
181
|
-
wife: 'wives',
|
|
182
|
-
half: 'halves',
|
|
183
|
-
self: 'selves',
|
|
184
|
-
calf: 'calves',
|
|
185
|
-
analysis: 'analyses',
|
|
186
|
-
crisis: 'crises',
|
|
187
|
-
thesis: 'theses',
|
|
188
|
-
datum: 'data',
|
|
189
|
-
medium: 'media',
|
|
190
|
-
criterion: 'criteria',
|
|
191
|
-
phenomenon: 'phenomena',
|
|
192
|
-
};
|
|
193
|
-
if (irregulars[lower]) {
|
|
194
|
-
return preserveCase(singular, irregulars[lower]);
|
|
195
|
-
}
|
|
196
|
-
// Rules for regular plurals
|
|
197
|
-
if (lower.endsWith('y') && !isVowel(lower[lower.length - 2])) {
|
|
198
|
-
return singular.slice(0, -1) + 'ies';
|
|
199
|
-
}
|
|
200
|
-
// Words ending in z that double: quiz → quizzes, fez → fezzes
|
|
201
|
-
if (lower.endsWith('z') && !lower.endsWith('zz')) {
|
|
202
|
-
return singular + 'zes';
|
|
203
|
-
}
|
|
204
|
-
if (lower.endsWith('s') || lower.endsWith('x') || lower.endsWith('zz') ||
|
|
205
|
-
lower.endsWith('ch') || lower.endsWith('sh')) {
|
|
206
|
-
return singular + 'es';
|
|
207
|
-
}
|
|
208
|
-
if (lower.endsWith('f')) {
|
|
209
|
-
return singular.slice(0, -1) + 'ves';
|
|
210
|
-
}
|
|
211
|
-
if (lower.endsWith('fe')) {
|
|
212
|
-
return singular.slice(0, -2) + 'ves';
|
|
213
|
-
}
|
|
214
|
-
return singular + 's';
|
|
215
|
-
}
|
|
216
|
-
/**
|
|
217
|
-
* Auto-singularize a noun (reverse of pluralize)
|
|
218
|
-
*
|
|
219
|
-
* @example
|
|
220
|
-
* ```ts
|
|
221
|
-
* singularize('posts') // => 'post'
|
|
222
|
-
* singularize('categories') // => 'category'
|
|
223
|
-
* singularize('people') // => 'person'
|
|
224
|
-
* ```
|
|
225
|
-
*/
|
|
226
|
-
export function singularize(plural) {
|
|
227
|
-
const lower = plural.toLowerCase();
|
|
228
|
-
// Irregular singulars
|
|
229
|
-
const irregulars = {
|
|
230
|
-
people: 'person',
|
|
231
|
-
children: 'child',
|
|
232
|
-
men: 'man',
|
|
233
|
-
women: 'woman',
|
|
234
|
-
feet: 'foot',
|
|
235
|
-
teeth: 'tooth',
|
|
236
|
-
geese: 'goose',
|
|
237
|
-
mice: 'mouse',
|
|
238
|
-
oxen: 'ox',
|
|
239
|
-
leaves: 'leaf',
|
|
240
|
-
lives: 'life',
|
|
241
|
-
knives: 'knife',
|
|
242
|
-
wives: 'wife',
|
|
243
|
-
halves: 'half',
|
|
244
|
-
selves: 'self',
|
|
245
|
-
calves: 'calf',
|
|
246
|
-
analyses: 'analysis',
|
|
247
|
-
crises: 'crisis',
|
|
248
|
-
theses: 'thesis',
|
|
249
|
-
data: 'datum',
|
|
250
|
-
media: 'medium',
|
|
251
|
-
criteria: 'criterion',
|
|
252
|
-
phenomena: 'phenomenon',
|
|
253
|
-
};
|
|
254
|
-
if (irregulars[lower]) {
|
|
255
|
-
return preserveCase(plural, irregulars[lower]);
|
|
256
|
-
}
|
|
257
|
-
// Rules for regular singulars
|
|
258
|
-
if (lower.endsWith('ies')) {
|
|
259
|
-
return plural.slice(0, -3) + 'y';
|
|
260
|
-
}
|
|
261
|
-
if (lower.endsWith('ves')) {
|
|
262
|
-
return plural.slice(0, -3) + 'f';
|
|
263
|
-
}
|
|
264
|
-
if (lower.endsWith('es') && (lower.endsWith('sses') || lower.endsWith('xes') || lower.endsWith('zes') ||
|
|
265
|
-
lower.endsWith('ches') || lower.endsWith('shes'))) {
|
|
266
|
-
return plural.slice(0, -2);
|
|
267
|
-
}
|
|
268
|
-
if (lower.endsWith('s') && !lower.endsWith('ss')) {
|
|
269
|
-
return plural.slice(0, -1);
|
|
270
|
-
}
|
|
271
|
-
return plural;
|
|
272
|
-
}
|
|
273
|
-
/**
|
|
274
|
-
* Infer a complete Noun from just a type name
|
|
275
|
-
*
|
|
276
|
-
* @example
|
|
277
|
-
* ```ts
|
|
278
|
-
* inferNoun('BlogPost')
|
|
279
|
-
* // => { singular: 'blog post', plural: 'blog posts', ... }
|
|
280
|
-
*
|
|
281
|
-
* inferNoun('Category')
|
|
282
|
-
* // => { singular: 'category', plural: 'categories', ... }
|
|
283
|
-
* ```
|
|
284
|
-
*/
|
|
285
|
-
export function inferNoun(typeName) {
|
|
286
|
-
const words = splitCamelCase(typeName);
|
|
287
|
-
const singular = words.join(' ').toLowerCase();
|
|
288
|
-
const plural = words.slice(0, -1).concat(pluralize(words[words.length - 1])).join(' ').toLowerCase();
|
|
289
|
-
return {
|
|
290
|
-
singular,
|
|
291
|
-
plural,
|
|
292
|
-
actions: ['create', 'update', 'delete'],
|
|
293
|
-
events: ['created', 'updated', 'deleted'],
|
|
294
|
-
};
|
|
295
|
-
}
|
|
296
|
-
/**
|
|
297
|
-
* Create TypeMeta from a type name - all linguistic forms auto-inferred
|
|
298
|
-
*
|
|
299
|
-
* @example
|
|
300
|
-
* ```ts
|
|
301
|
-
* const meta = createTypeMeta('BlogPost')
|
|
302
|
-
* meta.singular // 'blog post'
|
|
303
|
-
* meta.plural // 'blog posts'
|
|
304
|
-
* meta.slug // 'blog-post'
|
|
305
|
-
* meta.created // 'BlogPost.created'
|
|
306
|
-
* meta.createdAt // 'createdAt'
|
|
307
|
-
* meta.creator // 'creator'
|
|
308
|
-
* ```
|
|
309
|
-
*/
|
|
310
|
-
export function createTypeMeta(typeName) {
|
|
311
|
-
const noun = inferNoun(typeName);
|
|
312
|
-
const slug = noun.singular.replace(/\s+/g, '-');
|
|
313
|
-
const slugPlural = noun.plural.replace(/\s+/g, '-');
|
|
314
|
-
return {
|
|
315
|
-
name: typeName,
|
|
316
|
-
singular: noun.singular,
|
|
317
|
-
plural: noun.plural,
|
|
318
|
-
slug,
|
|
319
|
-
slugPlural,
|
|
320
|
-
// From Verbs.create
|
|
321
|
-
creator: 'creator',
|
|
322
|
-
createdAt: 'createdAt',
|
|
323
|
-
createdBy: 'createdBy',
|
|
324
|
-
updatedAt: 'updatedAt',
|
|
325
|
-
updatedBy: 'updatedBy',
|
|
326
|
-
// Event types
|
|
327
|
-
created: `${typeName}.created`,
|
|
328
|
-
updated: `${typeName}.updated`,
|
|
329
|
-
deleted: `${typeName}.deleted`,
|
|
330
|
-
};
|
|
331
|
-
}
|
|
332
|
-
/** Cache of TypeMeta by type name */
|
|
333
|
-
const typeMetaCache = new Map();
|
|
334
|
-
/**
|
|
335
|
-
* Get or create TypeMeta for a type name (cached)
|
|
336
|
-
*/
|
|
337
|
-
export function getTypeMeta(typeName) {
|
|
338
|
-
let meta = typeMetaCache.get(typeName);
|
|
339
|
-
if (!meta) {
|
|
340
|
-
meta = createTypeMeta(typeName);
|
|
341
|
-
typeMetaCache.set(typeName, meta);
|
|
342
|
-
}
|
|
343
|
-
return meta;
|
|
344
|
-
}
|
|
345
|
-
/**
|
|
346
|
-
* Type proxy - provides dynamic access to type metadata
|
|
347
|
-
*
|
|
348
|
-
* @example
|
|
349
|
-
* ```ts
|
|
350
|
-
* const Post = Type('Post')
|
|
351
|
-
* Post.singular // 'post'
|
|
352
|
-
* Post.plural // 'posts'
|
|
353
|
-
* Post.created // 'Post.created'
|
|
354
|
-
*
|
|
355
|
-
* // In event handlers:
|
|
356
|
-
* on.create(thing => {
|
|
357
|
-
* console.log(thing.$type.plural) // 'posts'
|
|
358
|
-
* })
|
|
359
|
-
* ```
|
|
360
|
-
*/
|
|
361
|
-
export function Type(name) {
|
|
362
|
-
return getTypeMeta(name);
|
|
363
|
-
}
|
|
364
|
-
/**
|
|
365
|
-
* Get reverse property names for a verb action
|
|
366
|
-
*
|
|
367
|
-
* @example
|
|
368
|
-
* ```ts
|
|
369
|
-
* getVerbFields('create')
|
|
370
|
-
* // => { at: 'createdAt', by: 'createdBy', in: 'createdIn', for: 'createdFor' }
|
|
371
|
-
*
|
|
372
|
-
* getVerbFields('publish')
|
|
373
|
-
* // => { at: 'publishedAt', by: 'publishedBy' }
|
|
374
|
-
* ```
|
|
375
|
-
*/
|
|
376
|
-
export function getVerbFields(action) {
|
|
377
|
-
return Verbs[action]?.reverse ?? {};
|
|
378
|
-
}
|
|
9
|
+
export { conjugate, pluralize, singularize, inferNoun, createTypeMeta, getTypeMeta, Type, getVerbFields, capitalize, preserveCase, isVowel, splitCamelCase, toKebabCase, toPastParticiple, toActor, toPresent, toGerund, toResult, clearTypeMetaCache, } from '@graphdl/core';
|
|
379
10
|
//# sourceMappingURL=linguistic.js.map
|