node-type-registry 0.18.1 → 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 (151) 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.d.ts +10 -17
  20. package/blueprint-types.generated.js +1 -1
  21. package/codegen/generate-types.js +10 -21
  22. package/data/data-composite-field.js +27 -25
  23. package/data/data-direct-owner.js +24 -23
  24. package/data/data-entity-membership.js +24 -23
  25. package/data/data-force-current-user.js +17 -16
  26. package/data/data-id.js +16 -15
  27. package/data/data-immutable-fields.js +20 -19
  28. package/data/data-inflection.js +33 -32
  29. package/data/data-inherit-from-parent.js +31 -29
  30. package/data/data-job-trigger.js +87 -84
  31. package/data/data-jsonb.js +27 -26
  32. package/data/data-owned-fields.js +25 -23
  33. package/data/data-ownership-in-entity.js +21 -21
  34. package/data/data-peoplestamps.js +19 -19
  35. package/data/data-publishable.js +16 -16
  36. package/data/data-slug.js +21 -19
  37. package/data/data-soft-delete.js +14 -14
  38. package/data/data-status-field.js +32 -31
  39. package/data/data-tags.js +23 -22
  40. package/data/data-timestamps.js +15 -15
  41. package/data/index.d.ts +17 -17
  42. package/data/index.js +35 -35
  43. package/data/search-bm25.js +34 -33
  44. package/data/search-full-text.js +49 -47
  45. package/data/search-spatial-aggregate.js +77 -74
  46. package/data/search-spatial.js +51 -50
  47. package/data/search-trgm.js +20 -19
  48. package/data/search-unified.js +170 -162
  49. package/data/search-vector.js +104 -101
  50. package/data/table-organization-settings.js +13 -13
  51. package/data/table-user-profiles.js +13 -13
  52. package/data/table-user-settings.js +13 -13
  53. package/esm/authz/authz-allow-all.js +10 -10
  54. package/esm/authz/authz-composite.js +28 -28
  55. package/esm/authz/authz-deny-all.js +10 -10
  56. package/esm/authz/authz-direct-owner-any.js +19 -18
  57. package/esm/authz/authz-direct-owner.js +17 -16
  58. package/esm/authz/authz-entity-membership.js +39 -38
  59. package/esm/authz/authz-member-list.js +17 -16
  60. package/esm/authz/authz-membership-check.js +34 -34
  61. package/esm/authz/authz-not-read-only.js +23 -22
  62. package/esm/authz/authz-org-hierarchy.js +33 -31
  63. package/esm/authz/authz-peer-ownership.js +40 -39
  64. package/esm/authz/authz-publishable.js +26 -24
  65. package/esm/authz/authz-related-entity-membership.js +57 -55
  66. package/esm/authz/authz-related-member-list.js +35 -32
  67. package/esm/authz/authz-related-peer-ownership.js +62 -59
  68. package/esm/authz/authz-temporal.js +32 -30
  69. package/esm/authz/index.d.ts +9 -9
  70. package/esm/authz/index.js +9 -9
  71. package/esm/blueprint-types.generated.d.ts +10 -17
  72. package/esm/blueprint-types.generated.js +1 -1
  73. package/esm/codegen/generate-types.js +10 -21
  74. package/esm/data/data-composite-field.js +27 -25
  75. package/esm/data/data-direct-owner.js +24 -23
  76. package/esm/data/data-entity-membership.js +24 -23
  77. package/esm/data/data-force-current-user.js +17 -16
  78. package/esm/data/data-id.js +16 -15
  79. package/esm/data/data-immutable-fields.js +20 -19
  80. package/esm/data/data-inflection.js +33 -32
  81. package/esm/data/data-inherit-from-parent.js +31 -29
  82. package/esm/data/data-job-trigger.js +87 -84
  83. package/esm/data/data-jsonb.js +27 -26
  84. package/esm/data/data-owned-fields.js +25 -23
  85. package/esm/data/data-ownership-in-entity.js +21 -21
  86. package/esm/data/data-peoplestamps.js +19 -19
  87. package/esm/data/data-publishable.js +16 -16
  88. package/esm/data/data-slug.js +21 -19
  89. package/esm/data/data-soft-delete.js +14 -14
  90. package/esm/data/data-status-field.js +32 -31
  91. package/esm/data/data-tags.js +23 -22
  92. package/esm/data/data-timestamps.js +15 -15
  93. package/esm/data/index.d.ts +17 -17
  94. package/esm/data/index.js +17 -17
  95. package/esm/data/search-bm25.js +34 -33
  96. package/esm/data/search-full-text.js +49 -47
  97. package/esm/data/search-spatial-aggregate.js +77 -74
  98. package/esm/data/search-spatial.js +51 -50
  99. package/esm/data/search-trgm.js +20 -19
  100. package/esm/data/search-unified.js +170 -162
  101. package/esm/data/search-vector.js +104 -101
  102. package/esm/data/table-organization-settings.js +13 -13
  103. package/esm/data/table-user-profiles.js +13 -13
  104. package/esm/data/table-user-settings.js +13 -13
  105. package/esm/index.d.ts +3 -3
  106. package/esm/index.js +3 -3
  107. package/esm/module-presets/auth-email-magic.js +2 -2
  108. package/esm/module-presets/auth-email.js +8 -8
  109. package/esm/module-presets/auth-passkey.js +4 -4
  110. package/esm/module-presets/auth-sso.js +7 -7
  111. package/esm/module-presets/full.js +1 -1
  112. package/esm/module-presets/index.d.ts +5 -5
  113. package/esm/module-presets/index.js +4 -4
  114. package/esm/relation/index.d.ts +1 -1
  115. package/esm/relation/index.js +1 -1
  116. package/esm/relation/relation-belongs-to.js +41 -40
  117. package/esm/relation/relation-has-many.js +42 -41
  118. package/esm/relation/relation-has-one.js +42 -41
  119. package/esm/relation/relation-many-to-many.js +70 -68
  120. package/esm/relation/relation-spatial.js +54 -54
  121. package/esm/view/index.d.ts +3 -3
  122. package/esm/view/index.js +3 -3
  123. package/esm/view/view-aggregated.js +50 -48
  124. package/esm/view/view-composite.js +18 -18
  125. package/esm/view/view-filtered-table.js +37 -36
  126. package/esm/view/view-joined-tables.js +65 -61
  127. package/esm/view/view-table-projection.js +29 -28
  128. package/index.d.ts +3 -3
  129. package/index.js +3 -3
  130. package/module-presets/auth-email-magic.js +2 -2
  131. package/module-presets/auth-email.js +8 -8
  132. package/module-presets/auth-passkey.js +4 -4
  133. package/module-presets/auth-sso.js +7 -7
  134. package/module-presets/full.js +1 -1
  135. package/module-presets/index.d.ts +5 -5
  136. package/module-presets/index.js +7 -7
  137. package/package.json +2 -2
  138. package/relation/index.d.ts +1 -1
  139. package/relation/index.js +3 -3
  140. package/relation/relation-belongs-to.js +41 -40
  141. package/relation/relation-has-many.js +42 -41
  142. package/relation/relation-has-one.js +42 -41
  143. package/relation/relation-many-to-many.js +70 -68
  144. package/relation/relation-spatial.js +54 -54
  145. package/view/index.d.ts +3 -3
  146. package/view/index.js +7 -7
  147. package/view/view-aggregated.js +50 -48
  148. package/view/view-composite.js +18 -18
  149. package/view/view-filtered-table.js +37 -36
  150. package/view/view-joined-tables.js +65 -61
  151. package/view/view-table-projection.js +29 -28
@@ -2,65 +2,67 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SearchFullText = void 0;
4
4
  exports.SearchFullText = {
5
- "name": "SearchFullText",
6
- "slug": "search_full_text",
7
- "category": "search",
8
- "display_name": "Full-Text Search",
9
- "description": "Adds a tsvector column with GIN index and automatic trigger population from source fields. Enables PostgreSQL full-text search with configurable weights and language support. Leverages the existing metaschema full_text_search infrastructure.",
10
- "parameter_schema": {
11
- "type": "object",
12
- "properties": {
13
- "field_name": {
14
- "type": "string",
15
- "description": "Name of the tsvector column",
16
- "default": "search"
5
+ name: 'SearchFullText',
6
+ slug: 'search_full_text',
7
+ category: 'search',
8
+ display_name: 'Full-Text Search',
9
+ description: 'Adds a tsvector column with GIN index and automatic trigger population from source fields. Enables PostgreSQL full-text search with configurable weights and language support. Leverages the existing metaschema full_text_search infrastructure.',
10
+ parameter_schema: {
11
+ type: 'object',
12
+ properties: {
13
+ field_name: {
14
+ type: 'string',
15
+ format: 'column-ref',
16
+ description: 'Name of the tsvector column',
17
+ default: 'search'
17
18
  },
18
- "source_fields": {
19
- "type": "array",
20
- "items": {
21
- "type": "object",
22
- "properties": {
23
- "field": {
24
- "type": "string",
25
- "description": "Name of the source column"
19
+ source_fields: {
20
+ type: 'array',
21
+ items: {
22
+ type: 'object',
23
+ properties: {
24
+ field: {
25
+ type: 'string',
26
+ format: 'column-ref',
27
+ description: 'Name of the source column'
26
28
  },
27
- "weight": {
28
- "type": "string",
29
- "enum": [
30
- "A",
31
- "B",
32
- "C",
33
- "D"
29
+ weight: {
30
+ type: 'string',
31
+ enum: [
32
+ 'A',
33
+ 'B',
34
+ 'C',
35
+ 'D'
34
36
  ],
35
- "description": "tsvector weight class (A=highest, D=lowest)",
36
- "default": "D"
37
+ description: 'tsvector weight class (A=highest, D=lowest)',
38
+ default: 'D'
37
39
  },
38
- "lang": {
39
- "type": "string",
40
- "description": "PostgreSQL text search configuration",
41
- "default": "english"
40
+ lang: {
41
+ type: 'string',
42
+ description: 'PostgreSQL text search configuration',
43
+ default: 'english'
42
44
  }
43
45
  },
44
- "required": [
45
- "field"
46
+ required: [
47
+ 'field'
46
48
  ]
47
49
  },
48
- "description": "Source columns that feed the tsvector. Each has a field name, weight (A-D), and language config."
50
+ description: 'Source columns that feed the tsvector. Each has a field name, weight (A-D), and language config.'
49
51
  },
50
- "search_score_weight": {
51
- "type": "number",
52
- "description": "Weight for this algorithm in composite searchScore",
53
- "default": 1
52
+ search_score_weight: {
53
+ type: 'number',
54
+ description: 'Weight for this algorithm in composite searchScore',
55
+ default: 1
54
56
  }
55
57
  },
56
- "required": [
57
- "source_fields"
58
+ required: [
59
+ 'source_fields'
58
60
  ]
59
61
  },
60
- "tags": [
61
- "search",
62
- "fts",
63
- "tsvector",
64
- "schema"
62
+ tags: [
63
+ 'search',
64
+ 'fts',
65
+ 'tsvector',
66
+ 'schema'
65
67
  ]
66
68
  };
@@ -2,99 +2,102 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SearchSpatialAggregate = void 0;
4
4
  exports.SearchSpatialAggregate = {
5
- "name": "SearchSpatialAggregate",
6
- "slug": "search_spatial_aggregate",
7
- "category": "search",
8
- "display_name": "Spatial Aggregate Search",
9
- "description": "Creates a derived/materialized geometry field on the parent table that automatically aggregates geometries from a source (child) table via triggers. When child rows are inserted/updated/deleted, the parent aggregate field is recalculated using the specified PostGIS aggregation function (ST_Union, ST_Collect, ST_ConvexHull, ST_ConcaveHull). Useful for materializing spatial boundaries from collections of points or polygons.",
10
- "parameter_schema": {
11
- "type": "object",
12
- "properties": {
13
- "field_name": {
14
- "type": "string",
15
- "description": "Name of the aggregate geometry column on the parent table",
16
- "default": "geom_aggregate"
5
+ name: 'SearchSpatialAggregate',
6
+ slug: 'search_spatial_aggregate',
7
+ category: 'search',
8
+ display_name: 'Spatial Aggregate Search',
9
+ description: 'Creates a derived/materialized geometry field on the parent table that automatically aggregates geometries from a source (child) table via triggers. When child rows are inserted/updated/deleted, the parent aggregate field is recalculated using the specified PostGIS aggregation function (ST_Union, ST_Collect, ST_ConvexHull, ST_ConcaveHull). Useful for materializing spatial boundaries from collections of points or polygons.',
10
+ parameter_schema: {
11
+ type: 'object',
12
+ properties: {
13
+ field_name: {
14
+ type: 'string',
15
+ format: 'column-ref',
16
+ description: 'Name of the aggregate geometry column on the parent table',
17
+ default: 'geom_aggregate'
17
18
  },
18
- "source_table_id": {
19
- "type": "string",
20
- "format": "uuid",
21
- "description": "UUID of the source (child) table containing individual geometries"
19
+ source_table_id: {
20
+ type: 'string',
21
+ format: 'uuid',
22
+ description: 'UUID of the source (child) table containing individual geometries'
22
23
  },
23
- "source_geom_field": {
24
- "type": "string",
25
- "description": "Name of the geometry column on the source table",
26
- "default": "geom"
24
+ source_geom_field: {
25
+ type: 'string',
26
+ format: 'column-ref',
27
+ description: 'Name of the geometry column on the source table',
28
+ default: 'geom'
27
29
  },
28
- "source_fk_field": {
29
- "type": "string",
30
- "description": "Name of the foreign key column on the source table pointing to the parent"
30
+ source_fk_field: {
31
+ type: 'string',
32
+ format: 'column-ref',
33
+ description: 'Name of the foreign key column on the source table pointing to the parent'
31
34
  },
32
- "aggregate_function": {
33
- "type": "string",
34
- "enum": [
35
- "union",
36
- "collect",
37
- "convex_hull",
38
- "concave_hull"
35
+ aggregate_function: {
36
+ type: 'string',
37
+ enum: [
38
+ 'union',
39
+ 'collect',
40
+ 'convex_hull',
41
+ 'concave_hull'
39
42
  ],
40
- "description": "PostGIS aggregation function: union (ST_Union, merges overlapping), collect (ST_Collect, groups without merging), convex_hull (smallest convex polygon), concave_hull (tighter boundary)",
41
- "default": "union"
43
+ description: 'PostGIS aggregation function: union (ST_Union, merges overlapping), collect (ST_Collect, groups without merging), convex_hull (smallest convex polygon), concave_hull (tighter boundary)',
44
+ default: 'union'
42
45
  },
43
- "geometry_type": {
44
- "type": "string",
45
- "enum": [
46
- "Point",
47
- "LineString",
48
- "Polygon",
49
- "MultiPoint",
50
- "MultiLineString",
51
- "MultiPolygon",
52
- "GeometryCollection",
53
- "Geometry"
46
+ geometry_type: {
47
+ type: 'string',
48
+ enum: [
49
+ 'Point',
50
+ 'LineString',
51
+ 'Polygon',
52
+ 'MultiPoint',
53
+ 'MultiLineString',
54
+ 'MultiPolygon',
55
+ 'GeometryCollection',
56
+ 'Geometry'
54
57
  ],
55
- "description": "Output geometry type constraint for the aggregate field",
56
- "default": "MultiPolygon"
58
+ description: 'Output geometry type constraint for the aggregate field',
59
+ default: 'MultiPolygon'
57
60
  },
58
- "srid": {
59
- "type": "integer",
60
- "description": "Spatial Reference System Identifier (e.g. 4326 for WGS84)",
61
- "default": 4326
61
+ srid: {
62
+ type: 'integer',
63
+ description: 'Spatial Reference System Identifier (e.g. 4326 for WGS84)',
64
+ default: 4326
62
65
  },
63
- "dimension": {
64
- "type": "integer",
65
- "enum": [
66
+ dimension: {
67
+ type: 'integer',
68
+ enum: [
66
69
  2,
67
70
  3,
68
71
  4
69
72
  ],
70
- "description": "Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)",
71
- "default": 2
73
+ description: 'Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)',
74
+ default: 2
72
75
  },
73
- "use_geography": {
74
- "type": "boolean",
75
- "description": "Use geography type instead of geometry",
76
- "default": false
76
+ use_geography: {
77
+ type: 'boolean',
78
+ description: 'Use geography type instead of geometry',
79
+ default: false
77
80
  },
78
- "index_method": {
79
- "type": "string",
80
- "enum": [
81
- "gist",
82
- "spgist"
81
+ index_method: {
82
+ type: 'string',
83
+ enum: [
84
+ 'gist',
85
+ 'spgist'
83
86
  ],
84
- "description": "Spatial index method for the aggregate field",
85
- "default": "gist"
87
+ description: 'Spatial index method for the aggregate field',
88
+ default: 'gist'
86
89
  }
87
90
  },
88
- "required": [
89
- "source_table_id",
90
- "source_fk_field"
91
+ required: [
92
+ 'source_table_id',
93
+ 'source_fk_field'
91
94
  ]
92
95
  },
93
- "tags": [
94
- "spatial",
95
- "postgis",
96
- "geometry",
97
- "aggregate",
98
- "schema"
96
+ tags: [
97
+ 'spatial',
98
+ 'postgis',
99
+ 'geometry',
100
+ 'aggregate',
101
+ 'schema'
99
102
  ]
100
103
  };
@@ -2,69 +2,70 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SearchSpatial = void 0;
4
4
  exports.SearchSpatial = {
5
- "name": "SearchSpatial",
6
- "slug": "search_spatial",
7
- "category": "search",
8
- "display_name": "Spatial Search",
9
- "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).",
10
- "parameter_schema": {
11
- "type": "object",
12
- "properties": {
13
- "field_name": {
14
- "type": "string",
15
- "description": "Name of the geometry/geography column",
16
- "default": "geom"
5
+ name: 'SearchSpatial',
6
+ slug: 'search_spatial',
7
+ category: 'search',
8
+ display_name: 'Spatial Search',
9
+ 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).',
10
+ parameter_schema: {
11
+ type: 'object',
12
+ properties: {
13
+ field_name: {
14
+ type: 'string',
15
+ format: 'column-ref',
16
+ description: 'Name of the geometry/geography column',
17
+ default: 'geom'
17
18
  },
18
- "geometry_type": {
19
- "type": "string",
20
- "enum": [
21
- "Point",
22
- "LineString",
23
- "Polygon",
24
- "MultiPoint",
25
- "MultiLineString",
26
- "MultiPolygon",
27
- "GeometryCollection",
28
- "Geometry"
19
+ geometry_type: {
20
+ type: 'string',
21
+ enum: [
22
+ 'Point',
23
+ 'LineString',
24
+ 'Polygon',
25
+ 'MultiPoint',
26
+ 'MultiLineString',
27
+ 'MultiPolygon',
28
+ 'GeometryCollection',
29
+ 'Geometry'
29
30
  ],
30
- "description": "PostGIS geometry type constraint",
31
- "default": "Point"
31
+ description: 'PostGIS geometry type constraint',
32
+ default: 'Point'
32
33
  },
33
- "srid": {
34
- "type": "integer",
35
- "description": "Spatial Reference System Identifier (e.g. 4326 for WGS84)",
36
- "default": 4326
34
+ srid: {
35
+ type: 'integer',
36
+ description: 'Spatial Reference System Identifier (e.g. 4326 for WGS84)',
37
+ default: 4326
37
38
  },
38
- "dimension": {
39
- "type": "integer",
40
- "enum": [
39
+ dimension: {
40
+ type: 'integer',
41
+ enum: [
41
42
  2,
42
43
  3,
43
44
  4
44
45
  ],
45
- "description": "Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)",
46
- "default": 2
46
+ description: 'Coordinate dimension (2=XY, 3=XYZ, 4=XYZM)',
47
+ default: 2
47
48
  },
48
- "use_geography": {
49
- "type": "boolean",
50
- "description": "Use geography type instead of geometry (for geodetic calculations on the sphere)",
51
- "default": false
49
+ use_geography: {
50
+ type: 'boolean',
51
+ description: 'Use geography type instead of geometry (for geodetic calculations on the sphere)',
52
+ default: false
52
53
  },
53
- "index_method": {
54
- "type": "string",
55
- "enum": [
56
- "gist",
57
- "spgist"
54
+ index_method: {
55
+ type: 'string',
56
+ enum: [
57
+ 'gist',
58
+ 'spgist'
58
59
  ],
59
- "description": "Spatial index method",
60
- "default": "gist"
60
+ description: 'Spatial index method',
61
+ default: 'gist'
61
62
  }
62
63
  }
63
64
  },
64
- "tags": [
65
- "spatial",
66
- "postgis",
67
- "geometry",
68
- "schema"
65
+ tags: [
66
+ 'spatial',
67
+ 'postgis',
68
+ 'geometry',
69
+ 'schema'
69
70
  ]
70
71
  };
@@ -2,29 +2,30 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.SearchTrgm = void 0;
4
4
  exports.SearchTrgm = {
5
- "name": "SearchTrgm",
6
- "slug": "search_trgm",
7
- "category": "search",
8
- "display_name": "Trigram Search",
9
- "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.",
10
- "parameter_schema": {
11
- "type": "object",
12
- "properties": {
13
- "fields": {
14
- "type": "array",
15
- "items": {
16
- "type": "string"
5
+ name: 'SearchTrgm',
6
+ slug: 'search_trgm',
7
+ category: 'search',
8
+ display_name: 'Trigram Search',
9
+ 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.',
10
+ parameter_schema: {
11
+ type: 'object',
12
+ properties: {
13
+ fields: {
14
+ type: 'array',
15
+ items: {
16
+ type: 'string',
17
+ format: 'column-ref'
17
18
  },
18
- "description": "Field names to create trigram indexes on (fields must already exist on the table)"
19
+ description: 'Field names to create trigram indexes on (fields must already exist on the table)'
19
20
  }
20
21
  },
21
- "required": [
22
- "fields"
22
+ required: [
23
+ 'fields'
23
24
  ]
24
25
  },
25
- "tags": [
26
- "search",
27
- "trigram",
28
- "schema"
26
+ tags: [
27
+ 'search',
28
+ 'trigram',
29
+ 'schema'
29
30
  ]
30
31
  };