@twin.org/entity 0.0.3-next.4 → 0.0.3-next.41

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 (43) hide show
  1. package/README.md +1 -5
  2. package/dist/es/decorators/entityDecorator.js +2 -1
  3. package/dist/es/decorators/entityDecorator.js.map +1 -1
  4. package/dist/es/decorators/propertyDecorator.js +1 -0
  5. package/dist/es/decorators/propertyDecorator.js.map +1 -1
  6. package/dist/es/index.js +2 -0
  7. package/dist/es/index.js.map +1 -1
  8. package/dist/es/models/IEntitySchemaDiff.js +2 -0
  9. package/dist/es/models/IEntitySchemaDiff.js.map +1 -0
  10. package/dist/es/utils/decoratorHelper.js +1 -0
  11. package/dist/es/utils/decoratorHelper.js.map +1 -1
  12. package/dist/es/utils/entityConditions.js +8 -0
  13. package/dist/es/utils/entityConditions.js.map +1 -1
  14. package/dist/es/utils/entitySchemaDiff.js +67 -0
  15. package/dist/es/utils/entitySchemaDiff.js.map +1 -0
  16. package/dist/types/decorators/entityDecorator.d.ts +1 -0
  17. package/dist/types/decorators/propertyDecorator.d.ts +1 -0
  18. package/dist/types/index.d.ts +2 -0
  19. package/dist/types/models/IEntitySchemaDiff.d.ts +35 -0
  20. package/dist/types/utils/decoratorHelper.d.ts +1 -0
  21. package/dist/types/utils/entitySchemaDiff.d.ts +22 -0
  22. package/docs/changelog.md +802 -84
  23. package/docs/examples.md +70 -1
  24. package/docs/reference/classes/DecoratorHelper.md +2 -2
  25. package/docs/reference/classes/EntityConditions.md +2 -2
  26. package/docs/reference/classes/EntitySchemaHelper.md +6 -6
  27. package/docs/reference/classes/EntitySorter.md +4 -4
  28. package/docs/reference/functions/entitySchemaDiff.md +38 -0
  29. package/docs/reference/functions/isEmptyDiff.md +25 -0
  30. package/docs/reference/index.md +3 -0
  31. package/docs/reference/interfaces/IComparator.md +3 -3
  32. package/docs/reference/interfaces/IComparatorGroup.md +3 -3
  33. package/docs/reference/interfaces/IEntitySchema.md +5 -5
  34. package/docs/reference/interfaces/IEntitySchemaDiff.md +53 -0
  35. package/docs/reference/interfaces/IEntitySchemaOptions.md +2 -2
  36. package/docs/reference/interfaces/IEntitySchemaProperty.md +20 -20
  37. package/docs/reference/interfaces/IEntitySort.md +3 -3
  38. package/docs/reference/variables/ComparisonOperator.md +9 -9
  39. package/docs/reference/variables/EntitySchemaPropertyFormat.md +17 -17
  40. package/docs/reference/variables/EntitySchemaPropertyType.md +6 -6
  41. package/docs/reference/variables/LogicalOperator.md +2 -2
  42. package/docs/reference/variables/SortDirection.md +2 -2
  43. package/package.json +7 -6
package/docs/examples.md CHANGED
@@ -1 +1,70 @@
1
- # @twin.org/entity - Examples
1
+ # Entity Examples
2
+
3
+ Use these snippets to build schemas, compose conditions and order data for query-style workflows.
4
+
5
+ ## EntitySchemaHelper
6
+
7
+ ```typescript
8
+ import { EntitySchemaHelper } from '@twin.org/entity';
9
+
10
+ class Product {
11
+ public id!: string;
12
+ public sku!: string;
13
+ public price!: number;
14
+ }
15
+
16
+ const schema = EntitySchemaHelper.getSchema(Product);
17
+ EntitySchemaHelper.getPrimaryKey(schema); // 'id'
18
+ EntitySchemaHelper.getSortProperties(schema); // ['sku', 'price']
19
+ ```
20
+
21
+ ## EntityConditions
22
+
23
+ ```typescript
24
+ import { EntityConditions } from '@twin.org/entity';
25
+
26
+ const product = {
27
+ sku: 'A-100',
28
+ price: 49.99,
29
+ active: true
30
+ };
31
+
32
+ EntityConditions.compare('eq', product.sku, 'A-100'); // true
33
+ EntityConditions.check(product, [{ property: 'price', comparison: 'gt', value: 10 }]); // true
34
+ ```
35
+
36
+ ## EntitySorter
37
+
38
+ ```typescript
39
+ import { EntitySorter } from '@twin.org/entity';
40
+
41
+ const records = [
42
+ { sku: 'A-300', price: 15 },
43
+ { sku: 'A-100', price: 20 },
44
+ { sku: 'A-200', price: 10 }
45
+ ];
46
+
47
+ EntitySorter.sort(records, [{ property: 'sku', sortDirection: 'ascending' }]);
48
+ ```
49
+
50
+ ## DecoratorHelper
51
+
52
+ ```typescript
53
+ import { DecoratorHelper } from '@twin.org/entity';
54
+
55
+ class Customer {
56
+ public id!: string;
57
+ }
58
+
59
+ DecoratorHelper.setSchema(Customer, {
60
+ primaryKey: 'id',
61
+ type: 'customer',
62
+ properties: {
63
+ id: {
64
+ type: 'string'
65
+ }
66
+ }
67
+ });
68
+
69
+ DecoratorHelper.getSchema(Customer)?.primaryKey; // 'id'
70
+ ```
@@ -14,7 +14,7 @@ Class to help with decorators.
14
14
 
15
15
  ## Methods
16
16
 
17
- ### getSchema()
17
+ ### getSchema() {#getschema}
18
18
 
19
19
  > `static` **getSchema**\<`T`\>(`target`): [`IEntitySchema`](../interfaces/IEntitySchema.md)\<`T`\>
20
20
 
@@ -42,7 +42,7 @@ The schema from the metadata if it can be found.
42
42
 
43
43
  ***
44
44
 
45
- ### setSchema()
45
+ ### setSchema() {#setschema}
46
46
 
47
47
  > `static` **setSchema**\<`T`\>(`target`, `entitySchema`): `void`
48
48
 
@@ -14,7 +14,7 @@ Class to perform condition checks.
14
14
 
15
15
  ## Methods
16
16
 
17
- ### check()
17
+ ### check() {#check}
18
18
 
19
19
  > `static` **check**\<`T`\>(`entity`, `condition?`): `boolean`
20
20
 
@@ -48,7 +48,7 @@ True if the entity matches.
48
48
 
49
49
  ***
50
50
 
51
- ### compare()
51
+ ### compare() {#compare}
52
52
 
53
53
  > `static` **compare**\<`T`\>(`entity`, `comparator`): `boolean`
54
54
 
@@ -14,7 +14,7 @@ Class to help with entity schema operations.
14
14
 
15
15
  ## Properties
16
16
 
17
- ### CLASS\_NAME
17
+ ### CLASS\_NAME {#class_name}
18
18
 
19
19
  > `readonly` `static` **CLASS\_NAME**: `string`
20
20
 
@@ -22,7 +22,7 @@ Runtime name for the class.
22
22
 
23
23
  ## Methods
24
24
 
25
- ### getSchema()
25
+ ### getSchema() {#getschema}
26
26
 
27
27
  > `static` **getSchema**\<`T`\>(`target`): [`IEntitySchema`](../interfaces/IEntitySchema.md)\<`T`\>
28
28
 
@@ -50,7 +50,7 @@ The schema for the object if it can be found.
50
50
 
51
51
  ***
52
52
 
53
- ### getPrimaryKey()
53
+ ### getPrimaryKey() {#getprimarykey}
54
54
 
55
55
  > `static` **getPrimaryKey**\<`T`\>(`entitySchema`): [`IEntitySchemaProperty`](../interfaces/IEntitySchemaProperty.md)\<`T`\>
56
56
 
@@ -82,7 +82,7 @@ If no primary key was found, or more than one.
82
82
 
83
83
  ***
84
84
 
85
- ### getSortProperties()
85
+ ### getSortProperties() {#getsortproperties}
86
86
 
87
87
  > `static` **getSortProperties**\<`T`\>(`entitySchema`): [`IEntitySort`](../interfaces/IEntitySort.md)\<`T`\>[] \| `undefined`
88
88
 
@@ -110,7 +110,7 @@ The sort keys from the schema or undefined if there are none.
110
110
 
111
111
  ***
112
112
 
113
- ### buildSortProperties()
113
+ ### buildSortProperties() {#buildsortproperties}
114
114
 
115
115
  > `static` **buildSortProperties**\<`T`\>(`entitySchema`, `overrideSortKeys?`): [`IEntitySort`](../interfaces/IEntitySort.md)\<`T`\>[] \| `undefined`
116
116
 
@@ -144,7 +144,7 @@ The finalised sort keys.
144
144
 
145
145
  ***
146
146
 
147
- ### validateEntity()
147
+ ### validateEntity() {#validateentity}
148
148
 
149
149
  > `static` **validateEntity**\<`T`\>(`entity`, `entitySchema`): `void`
150
150
 
@@ -14,7 +14,7 @@ Class to perform sort operations on entities.
14
14
 
15
15
  ## Methods
16
16
 
17
- ### sort()
17
+ ### sort() {#sort}
18
18
 
19
19
  > `static` **sort**\<`T`\>(`entities`, `entitySorters?`): `T`[]
20
20
 
@@ -48,9 +48,9 @@ The sorted list.
48
48
 
49
49
  ***
50
50
 
51
- ### compare()
51
+ ### compare() {#compare}
52
52
 
53
- > `static` **compare**\<`T`\>(`entity1`, `entity2`, `prop`, `type`, `direction`): `number`
53
+ > `static` **compare**\<`T`\>(`entity1`, `entity2`, `prop`, `type`, `direction?`): `number`
54
54
 
55
55
  Compare two properties.
56
56
 
@@ -86,7 +86,7 @@ The property to compare.
86
86
 
87
87
  The type of the property.
88
88
 
89
- ##### direction
89
+ ##### direction?
90
90
 
91
91
  [`SortDirection`](../type-aliases/SortDirection.md) = `SortDirection.Ascending`
92
92
 
@@ -0,0 +1,38 @@
1
+ # Function: entitySchemaDiff()
2
+
3
+ > **entitySchemaDiff**\<`T`\>(`oldProperties`, `newProperties`): [`IEntitySchemaDiff`](../interfaces/IEntitySchemaDiff.md)\<`T`\>
4
+
5
+ Compare two arrays of entity schema properties and return a structured diff.
6
+
7
+ Properties are matched by their `property` key name. A property is considered
8
+ modified when any structural field differs: `type`, `format`, `isPrimary`,
9
+ `isSecondary`, `sortDirection`, `optional`, `itemType`, or `itemTypeRef`.
10
+ Documentation-only fields (`description`, `examples`) are intentionally
11
+ excluded from the comparison to avoid spurious diffs.
12
+
13
+ ## Type Parameters
14
+
15
+ ### T
16
+
17
+ `T`
18
+
19
+ ## Parameters
20
+
21
+ ### oldProperties
22
+
23
+ [`IEntitySchemaProperty`](../interfaces/IEntitySchemaProperty.md)\<`T`\>[]
24
+
25
+ The property descriptors from the current (live) schema.
26
+
27
+ ### newProperties
28
+
29
+ [`IEntitySchemaProperty`](../interfaces/IEntitySchemaProperty.md)\<`T`\>[]
30
+
31
+ The property descriptors from the target (new) schema.
32
+
33
+ ## Returns
34
+
35
+ [`IEntitySchemaDiff`](../interfaces/IEntitySchemaDiff.md)\<`T`\>
36
+
37
+ A diff object with `added`, `removed`, and `modified` arrays, each
38
+ containing full `IEntitySchemaProperty` descriptors.
@@ -0,0 +1,25 @@
1
+ # Function: isEmptyDiff()
2
+
3
+ > **isEmptyDiff**\<`T`\>(`diff`): `boolean`
4
+
5
+ Returns true when the diff contains no changes (nothing added, removed, or modified).
6
+
7
+ ## Type Parameters
8
+
9
+ ### T
10
+
11
+ `T`
12
+
13
+ ## Parameters
14
+
15
+ ### diff
16
+
17
+ [`IEntitySchemaDiff`](../interfaces/IEntitySchemaDiff.md)\<`T`\>
18
+
19
+ The diff to check.
20
+
21
+ ## Returns
22
+
23
+ `boolean`
24
+
25
+ True if the diff is empty.
@@ -12,6 +12,7 @@
12
12
  - [IComparator](interfaces/IComparator.md)
13
13
  - [IComparatorGroup](interfaces/IComparatorGroup.md)
14
14
  - [IEntitySchema](interfaces/IEntitySchema.md)
15
+ - [IEntitySchemaDiff](interfaces/IEntitySchemaDiff.md)
15
16
  - [IEntitySchemaOptions](interfaces/IEntitySchemaOptions.md)
16
17
  - [IEntitySchemaProperty](interfaces/IEntitySchemaProperty.md)
17
18
  - [IEntitySort](interfaces/IEntitySort.md)
@@ -38,3 +39,5 @@
38
39
 
39
40
  - [entity](functions/entity.md)
40
41
  - [property](functions/property.md)
42
+ - [entitySchemaDiff](functions/entitySchemaDiff.md)
43
+ - [isEmptyDiff](functions/isEmptyDiff.md)
@@ -4,7 +4,7 @@ Interface defining comparator operator.
4
4
 
5
5
  ## Properties
6
6
 
7
- ### property
7
+ ### property {#property}
8
8
 
9
9
  > **property**: `string`
10
10
 
@@ -12,7 +12,7 @@ The name of the property in the object to check.
12
12
 
13
13
  ***
14
14
 
15
- ### value
15
+ ### value {#value}
16
16
 
17
17
  > **value**: `unknown`
18
18
 
@@ -20,7 +20,7 @@ The value of the property to check.
20
20
 
21
21
  ***
22
22
 
23
- ### comparison
23
+ ### comparison {#comparison}
24
24
 
25
25
  > **comparison**: [`ComparisonOperator`](../type-aliases/ComparisonOperator.md)
26
26
 
@@ -10,7 +10,7 @@ Interface defining condition group operator.
10
10
 
11
11
  ## Properties
12
12
 
13
- ### conditions
13
+ ### conditions {#conditions}
14
14
 
15
15
  > **conditions**: [`EntityCondition`](../type-aliases/EntityCondition.md)\<`T`\>[]
16
16
 
@@ -18,8 +18,8 @@ The conditions to join in a group.
18
18
 
19
19
  ***
20
20
 
21
- ### logicalOperator?
21
+ ### logicalOperator? {#logicaloperator}
22
22
 
23
- > `optional` **logicalOperator**: [`LogicalOperator`](../type-aliases/LogicalOperator.md)
23
+ > `optional` **logicalOperator?**: [`LogicalOperator`](../type-aliases/LogicalOperator.md)
24
24
 
25
25
  The logical operator to use.
@@ -10,7 +10,7 @@ Definition for an entity schema.
10
10
 
11
11
  ## Properties
12
12
 
13
- ### type
13
+ ### type {#type}
14
14
 
15
15
  > **type**: `string` \| `undefined`
16
16
 
@@ -18,16 +18,16 @@ The type of the entity.
18
18
 
19
19
  ***
20
20
 
21
- ### options?
21
+ ### options? {#options}
22
22
 
23
- > `optional` **options**: [`IEntitySchemaOptions`](IEntitySchemaOptions.md)
23
+ > `optional` **options?**: [`IEntitySchemaOptions`](IEntitySchemaOptions.md)
24
24
 
25
25
  The options for the entity.
26
26
 
27
27
  ***
28
28
 
29
- ### properties?
29
+ ### properties? {#properties}
30
30
 
31
- > `optional` **properties**: [`IEntitySchemaProperty`](IEntitySchemaProperty.md)\<`T`\>[]
31
+ > `optional` **properties?**: [`IEntitySchemaProperty`](IEntitySchemaProperty.md)\<`T`\>[]
32
32
 
33
33
  The properties of the entity.
@@ -0,0 +1,53 @@
1
+ # Interface: IEntitySchemaDiff\<T\>
2
+
3
+ The result of comparing two sets of entity schema properties.
4
+
5
+ ## Type Parameters
6
+
7
+ ### T
8
+
9
+ `T` = `unknown`
10
+
11
+ ## Properties
12
+
13
+ ### added {#added}
14
+
15
+ > **added**: [`IEntitySchemaProperty`](IEntitySchemaProperty.md)\<`T`\>[]
16
+
17
+ Properties present in the new schema but absent from the old one.
18
+ Each entry is the full property descriptor from the new schema, so it can
19
+ be passed directly to bootstrap / table-creation logic.
20
+
21
+ ***
22
+
23
+ ### removed {#removed}
24
+
25
+ > **removed**: [`IEntitySchemaProperty`](IEntitySchemaProperty.md)\<`T`\>[]
26
+
27
+ Properties present in the old schema but absent from the new one.
28
+ Each entry is the full property descriptor from the old schema, allowing
29
+ connectors to drop the correct column, index, or field by name.
30
+
31
+ ***
32
+
33
+ ### modified {#modified}
34
+
35
+ > **modified**: `object`[]
36
+
37
+ Properties that exist in both schemas but differ in at least one structural
38
+ field (type, format, isSecondary, sortDirection, optional, itemType, itemTypeRef).
39
+ `from` is the old descriptor; `to` is the new one.
40
+ Both are full property objects so connectors can drop the old definition and
41
+ create the new one using the same bootstrap code path.
42
+
43
+ #### from
44
+
45
+ > **from**: [`IEntitySchemaProperty`](IEntitySchemaProperty.md)\<`T`\>
46
+
47
+ The old property descriptor.
48
+
49
+ #### to
50
+
51
+ > **to**: [`IEntitySchemaProperty`](IEntitySchemaProperty.md)\<`T`\>
52
+
53
+ The new property descriptor.
@@ -4,8 +4,8 @@ Definition for an entity schema options.
4
4
 
5
5
  ## Properties
6
6
 
7
- ### description?
7
+ ### description? {#description}
8
8
 
9
- > `optional` **description**: `string`
9
+ > `optional` **description?**: `string`
10
10
 
11
11
  Description of the object.
@@ -10,7 +10,7 @@ Definition for an entity schema property.
10
10
 
11
11
  ## Properties
12
12
 
13
- ### property
13
+ ### property {#property}
14
14
 
15
15
  > **property**: keyof `T`
16
16
 
@@ -18,7 +18,7 @@ The property name from the entity.
18
18
 
19
19
  ***
20
20
 
21
- ### type
21
+ ### type {#type}
22
22
 
23
23
  > **type**: [`EntitySchemaPropertyType`](../type-aliases/EntitySchemaPropertyType.md)
24
24
 
@@ -26,72 +26,72 @@ The type of the property.
26
26
 
27
27
  ***
28
28
 
29
- ### format?
29
+ ### format? {#format}
30
30
 
31
- > `optional` **format**: [`EntitySchemaPropertyFormat`](../type-aliases/EntitySchemaPropertyFormat.md)
31
+ > `optional` **format?**: [`EntitySchemaPropertyFormat`](../type-aliases/EntitySchemaPropertyFormat.md)
32
32
 
33
33
  The format of the property.
34
34
 
35
35
  ***
36
36
 
37
- ### isPrimary?
37
+ ### isPrimary? {#isprimary}
38
38
 
39
- > `optional` **isPrimary**: `boolean`
39
+ > `optional` **isPrimary?**: `boolean`
40
40
 
41
41
  Is this the primary index property.
42
42
 
43
43
  ***
44
44
 
45
- ### isSecondary?
45
+ ### isSecondary? {#issecondary}
46
46
 
47
- > `optional` **isSecondary**: `boolean`
47
+ > `optional` **isSecondary?**: `boolean`
48
48
 
49
49
  Is this a secondary index property.
50
50
 
51
51
  ***
52
52
 
53
- ### sortDirection?
53
+ ### sortDirection? {#sortdirection}
54
54
 
55
- > `optional` **sortDirection**: [`SortDirection`](../type-aliases/SortDirection.md)
55
+ > `optional` **sortDirection?**: [`SortDirection`](../type-aliases/SortDirection.md)
56
56
 
57
57
  Default sort direction for this field, leave empty if not sortable.
58
58
 
59
59
  ***
60
60
 
61
- ### optional?
61
+ ### optional? {#optional}
62
62
 
63
- > `optional` **optional**: `boolean`
63
+ > `optional` **optional?**: `boolean`
64
64
 
65
65
  Is the property optional.
66
66
 
67
67
  ***
68
68
 
69
- ### itemType?
69
+ ### itemType? {#itemtype}
70
70
 
71
- > `optional` **itemType**: [`EntitySchemaPropertyType`](../type-aliases/EntitySchemaPropertyType.md)
71
+ > `optional` **itemType?**: [`EntitySchemaPropertyType`](../type-aliases/EntitySchemaPropertyType.md)
72
72
 
73
73
  The type of the item (only applies when type is `array`).
74
74
 
75
75
  ***
76
76
 
77
- ### itemTypeRef?
77
+ ### itemTypeRef? {#itemtyperef}
78
78
 
79
- > `optional` **itemTypeRef**: `string`
79
+ > `optional` **itemTypeRef?**: `string`
80
80
 
81
81
  The type ref of the item (only applies when type is either `array` or `object`).
82
82
 
83
83
  ***
84
84
 
85
- ### description?
85
+ ### description? {#description}
86
86
 
87
- > `optional` **description**: `string`
87
+ > `optional` **description?**: `string`
88
88
 
89
89
  Description of the object.
90
90
 
91
91
  ***
92
92
 
93
- ### examples?
93
+ ### examples? {#examples}
94
94
 
95
- > `optional` **examples**: `unknown`[]
95
+ > `optional` **examples?**: `unknown`[]
96
96
 
97
97
  Examples of the property values.
@@ -10,7 +10,7 @@ Definition of an entity property sort details.
10
10
 
11
11
  ## Properties
12
12
 
13
- ### property
13
+ ### property {#property}
14
14
 
15
15
  > **property**: keyof `T`
16
16
 
@@ -18,7 +18,7 @@ The name of the property.
18
18
 
19
19
  ***
20
20
 
21
- ### type
21
+ ### type {#type}
22
22
 
23
23
  > **type**: [`EntitySchemaPropertyType`](../type-aliases/EntitySchemaPropertyType.md)
24
24
 
@@ -26,7 +26,7 @@ The type of the property.
26
26
 
27
27
  ***
28
28
 
29
- ### sortDirection
29
+ ### sortDirection {#sortdirection}
30
30
 
31
31
  > **sortDirection**: [`SortDirection`](../type-aliases/SortDirection.md)
32
32
 
@@ -6,43 +6,43 @@ The types of comparisons.
6
6
 
7
7
  ## Type Declaration
8
8
 
9
- ### Equals
9
+ ### Equals {#equals}
10
10
 
11
11
  > `readonly` **Equals**: `"equals"` = `"equals"`
12
12
 
13
13
  Equals.
14
14
 
15
- ### NotEquals
15
+ ### NotEquals {#notequals}
16
16
 
17
17
  > `readonly` **NotEquals**: `"not-equals"` = `"not-equals"`
18
18
 
19
19
  Not Equals.
20
20
 
21
- ### GreaterThan
21
+ ### GreaterThan {#greaterthan}
22
22
 
23
23
  > `readonly` **GreaterThan**: `"greater-than"` = `"greater-than"`
24
24
 
25
25
  Greater Than.
26
26
 
27
- ### GreaterThanOrEqual
27
+ ### GreaterThanOrEqual {#greaterthanorequal}
28
28
 
29
29
  > `readonly` **GreaterThanOrEqual**: `"greater-than-or-equal"` = `"greater-than-or-equal"`
30
30
 
31
31
  Greater Than Or Equal.
32
32
 
33
- ### LessThan
33
+ ### LessThan {#lessthan}
34
34
 
35
35
  > `readonly` **LessThan**: `"less-than"` = `"less-than"`
36
36
 
37
37
  Less Than.
38
38
 
39
- ### LessThanOrEqual
39
+ ### LessThanOrEqual {#lessthanorequal}
40
40
 
41
41
  > `readonly` **LessThanOrEqual**: `"less-than-or-equal"` = `"less-than-or-equal"`
42
42
 
43
43
  Less Than Or Equal.
44
44
 
45
- ### Includes
45
+ ### Includes {#includes}
46
46
 
47
47
  > `readonly` **Includes**: `"includes"` = `"includes"`
48
48
 
@@ -51,7 +51,7 @@ A string in a substring.
51
51
  A set contains an element.
52
52
  A list contains an element.
53
53
 
54
- ### NotIncludes
54
+ ### NotIncludes {#notincludes}
55
55
 
56
56
  > `readonly` **NotIncludes**: `"not-includes"` = `"not-includes"`
57
57
 
@@ -60,7 +60,7 @@ A string not in a substring.
60
60
  A set does not contain an element.
61
61
  A list does not contain an element.
62
62
 
63
- ### In
63
+ ### In {#in}
64
64
 
65
65
  > `readonly` **In**: `"in"` = `"in"`
66
66