node-type-registry 0.48.0 → 0.50.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/README.md CHANGED
@@ -135,6 +135,17 @@ Common issues and solutions for pgpm, PostgreSQL, and testing.
135
135
 
136
136
  * [constructive-skills](https://github.com/constructive-io/constructive-skills): **📖 Platform documentation and AI agent skills** — feature catalog, blueprint reference, SDK guides (i18n, billing, limits, events, uploads, security, entities, search, AI), and deployment guides.
137
137
 
138
+ Install skills for AI coding agents:
139
+
140
+ ```bash
141
+ # All platform skills (security, blueprints, codegen, billing, etc.)
142
+ npx skills add constructive-io/constructive-skills
143
+
144
+ # Individual repo skills (pgpm, testing, CLI, search, etc.)
145
+ npx skills add https://github.com/constructive-io/constructive --skill pgpm
146
+ npx skills add https://github.com/constructive-io/constructive --skill constructive-testing
147
+ ```
148
+
138
149
  ## Credits
139
150
 
140
151
  **🛠 Built by the [Constructive](https://constructive.io) team — creators of modular Postgres tooling for secure, composable backends. If you like our work, contribute on [GitHub](https://github.com/constructive-io).**
@@ -0,0 +1,2 @@
1
+ import type { NodeTypeDefinition } from '../types';
2
+ export declare const DataDenormalized: NodeTypeDefinition;
@@ -0,0 +1,71 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.DataDenormalized = void 0;
4
+ exports.DataDenormalized = {
5
+ name: 'DataDenormalized',
6
+ slug: 'data_denormalized',
7
+ category: 'data',
8
+ display_name: 'Denormalized Field',
9
+ description: 'Creates INSERT and UPDATE triggers that copy field values from a referenced (parent) table into the current table whenever the FK changes. Used to denormalize frequently-read columns (e.g. database_id on junction tables) so that RLS and queries can filter locally without joining.',
10
+ parameter_schema: {
11
+ type: 'object',
12
+ properties: {
13
+ field: {
14
+ type: 'string',
15
+ format: 'column-ref',
16
+ description: 'FK field on this table that references the parent row (e.g. view_id)'
17
+ },
18
+ set_fields: {
19
+ type: 'array',
20
+ items: {
21
+ type: 'string',
22
+ format: 'column-ref'
23
+ },
24
+ description: 'Field names on this table to be populated from the parent (e.g. ["database_id"])'
25
+ },
26
+ ref_field: {
27
+ type: 'string',
28
+ format: 'column-ref',
29
+ description: 'Field on the parent table that is the FK target (e.g. id)'
30
+ },
31
+ ref_fields: {
32
+ type: 'array',
33
+ items: {
34
+ type: 'string',
35
+ format: 'column-ref'
36
+ },
37
+ description: 'Field names on the parent table to copy from (e.g. ["database_id"])'
38
+ },
39
+ use_updates: {
40
+ type: 'boolean',
41
+ description: 'If true, also creates an UPDATE trigger so changes to the FK re-copy values',
42
+ default: true
43
+ },
44
+ update_defaults: {
45
+ type: 'boolean',
46
+ description: 'If true, sets the default value of set_fields to uuid_nil() so they are populated by the trigger',
47
+ default: true
48
+ },
49
+ func_name: {
50
+ type: 'string',
51
+ description: 'Custom function name suffix (defaults to the FK field name)'
52
+ },
53
+ func_order: {
54
+ type: 'integer',
55
+ description: 'Trigger ordering (0-padded). Lower numbers fire first',
56
+ default: 0
57
+ }
58
+ },
59
+ required: [
60
+ 'field',
61
+ 'set_fields',
62
+ 'ref_field',
63
+ 'ref_fields'
64
+ ]
65
+ },
66
+ tags: [
67
+ 'trigger',
68
+ 'denormalization',
69
+ 'schema'
70
+ ]
71
+ };
package/data/index.d.ts CHANGED
@@ -3,6 +3,7 @@ export { CheckLessThan } from './check-less-than';
3
3
  export { CheckNotEqual } from './check-not-equal';
4
4
  export { CheckOneOf } from './check-one-of';
5
5
  export { DataBulk } from './data-bulk';
6
+ export { DataDenormalized } from './data-denormalized';
6
7
  export { DataCompositeField } from './data-composite-field';
7
8
  export { DataDirectOwner } from './data-direct-owner';
8
9
  export { DataEntityMembership } from './data-entity-membership';
package/data/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.TableUserSettings = exports.TableUserProfiles = exports.TableOrganizationSettings = exports.SearchVector = exports.SearchUnified = exports.SearchTrgm = exports.SearchSpatialAggregate = exports.SearchSpatial = exports.SearchFullText = exports.SearchBm25 = exports.DataTimestamps = exports.DataTags = exports.DataStatusField = exports.DataSoftDelete = exports.DataSlug = exports.DataRealtime = exports.DataPublishable = exports.DataPeoplestamps = exports.DataOwnershipInEntity = exports.DataOwnedFields = exports.DataMemberOwner = exports.DataJsonb = exports.DataInheritFromParent = exports.DataInflection = exports.DataImmutableFields = exports.DataId = exports.DataI18n = exports.DataForceCurrentUser = exports.DataEntityMembership = exports.DataDirectOwner = exports.DataCompositeField = exports.DataBulk = exports.CheckOneOf = exports.CheckNotEqual = exports.CheckLessThan = exports.CheckGreaterThan = void 0;
3
+ exports.TableUserSettings = exports.TableUserProfiles = exports.TableOrganizationSettings = exports.SearchVector = exports.SearchUnified = exports.SearchTrgm = exports.SearchSpatialAggregate = exports.SearchSpatial = exports.SearchFullText = exports.SearchBm25 = exports.DataTimestamps = exports.DataTags = exports.DataStatusField = exports.DataSoftDelete = exports.DataSlug = exports.DataRealtime = exports.DataPublishable = exports.DataPeoplestamps = exports.DataOwnershipInEntity = exports.DataOwnedFields = exports.DataMemberOwner = exports.DataJsonb = exports.DataInheritFromParent = exports.DataInflection = exports.DataImmutableFields = exports.DataId = exports.DataI18n = exports.DataForceCurrentUser = exports.DataEntityMembership = exports.DataDirectOwner = exports.DataCompositeField = exports.DataDenormalized = exports.DataBulk = exports.CheckOneOf = exports.CheckNotEqual = exports.CheckLessThan = exports.CheckGreaterThan = void 0;
4
4
  var check_greater_than_1 = require("./check-greater-than");
5
5
  Object.defineProperty(exports, "CheckGreaterThan", { enumerable: true, get: function () { return check_greater_than_1.CheckGreaterThan; } });
6
6
  var check_less_than_1 = require("./check-less-than");
@@ -11,6 +11,8 @@ var check_one_of_1 = require("./check-one-of");
11
11
  Object.defineProperty(exports, "CheckOneOf", { enumerable: true, get: function () { return check_one_of_1.CheckOneOf; } });
12
12
  var data_bulk_1 = require("./data-bulk");
13
13
  Object.defineProperty(exports, "DataBulk", { enumerable: true, get: function () { return data_bulk_1.DataBulk; } });
14
+ var data_denormalized_1 = require("./data-denormalized");
15
+ Object.defineProperty(exports, "DataDenormalized", { enumerable: true, get: function () { return data_denormalized_1.DataDenormalized; } });
14
16
  var data_composite_field_1 = require("./data-composite-field");
15
17
  Object.defineProperty(exports, "DataCompositeField", { enumerable: true, get: function () { return data_composite_field_1.DataCompositeField; } });
16
18
  var data_direct_owner_1 = require("./data-direct-owner");
@@ -200,15 +200,6 @@ exports.SearchUnified = {
200
200
  type: 'object',
201
201
  description: 'Per-algorithm weights: {tsv: 1.5, bm25: 1.0, pgvector: 0.8, trgm: 0.3}'
202
202
  },
203
- normalization: {
204
- type: 'string',
205
- enum: [
206
- 'linear',
207
- 'sigmoid'
208
- ],
209
- description: 'Score normalization strategy',
210
- default: 'linear'
211
- },
212
203
  boost_recent: {
213
204
  type: 'boolean',
214
205
  description: 'Enable recency boost for search results',
@@ -0,0 +1,2 @@
1
+ import type { NodeTypeDefinition } from '../types';
2
+ export declare const DataDenormalized: NodeTypeDefinition;
@@ -0,0 +1,68 @@
1
+ export const DataDenormalized = {
2
+ name: 'DataDenormalized',
3
+ slug: 'data_denormalized',
4
+ category: 'data',
5
+ display_name: 'Denormalized Field',
6
+ description: 'Creates INSERT and UPDATE triggers that copy field values from a referenced (parent) table into the current table whenever the FK changes. Used to denormalize frequently-read columns (e.g. database_id on junction tables) so that RLS and queries can filter locally without joining.',
7
+ parameter_schema: {
8
+ type: 'object',
9
+ properties: {
10
+ field: {
11
+ type: 'string',
12
+ format: 'column-ref',
13
+ description: 'FK field on this table that references the parent row (e.g. view_id)'
14
+ },
15
+ set_fields: {
16
+ type: 'array',
17
+ items: {
18
+ type: 'string',
19
+ format: 'column-ref'
20
+ },
21
+ description: 'Field names on this table to be populated from the parent (e.g. ["database_id"])'
22
+ },
23
+ ref_field: {
24
+ type: 'string',
25
+ format: 'column-ref',
26
+ description: 'Field on the parent table that is the FK target (e.g. id)'
27
+ },
28
+ ref_fields: {
29
+ type: 'array',
30
+ items: {
31
+ type: 'string',
32
+ format: 'column-ref'
33
+ },
34
+ description: 'Field names on the parent table to copy from (e.g. ["database_id"])'
35
+ },
36
+ use_updates: {
37
+ type: 'boolean',
38
+ description: 'If true, also creates an UPDATE trigger so changes to the FK re-copy values',
39
+ default: true
40
+ },
41
+ update_defaults: {
42
+ type: 'boolean',
43
+ description: 'If true, sets the default value of set_fields to uuid_nil() so they are populated by the trigger',
44
+ default: true
45
+ },
46
+ func_name: {
47
+ type: 'string',
48
+ description: 'Custom function name suffix (defaults to the FK field name)'
49
+ },
50
+ func_order: {
51
+ type: 'integer',
52
+ description: 'Trigger ordering (0-padded). Lower numbers fire first',
53
+ default: 0
54
+ }
55
+ },
56
+ required: [
57
+ 'field',
58
+ 'set_fields',
59
+ 'ref_field',
60
+ 'ref_fields'
61
+ ]
62
+ },
63
+ tags: [
64
+ 'trigger',
65
+ 'denormalization',
66
+ 'schema'
67
+ ]
68
+ };
@@ -3,6 +3,7 @@ export { CheckLessThan } from './check-less-than';
3
3
  export { CheckNotEqual } from './check-not-equal';
4
4
  export { CheckOneOf } from './check-one-of';
5
5
  export { DataBulk } from './data-bulk';
6
+ export { DataDenormalized } from './data-denormalized';
6
7
  export { DataCompositeField } from './data-composite-field';
7
8
  export { DataDirectOwner } from './data-direct-owner';
8
9
  export { DataEntityMembership } from './data-entity-membership';
package/esm/data/index.js CHANGED
@@ -3,6 +3,7 @@ export { CheckLessThan } from './check-less-than';
3
3
  export { CheckNotEqual } from './check-not-equal';
4
4
  export { CheckOneOf } from './check-one-of';
5
5
  export { DataBulk } from './data-bulk';
6
+ export { DataDenormalized } from './data-denormalized';
6
7
  export { DataCompositeField } from './data-composite-field';
7
8
  export { DataDirectOwner } from './data-direct-owner';
8
9
  export { DataEntityMembership } from './data-entity-membership';
@@ -197,15 +197,6 @@ export const SearchUnified = {
197
197
  type: 'object',
198
198
  description: 'Per-algorithm weights: {tsv: 1.5, bm25: 1.0, pgvector: 0.8, trgm: 0.3}'
199
199
  },
200
- normalization: {
201
- type: 'string',
202
- enum: [
203
- 'linear',
204
- 'sigmoid'
205
- ],
206
- description: 'Score normalization strategy',
207
- default: 'linear'
208
- },
209
200
  boost_recent: {
210
201
  type: 'boolean',
211
202
  description: 'Enable recency boost for search results',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "node-type-registry",
3
- "version": "0.48.0",
3
+ "version": "0.50.0",
4
4
  "description": "Node type definitions for the Constructive blueprint system. Single source of truth for all Authz*, Data*, Relation*, and View* node types.",
5
5
  "author": "Constructive <developers@constructive.io>",
6
6
  "main": "index.js",
@@ -47,5 +47,5 @@
47
47
  "registry",
48
48
  "graphile"
49
49
  ],
50
- "gitHead": "d6a34a51d5e889443c2345c80ccfcea050875bda"
50
+ "gitHead": "2558a0cdb58c815933af8bfe6769cd59014c77cf"
51
51
  }