node-type-registry 0.19.0 → 0.20.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/authz/authz-allow-all.js +10 -10
  2. package/authz/authz-composite.js +28 -28
  3. package/authz/authz-deny-all.js +10 -10
  4. package/authz/authz-direct-owner-any.js +19 -18
  5. package/authz/authz-direct-owner.js +17 -16
  6. package/authz/authz-entity-membership.js +39 -38
  7. package/authz/authz-member-list.js +17 -16
  8. package/authz/authz-membership-check.js +34 -34
  9. package/authz/authz-not-read-only.js +23 -22
  10. package/authz/authz-org-hierarchy.js +33 -31
  11. package/authz/authz-peer-ownership.js +40 -39
  12. package/authz/authz-publishable.js +26 -24
  13. package/authz/authz-related-entity-membership.js +57 -55
  14. package/authz/authz-related-member-list.js +35 -32
  15. package/authz/authz-related-peer-ownership.js +62 -59
  16. package/authz/authz-temporal.js +32 -30
  17. package/authz/index.d.ts +9 -9
  18. package/authz/index.js +19 -19
  19. package/blueprint-types.generated.js +1 -1
  20. package/codegen/generate-types.js +1 -1
  21. package/data/data-composite-field.js +27 -25
  22. package/data/data-direct-owner.js +24 -23
  23. package/data/data-entity-membership.js +24 -23
  24. package/data/data-force-current-user.js +17 -16
  25. package/data/data-id.js +16 -15
  26. package/data/data-immutable-fields.js +20 -19
  27. package/data/data-inflection.js +33 -32
  28. package/data/data-inherit-from-parent.js +31 -29
  29. package/data/data-job-trigger.js +87 -84
  30. package/data/data-jsonb.js +27 -26
  31. package/data/data-owned-fields.js +25 -23
  32. package/data/data-ownership-in-entity.js +21 -21
  33. package/data/data-peoplestamps.js +19 -19
  34. package/data/data-publishable.js +16 -16
  35. package/data/data-slug.js +21 -19
  36. package/data/data-soft-delete.js +14 -14
  37. package/data/data-status-field.js +32 -31
  38. package/data/data-tags.js +23 -22
  39. package/data/data-timestamps.js +15 -15
  40. package/data/index.d.ts +17 -17
  41. package/data/index.js +35 -35
  42. package/data/search-bm25.js +34 -33
  43. package/data/search-full-text.js +49 -47
  44. package/data/search-spatial-aggregate.js +77 -74
  45. package/data/search-spatial.js +51 -50
  46. package/data/search-trgm.js +20 -19
  47. package/data/search-unified.js +170 -162
  48. package/data/search-vector.js +104 -101
  49. package/data/table-organization-settings.js +13 -13
  50. package/data/table-user-profiles.js +13 -13
  51. package/data/table-user-settings.js +13 -13
  52. package/esm/authz/authz-allow-all.js +10 -10
  53. package/esm/authz/authz-composite.js +28 -28
  54. package/esm/authz/authz-deny-all.js +10 -10
  55. package/esm/authz/authz-direct-owner-any.js +19 -18
  56. package/esm/authz/authz-direct-owner.js +17 -16
  57. package/esm/authz/authz-entity-membership.js +39 -38
  58. package/esm/authz/authz-member-list.js +17 -16
  59. package/esm/authz/authz-membership-check.js +34 -34
  60. package/esm/authz/authz-not-read-only.js +23 -22
  61. package/esm/authz/authz-org-hierarchy.js +33 -31
  62. package/esm/authz/authz-peer-ownership.js +40 -39
  63. package/esm/authz/authz-publishable.js +26 -24
  64. package/esm/authz/authz-related-entity-membership.js +57 -55
  65. package/esm/authz/authz-related-member-list.js +35 -32
  66. package/esm/authz/authz-related-peer-ownership.js +62 -59
  67. package/esm/authz/authz-temporal.js +32 -30
  68. package/esm/authz/index.d.ts +9 -9
  69. package/esm/authz/index.js +9 -9
  70. package/esm/blueprint-types.generated.js +1 -1
  71. package/esm/codegen/generate-types.js +1 -1
  72. package/esm/data/data-composite-field.js +27 -25
  73. package/esm/data/data-direct-owner.js +24 -23
  74. package/esm/data/data-entity-membership.js +24 -23
  75. package/esm/data/data-force-current-user.js +17 -16
  76. package/esm/data/data-id.js +16 -15
  77. package/esm/data/data-immutable-fields.js +20 -19
  78. package/esm/data/data-inflection.js +33 -32
  79. package/esm/data/data-inherit-from-parent.js +31 -29
  80. package/esm/data/data-job-trigger.js +87 -84
  81. package/esm/data/data-jsonb.js +27 -26
  82. package/esm/data/data-owned-fields.js +25 -23
  83. package/esm/data/data-ownership-in-entity.js +21 -21
  84. package/esm/data/data-peoplestamps.js +19 -19
  85. package/esm/data/data-publishable.js +16 -16
  86. package/esm/data/data-slug.js +21 -19
  87. package/esm/data/data-soft-delete.js +14 -14
  88. package/esm/data/data-status-field.js +32 -31
  89. package/esm/data/data-tags.js +23 -22
  90. package/esm/data/data-timestamps.js +15 -15
  91. package/esm/data/index.d.ts +17 -17
  92. package/esm/data/index.js +17 -17
  93. package/esm/data/search-bm25.js +34 -33
  94. package/esm/data/search-full-text.js +49 -47
  95. package/esm/data/search-spatial-aggregate.js +77 -74
  96. package/esm/data/search-spatial.js +51 -50
  97. package/esm/data/search-trgm.js +20 -19
  98. package/esm/data/search-unified.js +170 -162
  99. package/esm/data/search-vector.js +104 -101
  100. package/esm/data/table-organization-settings.js +13 -13
  101. package/esm/data/table-user-profiles.js +13 -13
  102. package/esm/data/table-user-settings.js +13 -13
  103. package/esm/index.d.ts +3 -3
  104. package/esm/index.js +3 -3
  105. package/esm/module-presets/auth-email-magic.js +2 -2
  106. package/esm/module-presets/auth-email.js +8 -8
  107. package/esm/module-presets/auth-passkey.js +4 -4
  108. package/esm/module-presets/auth-sso.js +7 -7
  109. package/esm/module-presets/full.js +1 -1
  110. package/esm/module-presets/index.d.ts +5 -5
  111. package/esm/module-presets/index.js +4 -4
  112. package/esm/relation/index.d.ts +1 -1
  113. package/esm/relation/index.js +1 -1
  114. package/esm/relation/relation-belongs-to.js +41 -40
  115. package/esm/relation/relation-has-many.js +42 -41
  116. package/esm/relation/relation-has-one.js +42 -41
  117. package/esm/relation/relation-many-to-many.js +70 -68
  118. package/esm/relation/relation-spatial.js +54 -54
  119. package/esm/view/index.d.ts +3 -3
  120. package/esm/view/index.js +3 -3
  121. package/esm/view/view-aggregated.js +50 -48
  122. package/esm/view/view-composite.js +18 -18
  123. package/esm/view/view-filtered-table.js +37 -36
  124. package/esm/view/view-joined-tables.js +65 -61
  125. package/esm/view/view-table-projection.js +29 -28
  126. package/index.d.ts +3 -3
  127. package/index.js +3 -3
  128. package/module-presets/auth-email-magic.js +2 -2
  129. package/module-presets/auth-email.js +8 -8
  130. package/module-presets/auth-passkey.js +4 -4
  131. package/module-presets/auth-sso.js +7 -7
  132. package/module-presets/full.js +1 -1
  133. package/module-presets/index.d.ts +5 -5
  134. package/module-presets/index.js +7 -7
  135. package/package.json +2 -2
  136. package/relation/index.d.ts +1 -1
  137. package/relation/index.js +3 -3
  138. package/relation/relation-belongs-to.js +41 -40
  139. package/relation/relation-has-many.js +42 -41
  140. package/relation/relation-has-one.js +42 -41
  141. package/relation/relation-many-to-many.js +70 -68
  142. package/relation/relation-spatial.js +54 -54
  143. package/view/index.d.ts +3 -3
  144. package/view/index.js +7 -7
  145. package/view/view-aggregated.js +50 -48
  146. package/view/view-composite.js +18 -18
  147. package/view/view-filtered-table.js +37 -36
  148. package/view/view-joined-tables.js +65 -61
  149. package/view/view-table-projection.js +29 -28
@@ -1,67 +1,68 @@
1
1
  export const SearchSpatial = {
2
- "name": "SearchSpatial",
3
- "slug": "search_spatial",
4
- "category": "search",
5
- "display_name": "Spatial Search",
6
- "description": "Adds a PostGIS geometry or geography column with a spatial index (GiST or SP-GiST). Supports configurable geometry types (Point, Polygon, etc.), SRID, and dimensionality. The graphile-postgis plugin auto-detects geometry/geography columns by codec type for spatial filtering (ST_Contains, ST_DWithin, bbox operators).",
7
- "parameter_schema": {
8
- "type": "object",
9
- "properties": {
10
- "field_name": {
11
- "type": "string",
12
- "description": "Name of the geometry/geography column",
13
- "default": "geom"
2
+ name: 'SearchSpatial',
3
+ slug: 'search_spatial',
4
+ category: 'search',
5
+ display_name: 'Spatial Search',
6
+ description: 'Adds a PostGIS geometry or geography column with a spatial index (GiST or SP-GiST). Supports configurable geometry types (Point, Polygon, etc.), SRID, and dimensionality. The graphile-postgis plugin auto-detects geometry/geography columns by codec type for spatial filtering (ST_Contains, ST_DWithin, bbox operators).',
7
+ parameter_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ field_name: {
11
+ type: 'string',
12
+ format: 'column-ref',
13
+ description: 'Name of the geometry/geography column',
14
+ default: 'geom'
14
15
  },
15
- "geometry_type": {
16
- "type": "string",
17
- "enum": [
18
- "Point",
19
- "LineString",
20
- "Polygon",
21
- "MultiPoint",
22
- "MultiLineString",
23
- "MultiPolygon",
24
- "GeometryCollection",
25
- "Geometry"
16
+ geometry_type: {
17
+ type: 'string',
18
+ enum: [
19
+ 'Point',
20
+ 'LineString',
21
+ 'Polygon',
22
+ 'MultiPoint',
23
+ 'MultiLineString',
24
+ 'MultiPolygon',
25
+ 'GeometryCollection',
26
+ 'Geometry'
26
27
  ],
27
- "description": "PostGIS geometry type constraint",
28
- "default": "Point"
28
+ description: 'PostGIS geometry type constraint',
29
+ default: 'Point'
29
30
  },
30
- "srid": {
31
- "type": "integer",
32
- "description": "Spatial Reference System Identifier (e.g. 4326 for WGS84)",
33
- "default": 4326
31
+ srid: {
32
+ type: 'integer',
33
+ description: 'Spatial Reference System Identifier (e.g. 4326 for WGS84)',
34
+ default: 4326
34
35
  },
35
- "dimension": {
36
- "type": "integer",
37
- "enum": [
36
+ dimension: {
37
+ type: 'integer',
38
+ enum: [
38
39
  2,
39
40
  3,
40
41
  4
41
42
  ],
42
- "description": "Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)",
43
- "default": 2
43
+ description: 'Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)',
44
+ default: 2
44
45
  },
45
- "use_geography": {
46
- "type": "boolean",
47
- "description": "Use geography type instead of geometry (for geodetic calculations on the sphere)",
48
- "default": false
46
+ use_geography: {
47
+ type: 'boolean',
48
+ description: 'Use geography type instead of geometry (for geodetic calculations on the sphere)',
49
+ default: false
49
50
  },
50
- "index_method": {
51
- "type": "string",
52
- "enum": [
53
- "gist",
54
- "spgist"
51
+ index_method: {
52
+ type: 'string',
53
+ enum: [
54
+ 'gist',
55
+ 'spgist'
55
56
  ],
56
- "description": "Spatial index method",
57
- "default": "gist"
57
+ description: 'Spatial index method',
58
+ default: 'gist'
58
59
  }
59
60
  }
60
61
  },
61
- "tags": [
62
- "spatial",
63
- "postgis",
64
- "geometry",
65
- "schema"
62
+ tags: [
63
+ 'spatial',
64
+ 'postgis',
65
+ 'geometry',
66
+ 'schema'
66
67
  ]
67
68
  };
@@ -1,27 +1,28 @@
1
1
  export const SearchTrgm = {
2
- "name": "SearchTrgm",
3
- "slug": "search_trgm",
4
- "category": "search",
5
- "display_name": "Trigram Search",
6
- "description": "Creates GIN trigram indexes (gin_trgm_ops) on specified text/citext fields for fuzzy LIKE/ILIKE/similarity search. Adds @trgmSearch smart tag for PostGraphile integration. Fields must already exist on the table.",
7
- "parameter_schema": {
8
- "type": "object",
9
- "properties": {
10
- "fields": {
11
- "type": "array",
12
- "items": {
13
- "type": "string"
2
+ name: 'SearchTrgm',
3
+ slug: 'search_trgm',
4
+ category: 'search',
5
+ display_name: 'Trigram Search',
6
+ description: 'Creates GIN trigram indexes (gin_trgm_ops) on specified text/citext fields for fuzzy LIKE/ILIKE/similarity search. Adds @trgmSearch smart tag for PostGraphile integration. Fields must already exist on the table.',
7
+ parameter_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ fields: {
11
+ type: 'array',
12
+ items: {
13
+ type: 'string',
14
+ format: 'column-ref'
14
15
  },
15
- "description": "Field names to create trigram indexes on (fields must already exist on the table)"
16
+ description: 'Field names to create trigram indexes on (fields must already exist on the table)'
16
17
  }
17
18
  },
18
- "required": [
19
- "fields"
19
+ required: [
20
+ 'fields'
20
21
  ]
21
22
  },
22
- "tags": [
23
- "search",
24
- "trigram",
25
- "schema"
23
+ tags: [
24
+ 'search',
25
+ 'trigram',
26
+ 'schema'
26
27
  ]
27
28
  };
@@ -1,205 +1,213 @@
1
1
  export const SearchUnified = {
2
- "name": "SearchUnified",
3
- "slug": "search_unified",
4
- "category": "search",
5
- "display_name": "Unified Search",
6
- "description": "Composite node type that orchestrates multiple search modalities (full-text search, BM25, embeddings, trigram) on a single table. Configures per-table search score weights, normalization strategy, and recency boost via the @searchConfig smart tag.",
7
- "parameter_schema": {
8
- "type": "object",
9
- "properties": {
10
- "full_text_search": {
11
- "type": "object",
12
- "description": "SearchFullText parameters. Omit to skip FTS setup.",
13
- "properties": {
14
- "field_name": {
15
- "type": "string",
16
- "default": "search"
17
- },
18
- "source_fields": {
19
- "type": "array",
20
- "items": {
21
- "type": "object",
22
- "properties": {
23
- "field": {
24
- "type": "string"
2
+ name: 'SearchUnified',
3
+ slug: 'search_unified',
4
+ category: 'search',
5
+ display_name: 'Unified Search',
6
+ description: 'Composite node type that orchestrates multiple search modalities (full-text search, BM25, embeddings, trigram) on a single table. Configures per-table search score weights, normalization strategy, and recency boost via the @searchConfig smart tag.',
7
+ parameter_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ full_text_search: {
11
+ type: 'object',
12
+ description: 'SearchFullText parameters. Omit to skip FTS setup.',
13
+ properties: {
14
+ field_name: {
15
+ type: 'string',
16
+ format: 'column-ref',
17
+ default: 'search'
18
+ },
19
+ source_fields: {
20
+ type: 'array',
21
+ items: {
22
+ type: 'object',
23
+ properties: {
24
+ field: {
25
+ type: 'string',
26
+ format: 'column-ref'
25
27
  },
26
- "weight": {
27
- "type": "string",
28
- "enum": [
29
- "A",
30
- "B",
31
- "C",
32
- "D"
28
+ weight: {
29
+ type: 'string',
30
+ enum: [
31
+ 'A',
32
+ 'B',
33
+ 'C',
34
+ 'D'
33
35
  ]
34
36
  },
35
- "lang": {
36
- "type": "string"
37
+ lang: {
38
+ type: 'string'
37
39
  }
38
40
  },
39
- "required": [
40
- "field"
41
+ required: [
42
+ 'field'
41
43
  ]
42
44
  }
43
45
  },
44
- "search_score_weight": {
45
- "type": "number",
46
- "default": 1
46
+ search_score_weight: {
47
+ type: 'number',
48
+ default: 1
47
49
  }
48
50
  }
49
51
  },
50
- "bm25": {
51
- "type": "object",
52
- "description": "SearchBm25 parameters. Omit to skip BM25 setup.",
53
- "properties": {
54
- "field_name": {
55
- "type": "string"
56
- },
57
- "text_config": {
58
- "type": "string",
59
- "default": "english"
60
- },
61
- "k1": {
62
- "type": "number"
63
- },
64
- "b": {
65
- "type": "number"
66
- },
67
- "search_score_weight": {
68
- "type": "number",
69
- "default": 1
52
+ bm25: {
53
+ type: 'object',
54
+ description: 'SearchBm25 parameters. Omit to skip BM25 setup.',
55
+ properties: {
56
+ field_name: {
57
+ type: 'string',
58
+ format: 'column-ref'
59
+ },
60
+ text_config: {
61
+ type: 'string',
62
+ default: 'english'
63
+ },
64
+ k1: {
65
+ type: 'number'
66
+ },
67
+ b: {
68
+ type: 'number'
69
+ },
70
+ search_score_weight: {
71
+ type: 'number',
72
+ default: 1
70
73
  }
71
74
  }
72
75
  },
73
- "embedding": {
74
- "type": "object",
75
- "description": "SearchVector parameters. Omit to skip embedding setup.",
76
- "properties": {
77
- "field_name": {
78
- "type": "string",
79
- "default": "embedding"
80
- },
81
- "dimensions": {
82
- "type": "integer",
83
- "default": 768
84
- },
85
- "index_method": {
86
- "type": "string",
87
- "enum": [
88
- "hnsw",
89
- "ivfflat"
76
+ embedding: {
77
+ type: 'object',
78
+ description: 'SearchVector parameters. Omit to skip embedding setup.',
79
+ properties: {
80
+ field_name: {
81
+ type: 'string',
82
+ format: 'column-ref',
83
+ default: 'embedding'
84
+ },
85
+ dimensions: {
86
+ type: 'integer',
87
+ default: 768
88
+ },
89
+ index_method: {
90
+ type: 'string',
91
+ enum: [
92
+ 'hnsw',
93
+ 'ivfflat'
90
94
  ]
91
95
  },
92
- "metric": {
93
- "type": "string",
94
- "enum": [
95
- "cosine",
96
- "l2",
97
- "ip"
96
+ metric: {
97
+ type: 'string',
98
+ enum: [
99
+ 'cosine',
100
+ 'l2',
101
+ 'ip'
98
102
  ]
99
103
  },
100
- "source_fields": {
101
- "type": "array",
102
- "items": {
103
- "type": "string"
104
+ source_fields: {
105
+ type: 'array',
106
+ items: {
107
+ type: 'string',
108
+ format: 'column-ref'
104
109
  }
105
110
  },
106
- "search_score_weight": {
107
- "type": "number",
108
- "default": 1
109
- },
110
- "chunks": {
111
- "type": "object",
112
- "description": "Chunking configuration for long-text embedding. Creates an embedding_chunks record that drives automatic text splitting and per-chunk embedding. Omit to skip chunking.",
113
- "properties": {
114
- "content_field_name": {
115
- "type": "string",
116
- "description": "Name of the text content column in the chunks table",
117
- "default": "content"
111
+ search_score_weight: {
112
+ type: 'number',
113
+ default: 1
114
+ },
115
+ chunks: {
116
+ type: 'object',
117
+ description: 'Chunking configuration for long-text embedding. Creates an embedding_chunks record that drives automatic text splitting and per-chunk embedding. Omit to skip chunking.',
118
+ properties: {
119
+ content_field_name: {
120
+ type: 'string',
121
+ format: 'column-ref',
122
+ description: 'Name of the text content column in the chunks table',
123
+ default: 'content'
118
124
  },
119
- "chunk_size": {
120
- "type": "integer",
121
- "description": "Maximum number of characters per chunk",
122
- "default": 1000
125
+ chunk_size: {
126
+ type: 'integer',
127
+ description: 'Maximum number of characters per chunk',
128
+ default: 1000
123
129
  },
124
- "chunk_overlap": {
125
- "type": "integer",
126
- "description": "Number of overlapping characters between consecutive chunks",
127
- "default": 200
130
+ chunk_overlap: {
131
+ type: 'integer',
132
+ description: 'Number of overlapping characters between consecutive chunks',
133
+ default: 200
128
134
  },
129
- "chunk_strategy": {
130
- "type": "string",
131
- "enum": [
132
- "fixed",
133
- "sentence",
134
- "paragraph",
135
- "semantic"
135
+ chunk_strategy: {
136
+ type: 'string',
137
+ enum: [
138
+ 'fixed',
139
+ 'sentence',
140
+ 'paragraph',
141
+ 'semantic'
136
142
  ],
137
- "description": "Strategy for splitting text into chunks",
138
- "default": "fixed"
143
+ description: 'Strategy for splitting text into chunks',
144
+ default: 'fixed'
139
145
  },
140
- "metadata_fields": {
141
- "type": "object",
142
- "description": "Metadata fields from parent to copy into chunks"
146
+ metadata_fields: {
147
+ type: 'object',
148
+ description: 'Metadata fields from parent to copy into chunks'
143
149
  },
144
- "enqueue_chunking_job": {
145
- "type": "boolean",
146
- "description": "Whether to auto-enqueue a chunking job on insert/update",
147
- "default": true
150
+ enqueue_chunking_job: {
151
+ type: 'boolean',
152
+ description: 'Whether to auto-enqueue a chunking job on insert/update',
153
+ default: true
148
154
  },
149
- "chunking_task_name": {
150
- "type": "string",
151
- "description": "Task identifier for the chunking job queue",
152
- "default": "generate_chunks"
155
+ chunking_task_name: {
156
+ type: 'string',
157
+ description: 'Task identifier for the chunking job queue',
158
+ default: 'generate_chunks'
153
159
  }
154
160
  }
155
161
  }
156
162
  }
157
163
  },
158
- "trgm_fields": {
159
- "type": "array",
160
- "items": {
161
- "type": "string"
164
+ trgm_fields: {
165
+ type: 'array',
166
+ items: {
167
+ type: 'string',
168
+ format: 'column-ref'
162
169
  },
163
- "description": "Field names to tag with @trgmSearch for fuzzy/typo-tolerant matching"
170
+ description: 'Field names to tag with @trgmSearch for fuzzy/typo-tolerant matching'
164
171
  },
165
- "search_config": {
166
- "type": "object",
167
- "description": "Unified search score configuration written to @searchConfig smart tag",
168
- "properties": {
169
- "weights": {
170
- "type": "object",
171
- "description": "Per-algorithm weights: {tsv: 1.5, bm25: 1.0, pgvector: 0.8, trgm: 0.3}"
172
- },
173
- "normalization": {
174
- "type": "string",
175
- "enum": [
176
- "linear",
177
- "sigmoid"
172
+ search_config: {
173
+ type: 'object',
174
+ description: 'Unified search score configuration written to @searchConfig smart tag',
175
+ properties: {
176
+ weights: {
177
+ type: 'object',
178
+ description: 'Per-algorithm weights: {tsv: 1.5, bm25: 1.0, pgvector: 0.8, trgm: 0.3}'
179
+ },
180
+ normalization: {
181
+ type: 'string',
182
+ enum: [
183
+ 'linear',
184
+ 'sigmoid'
178
185
  ],
179
- "description": "Score normalization strategy",
180
- "default": "linear"
181
- },
182
- "boost_recent": {
183
- "type": "boolean",
184
- "description": "Enable recency boost for search results",
185
- "default": false
186
- },
187
- "boost_recency_field": {
188
- "type": "string",
189
- "description": "Timestamp field for recency boost (e.g. created_at, updated_at)"
190
- },
191
- "boost_recency_decay": {
192
- "type": "number",
193
- "description": "Decay rate for recency boost (0-1, lower = faster decay)",
194
- "default": 0.5
186
+ description: 'Score normalization strategy',
187
+ default: 'linear'
188
+ },
189
+ boost_recent: {
190
+ type: 'boolean',
191
+ description: 'Enable recency boost for search results',
192
+ default: false
193
+ },
194
+ boost_recency_field: {
195
+ type: 'string',
196
+ format: 'column-ref',
197
+ description: 'Timestamp field for recency boost (e.g. created_at, updated_at)'
198
+ },
199
+ boost_recency_decay: {
200
+ type: 'number',
201
+ description: 'Decay rate for recency boost (0-1, lower = faster decay)',
202
+ default: 0.5
195
203
  }
196
204
  }
197
205
  }
198
206
  }
199
207
  },
200
- "tags": [
201
- "search",
202
- "composite",
203
- "schema"
208
+ tags: [
209
+ 'search',
210
+ 'composite',
211
+ 'schema'
204
212
  ]
205
213
  };