@contentrain/query 3.2.0 → 5.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/LICENSE +21 -21
- package/README.md +246 -268
- package/dist/cli.cjs +78 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.mts +1 -0
- package/dist/cli.mjs +81 -0
- package/dist/cli.mjs.map +1 -0
- package/dist/generate-C5Qz8qKt.mjs +855 -0
- package/dist/generate-C5Qz8qKt.mjs.map +1 -0
- package/dist/generate-CPKYh6ZU.cjs +858 -0
- package/dist/generator/generate.cjs +3 -0
- package/dist/generator/generate.d.cts +14 -0
- package/dist/generator/generate.d.cts.map +1 -0
- package/dist/generator/generate.d.mts +14 -0
- package/dist/generator/generate.d.mts.map +1 -0
- package/dist/generator/generate.mjs +2 -0
- package/dist/index.cjs +356 -0
- package/dist/index.d.cts +108 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.mts +107 -290
- package/dist/index.d.mts.map +1 -0
- package/dist/index.mjs +343 -859
- package/dist/index.mjs.map +1 -1
- package/package.json +46 -29
- package/dist/index.d.ts +0 -291
- package/dist/index.js +0 -872
- package/dist/index.js.map +0 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/utils/logger.ts","../src/cache/memory.ts","../src/loader/content.ts","../src/query/builder.ts","../src/query/executor.ts","../src/index.ts"],"names":[],"mappings":"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","file":"index.mjs","sourcesContent":["import { env } from 'node:process';\r\n\r\nconst isDevelopment = env.NODE_ENV === 'development';\r\n\r\nexport const logger = {\r\n debug: (...args: unknown[]) => {\r\n if (isDevelopment) {\r\n console.log(...args);\r\n }\r\n },\r\n error: (...args: unknown[]) => {\r\n if (isDevelopment) {\r\n console.error(...args);\r\n }\r\n },\r\n};\r\n","import type { CacheEntry, CacheStats, MemoryCacheOptions } from '../types/loader';\r\nimport { lru } from 'tiny-lru';\r\nimport { logger } from '../utils/logger';\r\n\r\nexport class MemoryCache {\r\n private cache;\r\n private options: Required<MemoryCacheOptions>;\r\n private stats: CacheStats = {\r\n hits: 0,\r\n misses: 0,\r\n size: 0,\r\n lastCleanup: Date.now(),\r\n };\r\n\r\n constructor(options: MemoryCacheOptions = {}) {\r\n this.options = {\r\n maxSize: 100, // 100 MB\r\n defaultTTL: 60 * 1000, // 1 dakika\r\n ...options,\r\n };\r\n\r\n const maxItems = Math.floor(this.options.maxSize * 1024 * 1024 / 1000); // Yaklaşık item sayısı\r\n this.cache = lru(maxItems);\r\n }\r\n\r\n private calculateSize(data: unknown): number {\r\n const str = JSON.stringify(data);\r\n return new TextEncoder().encode(str).length;\r\n }\r\n\r\n async set<T>(key: string, data: T, ttl?: number): Promise<void> {\r\n logger.debug('Saving data to cache:', {\r\n key,\r\n ttl,\r\n });\r\n\r\n // Cleanup first\r\n await this.cleanupCache();\r\n\r\n const size = this.calculateSize(data);\r\n const now = Date.now();\r\n const expireAt = now + (ttl || this.options.defaultTTL);\r\n\r\n // Clear old entries if new entry size exceeds limit\r\n while (size + this.stats.size > this.options.maxSize * 1024 * 1024) {\r\n const oldestKey = this.findOldestKey();\r\n if (!oldestKey)\r\n break;\r\n await this.delete(oldestKey);\r\n }\r\n\r\n const entry: CacheEntry<T> = {\r\n data,\r\n expireAt,\r\n size,\r\n createdAt: now,\r\n };\r\n\r\n // Delete old entry first\r\n const oldEntry = this.cache.get(key) as CacheEntry<unknown> | undefined;\r\n if (oldEntry) {\r\n this.stats.size -= oldEntry.size;\r\n }\r\n\r\n // Add new entry\r\n this.cache.set(key, entry);\r\n this.stats.size += size;\r\n\r\n logger.debug('Data saved to cache:', {\r\n key,\r\n expiry: expireAt ? new Date(expireAt).toISOString() : 'no expiry',\r\n });\r\n }\r\n\r\n private findOldestKey(): string | null {\r\n let oldestKey: string | null = null;\r\n let oldestTime = Infinity;\r\n\r\n for (const key of this.cache.keys()) {\r\n const entry = this.cache.get(key) as CacheEntry<unknown>;\r\n if (entry.createdAt < oldestTime) {\r\n oldestTime = entry.createdAt;\r\n oldestKey = key;\r\n }\r\n }\r\n\r\n return oldestKey;\r\n }\r\n\r\n async get<T>(key: string): Promise<T | null> {\r\n logger.debug('Getting data from cache:', { key });\r\n const entry = this.cache.get(key) as CacheEntry<T> | undefined;\r\n\r\n if (!entry) {\r\n logger.debug('Data not found in cache:', { key });\r\n this.stats.misses++;\r\n return null;\r\n }\r\n\r\n // TTL check\r\n if (Date.now() >= entry.expireAt) {\r\n await this.delete(key);\r\n this.stats.misses++;\r\n return null;\r\n }\r\n\r\n logger.debug('Data retrieved from cache:', {\r\n key,\r\n expiry: entry.expireAt ? new Date(entry.expireAt).toISOString() : 'no expiry',\r\n });\r\n this.stats.hits++;\r\n return entry.data;\r\n }\r\n\r\n async delete(key: string): Promise<void> {\r\n logger.debug('Deleting data from cache:', { key });\r\n const entry = this.cache.get(key) as CacheEntry<unknown> | undefined;\r\n if (entry) {\r\n this.stats.size -= entry.size;\r\n this.cache.delete(key);\r\n }\r\n logger.debug('Data deleted from cache:', { key });\r\n }\r\n\r\n async clear(): Promise<void> {\r\n logger.debug('Clearing cache');\r\n this.cache.clear();\r\n this.stats = {\r\n hits: 0,\r\n misses: 0,\r\n size: 0,\r\n lastCleanup: Date.now(),\r\n };\r\n logger.debug('Cache cleared');\r\n }\r\n\r\n private async cleanupCache(): Promise<void> {\r\n const now = Date.now();\r\n const expiredKeys: string[] = [];\r\n let totalSize = 0;\r\n\r\n // Find expired entries\r\n for (const key of this.cache.keys()) {\r\n const entry = this.cache.get(key) as CacheEntry<unknown>;\r\n if (entry.expireAt <= now) {\r\n expiredKeys.push(key);\r\n }\r\n else {\r\n totalSize += entry.size;\r\n }\r\n }\r\n\r\n // Delete expired entries\r\n for (const key of expiredKeys) {\r\n await this.delete(key);\r\n }\r\n\r\n // Size limit check if it exceeds default oldest entry\r\n while (totalSize > this.options.maxSize * 1024 * 1024) {\r\n const oldestKey = this.findOldestKey();\r\n if (!oldestKey)\r\n break;\r\n const entry = this.cache.get(oldestKey) as CacheEntry<unknown>;\r\n await this.delete(oldestKey);\r\n totalSize -= entry.size;\r\n }\r\n\r\n this.stats.lastCleanup = now;\r\n }\r\n\r\n getStats(): CacheStats {\r\n return { ...this.stats };\r\n }\r\n}\r\n","import type { AssetMetadata, ContentFile, ContentLoaderOptions, LoaderResult, ModelConfig, RelationConfig } from '../types/loader';\r\nimport type { BaseContentrainType, FieldMetadata, ModelMetadata } from '../types/model';\r\nimport { readdir, readFile } from 'node:fs/promises';\r\nimport { join } from 'node:path';\r\nimport { MemoryCache } from '../cache/memory';\r\nimport { logger } from '../utils/logger';\r\n\r\nexport class ContentLoader {\r\n private options: ContentLoaderOptions;\r\n private modelConfigs: Map<string, ModelConfig> = new Map();\r\n private relations: Map<string, RelationConfig[]> = new Map();\r\n private cache: MemoryCache;\r\n\r\n constructor(options: ContentLoaderOptions) {\r\n this.options = {\r\n defaultLocale: 'en',\r\n cache: true,\r\n ttl: 60 * 1000, // 1 minute\r\n maxCacheSize: 100, // 100 MB\r\n ...options,\r\n };\r\n\r\n this.cache = new MemoryCache({\r\n maxSize: this.options.maxCacheSize,\r\n defaultTTL: this.options.ttl,\r\n });\r\n }\r\n\r\n private getCacheKey(model: string): string {\r\n return `${model}`;\r\n }\r\n\r\n private getModelTTL(model: string): number {\r\n return this.options.modelTTL?.[model] || this.options.ttl || 0;\r\n }\r\n\r\n async clearCache(): Promise<void> {\r\n await this.cache.clear();\r\n }\r\n\r\n async refreshCache(model: string): Promise<void> {\r\n const cacheKey = this.getCacheKey(model);\r\n await this.cache.delete(cacheKey);\r\n await this.load(model);\r\n }\r\n\r\n getCacheStats() {\r\n return this.cache.getStats();\r\n }\r\n\r\n private async loadModelConfig(model: string): Promise<ModelConfig> {\r\n try {\r\n // First read general metadata\r\n const metadataPath = join(this.options.contentDir, 'models', 'metadata.json');\r\n const metadataContent = await readFile(metadataPath, 'utf-8');\r\n const allMetadata = JSON.parse(metadataContent);\r\n\r\n // Find model specific metadata\r\n const modelMetadata = allMetadata.find((m: ModelMetadata) => m.modelId === model);\r\n if (!modelMetadata) {\r\n logger.error('Model metadata not found:', {\r\n model,\r\n metadataPath,\r\n });\r\n throw new Error(`Model metadata not found for ${model}`);\r\n }\r\n\r\n // Read model fields\r\n const modelPath = join(this.options.contentDir, 'models', `${model}.json`);\r\n const modelContent = await readFile(modelPath, 'utf-8');\r\n const modelFields = JSON.parse(modelContent) as FieldMetadata[];\r\n\r\n return {\r\n metadata: modelMetadata,\r\n fields: modelFields,\r\n };\r\n }\r\n catch (error: any) {\r\n logger.error('Failed to load model config:', {\r\n model,\r\n error: error?.message || 'Unknown error',\r\n });\r\n throw new Error(`Failed to load model config for ${model}: ${error?.message || 'Unknown error'}`);\r\n }\r\n }\r\n\r\n private async loadContentFile<T extends BaseContentrainType>(\r\n model: string,\r\n locale: string = 'default',\r\n ): Promise<ContentFile<T>> {\r\n try {\r\n const modelConfig = await this.loadModelConfig(model);\r\n let contentPath: string;\r\n\r\n if (modelConfig.metadata.localization) {\r\n if (!locale || locale === 'default') {\r\n if (!this.options.defaultLocale) {\r\n logger.error('Default locale is required for localized model:', {\r\n model,\r\n });\r\n throw new Error(`Default locale is required for localized model \"${model}\"`);\r\n }\r\n locale = this.options.defaultLocale;\r\n }\r\n contentPath = join(this.options.contentDir, model, `${locale}.json`);\r\n }\r\n else {\r\n if (locale !== 'default') {\r\n console.warn(`Locale \"${locale}\" specified for non-localized model \"${model}\". This parameter will be ignored.`);\r\n }\r\n contentPath = join(this.options.contentDir, model, `${model}.json`);\r\n }\r\n\r\n const content = await readFile(contentPath, 'utf-8');\r\n try {\r\n const data = JSON.parse(content) as T[];\r\n return {\r\n model,\r\n locale: modelConfig.metadata.localization ? locale : undefined,\r\n data,\r\n };\r\n }\r\n catch {\r\n logger.error('Failed to load content:', {\r\n model,\r\n locale,\r\n contentPath,\r\n });\r\n throw new Error(`Failed to load content: Invalid JSON format in ${contentPath}`);\r\n }\r\n }\r\n catch (error: any) {\r\n if (error.message.includes('Invalid JSON format')) {\r\n logger.error('Failed to load content:', {\r\n model,\r\n locale,\r\n });\r\n throw error;\r\n }\r\n throw new Error(\r\n `Failed to load content file for ${model}${locale ? ` (${locale})` : ''}: ${\r\n error?.message || 'Unknown error'\r\n }`,\r\n );\r\n }\r\n }\r\n\r\n private async loadRelations(model: string): Promise<RelationConfig[]> {\r\n try {\r\n // Get model config\r\n const modelConfig = this.modelConfigs.get(model);\r\n if (!modelConfig) {\r\n throw new Error(`Model config not found for ${model}`);\r\n }\r\n\r\n // Find relation fields\r\n const relationFields = modelConfig.fields.filter((field) => {\r\n return field.fieldType === 'relation';\r\n });\r\n\r\n // Create relation configs\r\n return relationFields.map((field) => {\r\n const options = field.options;\r\n const reference = options?.reference?.form?.reference?.value;\r\n\r\n if (!reference) {\r\n throw new Error(`Reference not found for relation field: ${field.name}`);\r\n }\r\n\r\n return {\r\n model: reference,\r\n type: field.componentId === 'one-to-one' ? 'one-to-one' : 'one-to-many',\r\n foreignKey: field.fieldId,\r\n };\r\n });\r\n }\r\n catch (error: any) {\r\n throw new Error(`Failed to load relations for ${model}: ${error?.message || 'Unknown error'}`);\r\n }\r\n }\r\n\r\n private async getModelLocales(model: string, modelConfig: ModelConfig): Promise<string[]> {\r\n try {\r\n if (!modelConfig.metadata.localization) {\r\n return ['default'];\r\n }\r\n\r\n const modelDir = join(this.options.contentDir, model);\r\n const files = await readdir(modelDir);\r\n\r\n // Filter .json files and remove extension\r\n const locales = files\r\n .filter(file => file.endsWith('.json'))\r\n .map(file => file.replace('.json', ''))\r\n .filter(locale => locale !== model); // exclude model.json file\r\n\r\n if (locales.length === 0) {\r\n if (!this.options.defaultLocale) {\r\n throw new Error(`No locale files found for localized model \"${model}\" and no default locale specified`);\r\n }\r\n return [this.options.defaultLocale];\r\n }\r\n\r\n return locales;\r\n }\r\n catch (error: any) {\r\n if (!this.options.defaultLocale) {\r\n throw new Error(`Failed to read locales for model ${model} and no default locale specified: ${error?.message}`);\r\n }\r\n console.warn(`Failed to read locales for model ${model}: ${error?.message}`);\r\n return [this.options.defaultLocale];\r\n }\r\n }\r\n\r\n async load<T extends BaseContentrainType>(model: string): Promise<LoaderResult<T>> {\r\n const cacheKey = `${model}`;\r\n\r\n // Check cache\r\n if (this.options.cache) {\r\n const cached = await this.cache.get<LoaderResult<T>>(cacheKey);\r\n if (cached)\r\n return cached;\r\n }\r\n\r\n // Load model configuration\r\n const modelConfig = await this.loadModelConfig(model);\r\n this.modelConfigs.set(model, modelConfig);\r\n\r\n // Load relations\r\n const relations = await this.loadRelations(model);\r\n this.relations.set(model, relations);\r\n\r\n // Load content\r\n const content: { [locale: string]: T[] } = {};\r\n\r\n if (modelConfig.metadata.localization) {\r\n // Get locale list from directory\r\n const locales = await this.getModelLocales(model, modelConfig);\r\n\r\n for (const locale of locales) {\r\n try {\r\n const file = await this.loadContentFile<T>(model, locale);\r\n content[locale] = file.data;\r\n }\r\n catch (error: any) {\r\n console.warn(`Failed to load content for locale ${locale}: ${error?.message}`);\r\n // Throw error if default locale fails to load\r\n if (locale === this.options.defaultLocale) {\r\n throw error;\r\n }\r\n }\r\n }\r\n }\r\n else {\r\n // Load single file\r\n const file = await this.loadContentFile<T>(model);\r\n content.default = file.data;\r\n }\r\n\r\n // Load assets file\r\n let assets: AssetMetadata[] = [];\r\n try {\r\n const assetsPath = join(this.options.contentDir, 'assets.json');\r\n const assetsContent = await readFile(assetsPath, 'utf-8');\r\n assets = JSON.parse(assetsContent);\r\n }\r\n catch (error) {\r\n // Skip if assets file doesn't exist or can't be read\r\n console.warn('Assets file not found or cannot be read:', error);\r\n }\r\n\r\n const result: LoaderResult<T> = {\r\n model: modelConfig,\r\n content,\r\n assets,\r\n };\r\n\r\n // Save to cache\r\n if (this.options.cache) {\r\n const ttl = this.getModelTTL(model);\r\n await this.cache.set(cacheKey, result, ttl);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n async resolveRelation<T extends BaseContentrainType, R extends BaseContentrainType>(\r\n model: string,\r\n relationField: keyof T,\r\n data: T[],\r\n locale?: string,\r\n ): Promise<R[]> {\r\n try {\r\n logger.debug('Debug - Starting relation resolution:', {\r\n model,\r\n relationField,\r\n dataLength: data.length,\r\n locale,\r\n });\r\n\r\n const relations = this.relations.get(model);\r\n logger.debug('Debug - Relations:', relations);\r\n\r\n if (!relations)\r\n throw new Error(`No relations found for model: ${model}`);\r\n\r\n const relation = relations.find(r => r.foreignKey === relationField);\r\n logger.debug('Debug - Found relation:', relation);\r\n\r\n if (!relation)\r\n throw new Error(`No relation found for field: ${String(relationField)}`);\r\n\r\n // İlişkili modeli yükle\r\n logger.debug('Debug - Related model loading:', relation.model);\r\n const relatedContent = await this.load<R>(relation.model);\r\n logger.debug('Debug - İlişkili model yüklendi:', {\r\n model: relation.model,\r\n metadata: relatedContent.model.metadata,\r\n contentKeys: Object.keys(relatedContent.content),\r\n });\r\n\r\n let relatedData: R[];\r\n\r\n // Process content based on localization\r\n if (relatedContent.model.metadata.localization) {\r\n logger.debug('Debug - Processing localized model');\r\n const localizedContent = locale ? relatedContent.content[locale] : relatedContent.content.en;\r\n logger.debug('Debug - Localized content:', {\r\n locale: locale || 'en',\r\n contentType: typeof localizedContent,\r\n isArray: Array.isArray(localizedContent),\r\n });\r\n\r\n if (!Array.isArray(localizedContent)) {\r\n throw new TypeError(`Invalid content format for localized model ${relation.model}`);\r\n }\r\n relatedData = localizedContent;\r\n }\r\n else {\r\n logger.debug('Debug - Processing non-localized model');\r\n const nonLocalizedContent = relatedContent.content.default;\r\n logger.debug('Debug - Raw content:', {\r\n contentType: typeof nonLocalizedContent,\r\n isArray: Array.isArray(nonLocalizedContent),\r\n content: nonLocalizedContent,\r\n });\r\n\r\n if (!Array.isArray(nonLocalizedContent)) {\r\n throw new TypeError(`Invalid content format for non-localized model ${relation.model}`);\r\n }\r\n relatedData = nonLocalizedContent;\r\n }\r\n\r\n logger.debug('Debug - Related data ready:', {\r\n dataLength: relatedData.length,\r\n firstItem: relatedData[0],\r\n });\r\n\r\n if (!relatedData) {\r\n throw new Error(`Failed to resolve relation: No data found for model ${relation.model}`);\r\n }\r\n\r\n // Process relation type\r\n if (relation.type === 'one-to-one') {\r\n logger.debug('Debug - Processing one-to-one relation');\r\n // For one-to-one relations, process only items with relation field\r\n const itemsWithRelation = data.filter(item => item[relationField] !== undefined);\r\n logger.debug('Debug - Items with relations:', itemsWithRelation.length);\r\n\r\n return itemsWithRelation.map((item) => {\r\n const relatedItem = relatedData.find((r: R) => r.ID === item[relationField]);\r\n if (!relatedItem) {\r\n throw new Error(`Failed to resolve relation: No matching item found for ID ${String(item[relationField])}`);\r\n }\r\n return relatedItem;\r\n });\r\n }\r\n else {\r\n logger.debug('Debug - Processing one-to-many relation');\r\n // For one-to-many relations, prevent duplicates and filter undefined values\r\n const uniqueIds = new Set(\r\n data.flatMap(item =>\r\n item[relationField] !== undefined\r\n ? (Array.isArray(item[relationField])\r\n ? item[relationField]\r\n : [item[relationField]])\r\n : [],\r\n ),\r\n );\r\n\r\n logger.debug('Debug - Unique IDs:', Array.from(uniqueIds));\r\n\r\n const items = Array.from(uniqueIds)\r\n .map(id => relatedData.find((r: R) => r.ID === id))\r\n .filter(Boolean) as R[];\r\n\r\n logger.debug('Debug - Matching items:', items.length);\r\n\r\n if (items.length !== uniqueIds.size) {\r\n throw new Error('Failed to resolve relation: Some related items not found');\r\n }\r\n\r\n return items;\r\n }\r\n }\r\n catch (error: any) {\r\n logger.error('Debug - Error occurred:', error);\r\n throw new Error(`Failed to resolve relation: ${error.message}`);\r\n }\r\n }\r\n}\r\n","import type { ContentLoader } from '../loader/content';\nimport type { BaseContentrainType, ContentrainLocales } from '../types/model';\nimport type { Filter, Include, Operator, Pagination, QueryOptions, QueryResult, Sort } from '../types/query';\nimport type { QueryExecutor } from './executor';\nimport { logger } from '../utils/logger';\n\nexport class ContentrainQueryBuilder<\n TFields extends BaseContentrainType,\n TLocales extends ContentrainLocales = 'en' | 'tr',\n TRelations extends Record<string, BaseContentrainType> = Record<string, never>,\n> {\n private model: string;\n private filters: Filter[] = [];\n private includes: Include = {};\n private sorting: Sort[] = [];\n private pagination: Pagination = {};\n\n private options: QueryOptions = {};\n private executor: QueryExecutor;\n private loader: ContentLoader;\n\n constructor(model: string, executor: QueryExecutor, loader: ContentLoader) {\n this.model = model;\n this.executor = executor;\n this.loader = loader;\n }\n\n where<K extends keyof TFields, O extends Operator>(\n field: K,\n operator: O,\n value: O extends 'in' ? TFields[K][] : TFields[K],\n ): this {\n logger.debug('Adding filter:', {\n field,\n operator,\n value,\n });\n\n this.filters.push({\n field: field as string,\n operator,\n value,\n });\n return this;\n }\n\n include<K extends keyof TRelations>(relation: K | K[]): this {\n logger.debug('Adding relation:', relation);\n\n if (typeof relation === 'string') {\n this.includes[relation] = {};\n }\n else if (Array.isArray(relation)) {\n relation.forEach((r) => {\n this.includes[r as string] = {};\n });\n }\n return this;\n }\n\n orderBy<K extends keyof TFields>(field: K, direction: 'asc' | 'desc' = 'asc'): this {\n logger.debug('Adding sorting:', {\n field,\n direction,\n });\n\n this.sorting.push({\n field: field as string,\n direction,\n });\n return this;\n }\n\n limit(count: number): this {\n logger.debug('Adding limit:', count);\n this.pagination.limit = count;\n return this;\n }\n\n offset(count: number): this {\n logger.debug('Adding offset:', count);\n this.pagination.offset = count;\n return this;\n }\n\n locale(code: TLocales): this {\n logger.debug('Setting locale:', code);\n this.options.locale = code;\n return this;\n }\n\n cache(ttl?: number): this {\n logger.debug('Setting cache:', {\n enabled: true,\n ttl,\n });\n this.options.cache = true;\n if (ttl)\n this.options.ttl = ttl;\n return this;\n }\n\n noCache(): this {\n logger.debug('Disabling cache');\n this.options.cache = false;\n return this;\n }\n\n bypassCache(): this {\n logger.debug('Bypassing cache');\n this.options.cache = false;\n this.options.ttl = 0;\n return this;\n }\n\n toJSON() {\n return {\n model: this.model,\n filters: this.filters,\n includes: this.includes,\n sorting: this.sorting,\n pagination: this.pagination,\n options: this.options,\n };\n }\n\n async get(): Promise<QueryResult<TFields>> {\n logger.debug('Starting query:', {\n model: this.model,\n filterCount: this.filters.length,\n includeCount: Object.keys(this.includes).length,\n sortingCount: this.sorting.length,\n pagination: this.pagination,\n options: this.options,\n });\n\n const result = await this.loader.load<TFields>(this.model);\n const modelConfig = result.model;\n\n logger.debug('Model loaded:', {\n model: this.model,\n metadata: modelConfig.metadata,\n contentKeys: Object.keys(result.content),\n });\n\n // Locale check and data selection\n let data: TFields[];\n if (modelConfig.metadata.localization) {\n // Locale check for localized model\n const locale = this.options.locale || 'en'; // Default locale\n logger.debug('Selecting content for localized model:', {\n model: this.model,\n requestedLocale: locale,\n availableLocales: Object.keys(result.content),\n });\n\n data = result.content[locale];\n\n if (!data) {\n logger.error('Content not found:', {\n model: this.model,\n locale,\n availableLocales: Object.keys(result.content),\n });\n throw new Error(`Content not found for locale: ${locale}`);\n }\n }\n else {\n // Default content for non-localized model\n logger.debug('Selecting content for non-localized model:', {\n model: this.model,\n contentKeys: Object.keys(result.content),\n });\n\n if (!result.content.default) {\n logger.error('Content not found:', {\n model: this.model,\n contentKeys: Object.keys(result.content),\n });\n throw new Error(`Content not found for model: ${this.model}`);\n }\n data = result.content.default;\n }\n\n logger.debug('Executing query:', {\n model: this.model,\n dataLength: data.length,\n });\n\n return this.executor.execute({\n model: this.model,\n data,\n filters: this.filters,\n includes: this.includes,\n sorting: this.sorting,\n pagination: this.pagination,\n options: this.options,\n });\n }\n\n async first(): Promise<TFields | null> {\n const result = await this.limit(1).get();\n return result.data[0] || null;\n }\n\n async count(): Promise<number> {\n const result = await this.get();\n return result.total;\n }\n}\n","import type { ContentLoader } from '../loader/content';\r\nimport type { BaseContentrainType } from '../types/model';\r\nimport type { ArrayOperator, Filter, Include, NumericOperator, QueryOptions, QueryResult, Sort, StringOperator } from '../types/query';\r\nimport { logger } from '../utils/logger';\r\n\r\nexport class QueryExecutor {\r\n private loader: ContentLoader;\r\n\r\n constructor(loader: ContentLoader) {\r\n this.loader = loader;\r\n }\r\n\r\n private applyFilters<T extends BaseContentrainType>(data: T[], filters: Filter[]): T[] {\r\n logger.debug('Starting to apply filters:', {\r\n dataLength: data.length,\r\n filters,\r\n });\r\n\r\n const result = data.filter((item) => {\r\n return filters.every(({ field, operator, value }) => {\r\n const itemValue = item[field as keyof T];\r\n\r\n // Invalid operator check\r\n const validOperators = ['eq', 'ne', 'gt', 'gte', 'lt', 'lte', 'in', 'nin', 'contains', 'startsWith', 'endsWith'];\r\n if (!validOperators.includes(operator)) {\r\n logger.error('Invalid operator:', operator);\r\n throw new Error(`Invalid operator: ${operator}`);\r\n }\r\n\r\n if (typeof itemValue === 'string' && typeof value === 'string') {\r\n return this.applyStringOperation(itemValue, operator as StringOperator, value);\r\n }\r\n\r\n if (Array.isArray(value)) {\r\n switch (operator as ArrayOperator) {\r\n case 'in':\r\n return (value as unknown[]).includes(itemValue);\r\n case 'nin':\r\n return !(value as unknown[]).includes(itemValue);\r\n default:\r\n logger.error('Invalid array operator:', operator);\r\n throw new Error(`Invalid array operator: ${operator}`);\r\n }\r\n }\r\n\r\n if (Array.isArray(itemValue)) {\r\n switch (operator as ArrayOperator) {\r\n case 'in':\r\n return (value as unknown[]).some((v: unknown) => itemValue.includes(v));\r\n case 'nin':\r\n return !(value as unknown[]).some((v: unknown) => itemValue.includes(v));\r\n default:\r\n logger.error('Invalid array operator:', operator);\r\n throw new Error(`Invalid array operator: ${operator}`);\r\n }\r\n }\r\n\r\n if (typeof itemValue === 'number' && typeof value === 'number') {\r\n switch (operator as NumericOperator) {\r\n case 'eq':\r\n return itemValue === value;\r\n case 'ne':\r\n return itemValue !== value;\r\n case 'gt':\r\n return itemValue > value;\r\n case 'gte':\r\n return itemValue >= value;\r\n case 'lt':\r\n return itemValue < value;\r\n case 'lte':\r\n return itemValue <= value;\r\n }\r\n }\r\n\r\n return false;\r\n });\r\n });\r\n\r\n logger.debug('Filter application completed:', {\r\n initialCount: data.length,\r\n resultCount: result.length,\r\n });\r\n\r\n return result;\r\n }\r\n\r\n private applySorting<T extends BaseContentrainType>(data: T[], sorting: Sort[]): T[] {\r\n return [...data].sort((a, b) => {\r\n for (const { field, direction } of sorting) {\r\n // Sıralama alanı validasyonu\r\n if (!(field in a)) {\r\n throw new Error(`Invalid sort field: ${field}`);\r\n }\r\n\r\n const aValue = a[field as keyof T];\r\n const bValue = b[field as keyof T];\r\n\r\n if (aValue === bValue)\r\n continue;\r\n\r\n const compareResult = aValue < bValue ? -1 : 1;\r\n return direction === 'asc' ? compareResult : -compareResult;\r\n }\r\n return 0;\r\n });\r\n }\r\n\r\n private applyPagination<T>(data: T[], limit?: number, offset: number = 0): T[] {\r\n if (!limit)\r\n return data.slice(offset);\r\n return data.slice(offset, offset + limit);\r\n }\r\n\r\n private async resolveIncludes<T extends BaseContentrainType>(\r\n model: string,\r\n data: T[],\r\n includes: Include,\r\n options: QueryOptions,\r\n ): Promise<T[]> {\r\n logger.debug('Starting to resolve relations:', {\r\n model,\r\n dataLength: data.length,\r\n includes,\r\n options,\r\n });\r\n\r\n const result = [...data];\r\n\r\n for (const [field, config] of Object.entries(includes)) {\r\n logger.debug(`Resolving relation \"${field}\"`);\r\n\r\n // Resolve relation\r\n const relations = await this.loader.resolveRelation(\r\n model,\r\n field as keyof T,\r\n result,\r\n options.locale,\r\n );\r\n\r\n logger.debug(`Relation \"${field}\" resolved:`, {\r\n foundRelationsCount: relations.length,\r\n });\r\n\r\n // Resolve nested relations\r\n if (config.include && relations.length) {\r\n logger.debug(`Resolving nested relations for \"${field}\":`, config.include);\r\n await this.resolveIncludes(\r\n field,\r\n relations,\r\n config.include,\r\n options,\r\n );\r\n }\r\n\r\n // Add related data\r\n result.forEach((item) => {\r\n const value = item[field as keyof T];\r\n const relatedItems = relations.filter((r) => {\r\n if (Array.isArray(value)) {\r\n return value.includes(r.ID);\r\n }\r\n return r.ID === value;\r\n });\r\n\r\n if (!item._relations) {\r\n item._relations = {};\r\n }\r\n item._relations[field] = Array.isArray(value) ? relatedItems : relatedItems[0];\r\n });\r\n\r\n logger.debug(`Data added for relation \"${field}\"`);\r\n }\r\n\r\n return result;\r\n }\r\n\r\n private applyStringOperation(value: string, operator: StringOperator, searchValue: string): boolean {\r\n switch (operator) {\r\n case 'eq':\r\n return value === searchValue;\r\n case 'ne':\r\n return value !== searchValue;\r\n case 'contains':\r\n return value.toLowerCase().includes(searchValue.toLowerCase());\r\n case 'startsWith':\r\n return value.toLowerCase().startsWith(searchValue.toLowerCase());\r\n case 'endsWith':\r\n return value.toLowerCase().endsWith(searchValue.toLowerCase());\r\n default: {\r\n const _exhaustiveCheck: never = operator;\r\n return _exhaustiveCheck;\r\n }\r\n }\r\n }\r\n\r\n async execute<T extends BaseContentrainType>({\r\n model,\r\n data,\r\n filters = [],\r\n includes = {},\r\n sorting = [],\r\n pagination = {},\r\n options = {},\r\n }: {\r\n model: string\r\n data: T[]\r\n filters?: Filter[]\r\n includes?: Include\r\n sorting?: Sort[]\r\n pagination?: { limit?: number, offset?: number }\r\n options?: QueryOptions\r\n }): Promise<QueryResult<T>> {\r\n logger.debug('Starting execution:', {\r\n model,\r\n dataLength: data.length,\r\n filterCount: filters.length,\r\n includeCount: Object.keys(includes).length,\r\n sortingCount: sorting.length,\r\n pagination,\r\n options,\r\n });\r\n\r\n let result = [...data];\r\n // Apply filters\r\n if (filters.length) {\r\n logger.debug('Applying filters:', filters);\r\n result = this.applyFilters(result, filters);\r\n logger.debug('Remaining items after filtering:', result.length);\r\n }\r\n\r\n // Resolve relations\r\n if (Object.keys(includes).length) {\r\n logger.debug('Resolving relations:', includes);\r\n result = await this.resolveIncludes(model, result, includes, options);\r\n logger.debug('Items after relation resolution:', result.length);\r\n }\r\n\r\n // Apply sorting\r\n if (sorting.length) {\r\n logger.debug('Applying sorting:', sorting);\r\n result = this.applySorting(result, sorting);\r\n }\r\n\r\n // Apply pagination\r\n const paginatedData = this.applyPagination(result, pagination.limit, pagination.offset);\r\n logger.debug('After pagination:', {\r\n totalCount: result.length,\r\n pageSize: paginatedData.length,\r\n offset: pagination.offset || 0,\r\n hasMore: (pagination.offset || 0) + paginatedData.length < result.length,\r\n });\r\n\r\n return {\r\n data: paginatedData,\r\n total: result.length,\r\n pagination: pagination.limit\r\n ? {\r\n limit: pagination.limit,\r\n offset: pagination.offset || 0,\r\n hasMore: (pagination.offset || 0) + paginatedData.length < result.length,\r\n }\r\n : undefined,\r\n };\r\n }\r\n}\r\n","import type { ContentLoaderOptions } from './types/loader';\r\nimport type { BaseContentrainType } from './types/model';\r\nimport type { QueryConfig } from './types/query';\r\nimport { ContentLoader } from './loader/content';\r\nimport { ContentrainQueryBuilder } from './query/builder';\r\nimport { QueryExecutor } from './query/executor';\r\n\r\nexport * from './cache';\r\nexport * from './loader/content';\r\nexport * from './query/builder';\r\nexport * from './query/executor';\r\nexport * from './types';\r\nexport * from './utils/logger';\r\n\r\nexport class ContentrainSDK {\r\n private loader: ContentLoader;\r\n private executor: QueryExecutor;\r\n\r\n constructor(options: ContentLoaderOptions) {\r\n this.loader = new ContentLoader(options);\r\n this.executor = new QueryExecutor(this.loader);\r\n }\r\n\r\n query<T extends QueryConfig<BaseContentrainType, string, Record<string, BaseContentrainType>>>(\r\n model: string,\r\n ): ContentrainQueryBuilder<T['fields'], T['locales'], T['relations']> {\r\n return new ContentrainQueryBuilder<T['fields'], T['locales'], T['relations']>(\r\n model,\r\n this.executor,\r\n this.loader,\r\n );\r\n }\r\n\r\n async load<T extends BaseContentrainType>(model: string) {\r\n return this.loader.load<T>(model);\r\n }\r\n\r\n async clearCache(): Promise<void> {\r\n return this.loader.clearCache();\r\n }\r\n\r\n async refreshCache(model: string): Promise<void> {\r\n return this.loader.refreshCache(model);\r\n }\r\n\r\n getCacheStats() {\r\n return this.loader.getCacheStats();\r\n }\r\n}\r\n"]}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":[],"sources":["../src/runtime/query.ts","../src/runtime/singleton.ts","../src/runtime/dictionary.ts","../src/runtime/document.ts","../src/index.ts"],"sourcesContent":["export interface RelationMeta {\n target: string | string[]\n multi: boolean\n}\n\nexport type RelationResolver = (model: string, id: string, locale: string | null) => Record<string, unknown> | undefined\n\nexport class QueryBuilder<T extends object> {\n private _data: Map<string, T[]>\n private _locale: string | null = null\n private _filters: Array<(item: T) => boolean> = []\n private _sortField: string | null = null\n private _sortOrder: 'asc' | 'desc' = 'asc'\n private _limit: number | null = null\n private _offset = 0\n private _includes: string[] = []\n private _relationMeta: Record<string, RelationMeta>\n private _resolver: RelationResolver | null\n private _defaultLocale: string | null\n\n constructor(\n data: Map<string, T[]>,\n relationMeta?: Record<string, RelationMeta>,\n resolver?: RelationResolver,\n defaultLocale?: string,\n ) {\n this._data = data\n this._relationMeta = relationMeta ?? {}\n this._resolver = resolver ?? null\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where<K extends string & keyof T>(field: K, value: T[K]): this {\n this._filters.push((item) => {\n const v = item[field]\n if (Array.isArray(v)) return v.includes(value)\n return v === value\n })\n return this\n }\n\n sort<K extends string & keyof T>(field: K, order: 'asc' | 'desc' = 'asc'): this {\n this._sortField = field\n this._sortOrder = order\n return this\n }\n\n limit(n: number): this {\n this._limit = n\n return this\n }\n\n offset(n: number): this {\n this._offset = n\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n all(): T[] {\n let items = this._resolveData()\n\n // Filter\n for (const filter of this._filters) {\n items = items.filter(filter)\n }\n\n // Sort\n if (this._sortField) {\n const field = this._sortField\n const dir = this._sortOrder === 'asc' ? 1 : -1\n items.sort((a, b) => {\n const va = (a as Record<string, unknown>)[field]\n const vb = (b as Record<string, unknown>)[field]\n if (va == null && vb == null) return 0\n if (va == null) return dir\n if (vb == null) return -dir\n if (va < vb) return -dir\n if (va > vb) return dir\n return 0\n })\n }\n\n // Pagination\n if (this._offset > 0 || this._limit !== null) {\n const end = this._limit !== null ? this._offset + this._limit : undefined\n items = items.slice(this._offset, end)\n }\n\n // Resolve relations (after pagination for efficiency)\n if (this._includes.length > 0 && this._resolver) {\n items = items.map(item => this._resolveIncludes(item))\n }\n\n return items\n }\n\n first(): T | undefined {\n return this.all()[0]\n }\n\n private _resolveData(): T[] {\n if (this._locale) {\n return [...(this._data.get(this._locale) ?? [])]\n }\n if (this._defaultLocale) {\n const defaultData = this._data.get(this._defaultLocale)\n if (defaultData) return [...defaultData]\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return [...(this._data.get(firstKey) ?? [])]\n }\n return []\n }\n\n private _resolveIncludes(item: T): T {\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n }\n }\n return resolved\n }\n\n private _resolveId(targets: string[], id: string): Record<string, unknown> | undefined {\n for (const target of targets) {\n const result = this._resolver!(target, id, this._locale)\n if (result) return result\n }\n return undefined\n }\n}\n","export class SingletonAccessor<T extends Record<string, unknown>> {\n private _data: Map<string, T>\n private _locale: string | null = null\n private _defaultLocale: string | null\n private _includes: string[] = []\n private _relationMeta: Record<string, { target: string | string[]; multi: boolean }> = {}\n private _resolveEntry?: (model: string, id: string, locale: string) => unknown\n\n constructor(\n data: Map<string, T>,\n defaultLocale?: string,\n relationMeta?: Record<string, { target: string | string[]; multi: boolean }>,\n resolveEntry?: (model: string, id: string, locale: string) => unknown,\n ) {\n this._data = data\n this._defaultLocale = defaultLocale ?? null\n if (relationMeta) this._relationMeta = relationMeta\n this._resolveEntry = resolveEntry\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n get(): T {\n if (this._locale) {\n const d = this._data.get(this._locale)\n if (!d) throw new Error(`No data for locale \"${this._locale}\"`)\n if (this._includes.length > 0) return this._resolveIncludes(d, this._locale)\n return d\n }\n\n const locale = this._defaultLocale ?? undefined\n let data: T | undefined\n\n if (locale) {\n data = this._data.get(locale)\n }\n if (!data) {\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n data = this._data.get(firstKey)\n }\n }\n if (!data) throw new Error('No data available')\n\n if (this._includes.length > 0) {\n return this._resolveIncludes(data, locale ?? 'en')\n }\n return data\n }\n\n private _resolveIncludes(item: T, locale: string): T {\n if (!this._resolveEntry || this._includes.length === 0) return item\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id, locale) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref, locale) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id, locale) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref, locale) ?? id\n }\n }\n }\n\n return resolved\n }\n\n private _resolveId(targets: string[], id: string, locale: string): unknown {\n if (!this._resolveEntry) return undefined\n for (const model of targets) {\n const result = this._resolveEntry(model, id, locale)\n if (result) return result\n }\n return undefined\n }\n}\n","export class DictionaryAccessor {\n private _data: Map<string, Record<string, string>>\n private _locale: string | null = null\n private _defaultLocale: string | null\n\n constructor(data: Map<string, Record<string, string>>, defaultLocale?: string) {\n this._data = data\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n get(): Record<string, string>\n get(key: string): string | undefined\n get(key: string, params: Record<string, string | number>): string\n get(key?: string, params?: Record<string, string | number>): Record<string, string> | string | undefined {\n const dict = this._resolveData()\n if (key === undefined) return dict\n const value = dict[key]\n if (value === undefined) return undefined\n if (params) return interpolate(value, params)\n return value\n }\n\n private _resolveData(): Record<string, string> {\n if (this._locale) {\n return this._data.get(this._locale) ?? {}\n }\n if (this._defaultLocale) {\n const d = this._data.get(this._defaultLocale)\n if (d) return d\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return this._data.get(firstKey) ?? {}\n }\n return {}\n }\n}\n\nfunction interpolate(template: string, params: Record<string, string | number>): string {\n return template.replace(/\\{(\\w+)\\}/g, (match, key: string) => {\n const val = params[key]\n return val !== undefined ? String(val) : match\n })\n}\n","import type { RelationMeta, RelationResolver } from './query.js'\n\nexport class DocumentQuery<T extends object> {\n private _data: Map<string, T[]>\n private _locale: string | null = null\n private _filters: Array<(item: T) => boolean> = []\n private _includes: string[] = []\n private _relationMeta: Record<string, RelationMeta>\n private _resolver: RelationResolver | null\n private _defaultLocale: string | null\n\n constructor(\n data: Map<string, T[]>,\n relationMeta?: Record<string, RelationMeta>,\n resolver?: RelationResolver,\n defaultLocale?: string,\n ) {\n this._data = data\n this._relationMeta = relationMeta ?? {}\n this._resolver = resolver ?? null\n this._defaultLocale = defaultLocale ?? null\n }\n\n locale(lang: string): this {\n this._locale = lang\n return this\n }\n\n where<K extends string & keyof T>(field: K, value: T[K]): this {\n this._filters.push((item) => item[field] === value)\n return this\n }\n\n include(...fields: string[]): this {\n this._includes.push(...fields)\n return this\n }\n\n bySlug(slug: string): T | undefined {\n const items = this._resolveData()\n const item = items.find(i => (i as Record<string, unknown>)['slug'] === slug)\n if (item && this._includes.length > 0 && this._resolver) {\n return this._resolveIncludes(item)\n }\n return item\n }\n\n all(): T[] {\n let items = this._resolveData()\n for (const filter of this._filters) {\n items = items.filter(filter)\n }\n if (this._includes.length > 0 && this._resolver) {\n items = items.map(item => this._resolveIncludes(item))\n }\n return items\n }\n\n first(): T | undefined {\n return this.all()[0]\n }\n\n private _resolveData(): T[] {\n if (this._locale) {\n return [...(this._data.get(this._locale) ?? [])]\n }\n if (this._defaultLocale) {\n const defaultData = this._data.get(this._defaultLocale)\n if (defaultData) return [...defaultData]\n }\n const firstKey = this._data.keys().next().value\n if (firstKey !== undefined) {\n return [...(this._data.get(firstKey) ?? [])]\n }\n return []\n }\n\n private _resolveIncludes(item: T): T {\n const resolved = { ...item }\n const src = item as Record<string, unknown>\n const dst = resolved as Record<string, unknown>\n for (const field of this._includes) {\n const meta = this._relationMeta[field]\n if (!meta) continue\n const targets = Array.isArray(meta.target) ? meta.target : [meta.target]\n\n if (meta.multi) {\n const ids = src[field]\n if (Array.isArray(ids)) {\n dst[field] = ids.map((id) => {\n if (typeof id === 'string') {\n return this._resolveId(targets, id) ?? id\n }\n if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n return this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n return id\n })\n }\n } else {\n const id = src[field]\n if (typeof id === 'string') {\n dst[field] = this._resolveId(targets, id) ?? id\n } else if (typeof id === 'object' && id !== null && 'model' in id && 'ref' in id) {\n const polyObj = id as { model: string; ref: string }\n dst[field] = this._resolveId([polyObj.model], polyObj.ref) ?? id\n }\n }\n }\n return resolved\n }\n\n private _resolveId(targets: string[], id: string): Record<string, unknown> | undefined {\n for (const target of targets) {\n const result = this._resolver!(target, id, this._locale)\n if (result) return result\n }\n return undefined\n }\n}\n","// Runtime exports — used by framework SDK authors and generated client\nexport { QueryBuilder } from './runtime/query.js'\nexport type { RelationMeta, RelationResolver } from './runtime/query.js'\nexport { SingletonAccessor } from './runtime/singleton.js'\nexport { DictionaryAccessor } from './runtime/dictionary.js'\nexport { DocumentQuery } from './runtime/document.js'\n\n// Re-export types from @contentrain/types that SDK consumers need\nexport type {\n FieldType,\n ModelKind,\n ContentStatus,\n FieldDef,\n ModelDefinition,\n ContentrainConfig,\n} from '@contentrain/types'\n\n/**\n * Factory for framework SDK authors.\n * Returns the generated client module loaded from .contentrain/client/.\n *\n * Usage (Nuxt composable):\n * ```ts\n * import { createContentrainClient } from '@contentrain/query'\n * const client = createContentrainClient()\n * const posts = client.query('blog-post').locale('en').all()\n * ```\n */\nexport async function createContentrainClient(\n projectRoot?: string,\n): Promise<{\n query: (model: string) => import('./runtime/query.js').QueryBuilder<Record<string, unknown>>\n singleton: (model: string) => import('./runtime/singleton.js').SingletonAccessor<Record<string, unknown>>\n dictionary: (model: string) => import('./runtime/dictionary.js').DictionaryAccessor\n document: (model: string) => import('./runtime/document.js').DocumentQuery<Record<string, unknown>>\n}> {\n const { resolve } = await import('node:path')\n const { pathToFileURL } = await import('node:url')\n const root = projectRoot ?? process.cwd()\n const clientPath = resolve(root, '.contentrain', 'client', 'index.mjs')\n const client = await import(pathToFileURL(clientPath).href)\n return client\n}\n\n// Sync factory for CJS — requires generated client to be pre-loaded\nexport { createContentrainClient as default }\n"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,51 +1,68 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contentrain/query",
|
|
3
|
-
"version": "
|
|
4
|
-
"description": "Core package for Contentrain SDK, providing fundamental functionality and types",
|
|
5
|
-
"author": "Contentrain Inc.",
|
|
3
|
+
"version": "5.0.0",
|
|
6
4
|
"license": "MIT",
|
|
7
|
-
"
|
|
5
|
+
"description": "Type-safe content query SDK for Contentrain — universal JS/TS",
|
|
6
|
+
"type": "module",
|
|
8
7
|
"repository": {
|
|
9
8
|
"type": "git",
|
|
10
|
-
"url": "git+https://github.com/contentrain/contentrain-
|
|
11
|
-
"directory": "packages/
|
|
9
|
+
"url": "git+https://github.com/contentrain/contentrain-ai.git",
|
|
10
|
+
"directory": "packages/sdk/js"
|
|
12
11
|
},
|
|
12
|
+
"homepage": "https://github.com/contentrain/contentrain-ai/tree/main/packages/sdk/js",
|
|
13
13
|
"bugs": {
|
|
14
|
-
"url": "https://github.com/contentrain/contentrain-
|
|
14
|
+
"url": "https://github.com/contentrain/contentrain-ai/issues"
|
|
15
15
|
},
|
|
16
|
-
"homepage": "https://github.com/contentrain/contentrain-sdk/tree/main/packages/query#readme",
|
|
17
16
|
"keywords": [
|
|
18
17
|
"contentrain",
|
|
19
|
-
"sdk",
|
|
20
18
|
"query",
|
|
21
|
-
"
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
"
|
|
27
|
-
"README.md"
|
|
19
|
+
"sdk",
|
|
20
|
+
"typescript",
|
|
21
|
+
"content",
|
|
22
|
+
"i18n",
|
|
23
|
+
"vite",
|
|
24
|
+
"nextjs"
|
|
28
25
|
],
|
|
29
26
|
"publishConfig": {
|
|
30
27
|
"access": "public"
|
|
31
28
|
},
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
"@vitest/coverage-v8": "^1.1.3",
|
|
35
|
-
"tsup": "^8.0.1",
|
|
36
|
-
"typescript": "^5.3.3",
|
|
37
|
-
"vitest": "^1.1.3"
|
|
29
|
+
"bin": {
|
|
30
|
+
"contentrain-query": "./dist/cli.mjs"
|
|
38
31
|
},
|
|
32
|
+
"exports": {
|
|
33
|
+
".": {
|
|
34
|
+
"types": "./dist/index.d.ts",
|
|
35
|
+
"import": "./dist/index.mjs",
|
|
36
|
+
"require": "./dist/index.cjs",
|
|
37
|
+
"default": "./dist/index.mjs"
|
|
38
|
+
},
|
|
39
|
+
"./generate": {
|
|
40
|
+
"types": "./dist/generator/generate.d.ts",
|
|
41
|
+
"import": "./dist/generator/generate.mjs",
|
|
42
|
+
"require": "./dist/generator/generate.cjs"
|
|
43
|
+
}
|
|
44
|
+
},
|
|
45
|
+
"main": "./dist/index.cjs",
|
|
46
|
+
"module": "./dist/index.mjs",
|
|
47
|
+
"types": "./dist/index.d.ts",
|
|
48
|
+
"sideEffects": false,
|
|
49
|
+
"files": [
|
|
50
|
+
"dist"
|
|
51
|
+
],
|
|
39
52
|
"dependencies": {
|
|
40
|
-
"
|
|
53
|
+
"@contentrain/types": "0.1.0"
|
|
54
|
+
},
|
|
55
|
+
"devDependencies": {
|
|
56
|
+
"@types/node": "^22.0.0",
|
|
57
|
+
"tsdown": "^0.21.0",
|
|
58
|
+
"typescript": "^5.7.0",
|
|
59
|
+
"vitest": "^3.0.0"
|
|
41
60
|
},
|
|
42
61
|
"scripts": {
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
47
|
-
"test:run": "vitest run",
|
|
48
|
-
"test:coverage": "vitest run --coverage",
|
|
62
|
+
"build": "tsdown src/index.ts src/generator/generate.ts src/cli.ts --format esm,cjs --dts",
|
|
63
|
+
"dev": "tsdown src/index.ts src/generator/generate.ts src/cli.ts --format esm,cjs --dts --watch",
|
|
64
|
+
"test": "vitest run",
|
|
65
|
+
"typecheck": "tsc --noEmit",
|
|
49
66
|
"clean": "rm -rf dist"
|
|
50
67
|
}
|
|
51
68
|
}
|
package/dist/index.d.ts
DELETED
|
@@ -1,291 +0,0 @@
|
|
|
1
|
-
interface ContentrainConfig {
|
|
2
|
-
contentDir: string;
|
|
3
|
-
defaultLocale?: string;
|
|
4
|
-
models: {
|
|
5
|
-
[modelId: string]: {
|
|
6
|
-
localized: boolean;
|
|
7
|
-
defaultLocale?: string;
|
|
8
|
-
locales?: string[];
|
|
9
|
-
};
|
|
10
|
-
};
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
interface BaseContentrainType {
|
|
14
|
-
ID: string;
|
|
15
|
-
createdAt: string;
|
|
16
|
-
updatedAt: string;
|
|
17
|
-
status: 'draft' | 'changed' | 'publish';
|
|
18
|
-
scheduled: boolean;
|
|
19
|
-
_relations?: {
|
|
20
|
-
[key: string]: BaseContentrainType | BaseContentrainType[];
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
type ContentrainStatus = 'draft' | 'changed' | 'publish';
|
|
24
|
-
interface ModelMetadata {
|
|
25
|
-
name: string;
|
|
26
|
-
modelId: string;
|
|
27
|
-
localization: boolean;
|
|
28
|
-
type: 'JSON';
|
|
29
|
-
createdBy: string;
|
|
30
|
-
isServerless: boolean;
|
|
31
|
-
}
|
|
32
|
-
interface FieldMetadata {
|
|
33
|
-
name: string;
|
|
34
|
-
fieldId: string;
|
|
35
|
-
modelId: string;
|
|
36
|
-
componentId: ContentrainComponentId;
|
|
37
|
-
fieldType: ContentrainFieldType;
|
|
38
|
-
options: FieldOptions;
|
|
39
|
-
validations: FieldValidations;
|
|
40
|
-
system?: boolean;
|
|
41
|
-
defaultField?: boolean;
|
|
42
|
-
}
|
|
43
|
-
type ContentrainFieldType = 'string' | 'number' | 'boolean' | 'array' | 'date' | 'media' | 'relation';
|
|
44
|
-
type ContentrainComponentId = 'single-line-text' | 'multi-line-text' | 'email' | 'url' | 'slug' | 'color' | 'json' | 'md-editor' | 'rich-text-editor' | 'integer' | 'decimal' | 'rating' | 'percent' | 'phone-number' | 'checkbox' | 'switch' | 'date' | 'date-time' | 'media' | 'one-to-one' | 'one-to-many';
|
|
45
|
-
interface FieldOptions {
|
|
46
|
-
'title-field'?: {
|
|
47
|
-
value: boolean;
|
|
48
|
-
};
|
|
49
|
-
'default-value'?: {
|
|
50
|
-
value: boolean;
|
|
51
|
-
form: {
|
|
52
|
-
[key: string]: {
|
|
53
|
-
value: any;
|
|
54
|
-
};
|
|
55
|
-
};
|
|
56
|
-
};
|
|
57
|
-
'reference'?: {
|
|
58
|
-
value: boolean;
|
|
59
|
-
form: {
|
|
60
|
-
reference: {
|
|
61
|
-
value: string;
|
|
62
|
-
};
|
|
63
|
-
};
|
|
64
|
-
};
|
|
65
|
-
}
|
|
66
|
-
interface FieldValidations {
|
|
67
|
-
'required-field'?: {
|
|
68
|
-
value: boolean;
|
|
69
|
-
};
|
|
70
|
-
'unique-field'?: {
|
|
71
|
-
value: boolean;
|
|
72
|
-
};
|
|
73
|
-
'input-range-field'?: {
|
|
74
|
-
value: {
|
|
75
|
-
min: number;
|
|
76
|
-
max: number;
|
|
77
|
-
};
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
type ContentrainLocales = string;
|
|
81
|
-
|
|
82
|
-
interface ContentLoaderOptions {
|
|
83
|
-
contentDir: string;
|
|
84
|
-
defaultLocale?: string;
|
|
85
|
-
cache?: boolean;
|
|
86
|
-
ttl?: number;
|
|
87
|
-
maxCacheSize?: number;
|
|
88
|
-
modelTTL?: {
|
|
89
|
-
[model: string]: number;
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
interface ModelConfig {
|
|
93
|
-
metadata: ModelMetadata;
|
|
94
|
-
fields: FieldMetadata[];
|
|
95
|
-
}
|
|
96
|
-
interface ContentFile<T extends BaseContentrainType = BaseContentrainType> {
|
|
97
|
-
model: string;
|
|
98
|
-
locale?: string;
|
|
99
|
-
data: T[];
|
|
100
|
-
}
|
|
101
|
-
interface AssetMetadata {
|
|
102
|
-
path: string;
|
|
103
|
-
mimetype: string;
|
|
104
|
-
size: number;
|
|
105
|
-
alt: string;
|
|
106
|
-
meta: {
|
|
107
|
-
user: {
|
|
108
|
-
name: string;
|
|
109
|
-
email: string;
|
|
110
|
-
avatar: string;
|
|
111
|
-
};
|
|
112
|
-
createdAt: string;
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
interface LoaderResult<T extends BaseContentrainType = BaseContentrainType> {
|
|
116
|
-
model: ModelConfig;
|
|
117
|
-
content: {
|
|
118
|
-
[locale: string]: T[];
|
|
119
|
-
};
|
|
120
|
-
assets?: AssetMetadata[];
|
|
121
|
-
}
|
|
122
|
-
interface RelationConfig {
|
|
123
|
-
model: string;
|
|
124
|
-
type: 'one-to-one' | 'one-to-many';
|
|
125
|
-
foreignKey: string;
|
|
126
|
-
}
|
|
127
|
-
interface CacheStats {
|
|
128
|
-
hits: number;
|
|
129
|
-
misses: number;
|
|
130
|
-
size: number;
|
|
131
|
-
lastCleanup: number;
|
|
132
|
-
}
|
|
133
|
-
interface CacheEntry<T> {
|
|
134
|
-
data: T;
|
|
135
|
-
expireAt: number;
|
|
136
|
-
size: number;
|
|
137
|
-
createdAt: number;
|
|
138
|
-
}
|
|
139
|
-
interface MemoryCacheOptions {
|
|
140
|
-
maxSize?: number;
|
|
141
|
-
defaultTTL?: number;
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
type StringOperator = 'eq' | 'ne' | 'contains' | 'startsWith' | 'endsWith';
|
|
145
|
-
type NumericOperator = 'eq' | 'ne' | 'gt' | 'gte' | 'lt' | 'lte';
|
|
146
|
-
type ArrayOperator = 'in' | 'nin';
|
|
147
|
-
type Operator = StringOperator | NumericOperator | ArrayOperator;
|
|
148
|
-
interface Filter<T = any> {
|
|
149
|
-
field: string;
|
|
150
|
-
operator: Operator;
|
|
151
|
-
value: T extends Array<infer U> ? (ArrayOperator extends 'in' | 'nin' ? U[] : U) : T;
|
|
152
|
-
}
|
|
153
|
-
interface Sort {
|
|
154
|
-
field: string;
|
|
155
|
-
direction: 'asc' | 'desc';
|
|
156
|
-
}
|
|
157
|
-
interface Pagination {
|
|
158
|
-
limit?: number;
|
|
159
|
-
offset?: number;
|
|
160
|
-
}
|
|
161
|
-
interface Include {
|
|
162
|
-
[relation: string]: {
|
|
163
|
-
fields?: string[];
|
|
164
|
-
include?: Include;
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
interface QueryOptions {
|
|
168
|
-
locale?: string;
|
|
169
|
-
cache?: boolean;
|
|
170
|
-
ttl?: number;
|
|
171
|
-
}
|
|
172
|
-
interface QueryResult<T> {
|
|
173
|
-
data: T[];
|
|
174
|
-
total: number;
|
|
175
|
-
pagination?: {
|
|
176
|
-
limit: number;
|
|
177
|
-
offset: number;
|
|
178
|
-
hasMore: boolean;
|
|
179
|
-
};
|
|
180
|
-
}
|
|
181
|
-
interface QueryConfig<TFields extends BaseContentrainType, TLocales extends ContentrainLocales = 'en' | 'tr', TRelations extends Record<string, BaseContentrainType> = Record<string, never>> {
|
|
182
|
-
fields: TFields;
|
|
183
|
-
locales: TLocales;
|
|
184
|
-
relations: TRelations;
|
|
185
|
-
}
|
|
186
|
-
|
|
187
|
-
declare class ContentLoader {
|
|
188
|
-
private options;
|
|
189
|
-
private modelConfigs;
|
|
190
|
-
private relations;
|
|
191
|
-
private cache;
|
|
192
|
-
constructor(options: ContentLoaderOptions);
|
|
193
|
-
private getCacheKey;
|
|
194
|
-
private getModelTTL;
|
|
195
|
-
clearCache(): Promise<void>;
|
|
196
|
-
refreshCache(model: string): Promise<void>;
|
|
197
|
-
getCacheStats(): CacheStats;
|
|
198
|
-
private loadModelConfig;
|
|
199
|
-
private loadContentFile;
|
|
200
|
-
private loadRelations;
|
|
201
|
-
private getModelLocales;
|
|
202
|
-
load<T extends BaseContentrainType>(model: string): Promise<LoaderResult<T>>;
|
|
203
|
-
resolveRelation<T extends BaseContentrainType, R extends BaseContentrainType>(model: string, relationField: keyof T, data: T[], locale?: string): Promise<R[]>;
|
|
204
|
-
}
|
|
205
|
-
|
|
206
|
-
declare class QueryExecutor {
|
|
207
|
-
private loader;
|
|
208
|
-
constructor(loader: ContentLoader);
|
|
209
|
-
private applyFilters;
|
|
210
|
-
private applySorting;
|
|
211
|
-
private applyPagination;
|
|
212
|
-
private resolveIncludes;
|
|
213
|
-
private applyStringOperation;
|
|
214
|
-
execute<T extends BaseContentrainType>({ model, data, filters, includes, sorting, pagination, options, }: {
|
|
215
|
-
model: string;
|
|
216
|
-
data: T[];
|
|
217
|
-
filters?: Filter[];
|
|
218
|
-
includes?: Include;
|
|
219
|
-
sorting?: Sort[];
|
|
220
|
-
pagination?: {
|
|
221
|
-
limit?: number;
|
|
222
|
-
offset?: number;
|
|
223
|
-
};
|
|
224
|
-
options?: QueryOptions;
|
|
225
|
-
}): Promise<QueryResult<T>>;
|
|
226
|
-
}
|
|
227
|
-
|
|
228
|
-
declare class ContentrainQueryBuilder<TFields extends BaseContentrainType, TLocales extends ContentrainLocales = 'en' | 'tr', TRelations extends Record<string, BaseContentrainType> = Record<string, never>> {
|
|
229
|
-
private model;
|
|
230
|
-
private filters;
|
|
231
|
-
private includes;
|
|
232
|
-
private sorting;
|
|
233
|
-
private pagination;
|
|
234
|
-
private options;
|
|
235
|
-
private executor;
|
|
236
|
-
private loader;
|
|
237
|
-
constructor(model: string, executor: QueryExecutor, loader: ContentLoader);
|
|
238
|
-
where<K extends keyof TFields, O extends Operator>(field: K, operator: O, value: O extends 'in' ? TFields[K][] : TFields[K]): this;
|
|
239
|
-
include<K extends keyof TRelations>(relation: K | K[]): this;
|
|
240
|
-
orderBy<K extends keyof TFields>(field: K, direction?: 'asc' | 'desc'): this;
|
|
241
|
-
limit(count: number): this;
|
|
242
|
-
offset(count: number): this;
|
|
243
|
-
locale(code: TLocales): this;
|
|
244
|
-
cache(ttl?: number): this;
|
|
245
|
-
noCache(): this;
|
|
246
|
-
bypassCache(): this;
|
|
247
|
-
toJSON(): {
|
|
248
|
-
model: string;
|
|
249
|
-
filters: Filter<any>[];
|
|
250
|
-
includes: Include;
|
|
251
|
-
sorting: Sort[];
|
|
252
|
-
pagination: Pagination;
|
|
253
|
-
options: QueryOptions;
|
|
254
|
-
};
|
|
255
|
-
get(): Promise<QueryResult<TFields>>;
|
|
256
|
-
first(): Promise<TFields | null>;
|
|
257
|
-
count(): Promise<number>;
|
|
258
|
-
}
|
|
259
|
-
|
|
260
|
-
declare class MemoryCache {
|
|
261
|
-
private cache;
|
|
262
|
-
private options;
|
|
263
|
-
private stats;
|
|
264
|
-
constructor(options?: MemoryCacheOptions);
|
|
265
|
-
private calculateSize;
|
|
266
|
-
set<T>(key: string, data: T, ttl?: number): Promise<void>;
|
|
267
|
-
private findOldestKey;
|
|
268
|
-
get<T>(key: string): Promise<T | null>;
|
|
269
|
-
delete(key: string): Promise<void>;
|
|
270
|
-
clear(): Promise<void>;
|
|
271
|
-
private cleanupCache;
|
|
272
|
-
getStats(): CacheStats;
|
|
273
|
-
}
|
|
274
|
-
|
|
275
|
-
declare const logger: {
|
|
276
|
-
debug: (...args: unknown[]) => void;
|
|
277
|
-
error: (...args: unknown[]) => void;
|
|
278
|
-
};
|
|
279
|
-
|
|
280
|
-
declare class ContentrainSDK {
|
|
281
|
-
private loader;
|
|
282
|
-
private executor;
|
|
283
|
-
constructor(options: ContentLoaderOptions);
|
|
284
|
-
query<T extends QueryConfig<BaseContentrainType, string, Record<string, BaseContentrainType>>>(model: string): ContentrainQueryBuilder<T['fields'], T['locales'], T['relations']>;
|
|
285
|
-
load<T extends BaseContentrainType>(model: string): Promise<LoaderResult<T>>;
|
|
286
|
-
clearCache(): Promise<void>;
|
|
287
|
-
refreshCache(model: string): Promise<void>;
|
|
288
|
-
getCacheStats(): CacheStats;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
export { type ArrayOperator, type AssetMetadata, type BaseContentrainType, type CacheEntry, type CacheStats, type ContentFile, ContentLoader, type ContentLoaderOptions, type ContentrainComponentId, type ContentrainConfig, type ContentrainFieldType, type ContentrainLocales, ContentrainQueryBuilder, ContentrainSDK, type ContentrainStatus, type FieldMetadata, type FieldOptions, type FieldValidations, type Filter, type Include, type LoaderResult, MemoryCache, type MemoryCacheOptions, type ModelConfig, type ModelMetadata, type NumericOperator, type Operator, type Pagination, type QueryConfig, QueryExecutor, type QueryOptions, type QueryResult, type RelationConfig, type Sort, type StringOperator, logger };
|