@ifc-lite/ids 1.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.
Files changed (75) hide show
  1. package/LICENSE +373 -0
  2. package/README.md +76 -0
  3. package/dist/constraints/index.d.ts +17 -0
  4. package/dist/constraints/index.d.ts.map +1 -0
  5. package/dist/constraints/index.js +226 -0
  6. package/dist/constraints/index.js.map +1 -0
  7. package/dist/facets/attribute-facet.d.ts +10 -0
  8. package/dist/facets/attribute-facet.d.ts.map +1 -0
  9. package/dist/facets/attribute-facet.js +107 -0
  10. package/dist/facets/attribute-facet.js.map +1 -0
  11. package/dist/facets/classification-facet.d.ts +10 -0
  12. package/dist/facets/classification-facet.d.ts.map +1 -0
  13. package/dist/facets/classification-facet.js +98 -0
  14. package/dist/facets/classification-facet.js.map +1 -0
  15. package/dist/facets/entity-facet.d.ts +18 -0
  16. package/dist/facets/entity-facet.d.ts.map +1 -0
  17. package/dist/facets/entity-facet.js +116 -0
  18. package/dist/facets/entity-facet.js.map +1 -0
  19. package/dist/facets/index.d.ts +31 -0
  20. package/dist/facets/index.d.ts.map +1 -0
  21. package/dist/facets/index.js +57 -0
  22. package/dist/facets/index.js.map +1 -0
  23. package/dist/facets/material-facet.d.ts +10 -0
  24. package/dist/facets/material-facet.d.ts.map +1 -0
  25. package/dist/facets/material-facet.js +67 -0
  26. package/dist/facets/material-facet.js.map +1 -0
  27. package/dist/facets/partof-facet.d.ts +10 -0
  28. package/dist/facets/partof-facet.d.ts.map +1 -0
  29. package/dist/facets/partof-facet.js +112 -0
  30. package/dist/facets/partof-facet.js.map +1 -0
  31. package/dist/facets/property-facet.d.ts +10 -0
  32. package/dist/facets/property-facet.d.ts.map +1 -0
  33. package/dist/facets/property-facet.js +156 -0
  34. package/dist/facets/property-facet.js.map +1 -0
  35. package/dist/index.d.ts +18 -0
  36. package/dist/index.d.ts.map +1 -0
  37. package/dist/index.js +26 -0
  38. package/dist/index.js.map +1 -0
  39. package/dist/parser/xml-parser.d.ts +15 -0
  40. package/dist/parser/xml-parser.d.ts.map +1 -0
  41. package/dist/parser/xml-parser.js +486 -0
  42. package/dist/parser/xml-parser.js.map +1 -0
  43. package/dist/translation/index.d.ts +3 -0
  44. package/dist/translation/index.d.ts.map +1 -0
  45. package/dist/translation/index.js +6 -0
  46. package/dist/translation/index.js.map +1 -0
  47. package/dist/translation/locales/de.d.ts +189 -0
  48. package/dist/translation/locales/de.d.ts.map +1 -0
  49. package/dist/translation/locales/de.js +226 -0
  50. package/dist/translation/locales/de.js.map +1 -0
  51. package/dist/translation/locales/en.d.ts +190 -0
  52. package/dist/translation/locales/en.d.ts.map +1 -0
  53. package/dist/translation/locales/en.js +226 -0
  54. package/dist/translation/locales/en.js.map +1 -0
  55. package/dist/translation/locales/fr.d.ts +189 -0
  56. package/dist/translation/locales/fr.d.ts.map +1 -0
  57. package/dist/translation/locales/fr.js +226 -0
  58. package/dist/translation/locales/fr.js.map +1 -0
  59. package/dist/translation/locales/index.d.ts +4 -0
  60. package/dist/translation/locales/index.d.ts.map +1 -0
  61. package/dist/translation/locales/index.js +7 -0
  62. package/dist/translation/locales/index.js.map +1 -0
  63. package/dist/translation/service.d.ts +62 -0
  64. package/dist/translation/service.d.ts.map +1 -0
  65. package/dist/translation/service.js +569 -0
  66. package/dist/translation/service.js.map +1 -0
  67. package/dist/types.d.ts +407 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +5 -0
  70. package/dist/types.js.map +1 -0
  71. package/dist/validation/validator.d.ts +9 -0
  72. package/dist/validation/validator.d.ts.map +1 -0
  73. package/dist/validation/validator.js +431 -0
  74. package/dist/validation/validator.js.map +1 -0
  75. package/package.json +51 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/constraints/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Attribute facet checker
3
+ */
4
+ import type { IDSAttributeFacet, IFCDataAccessor } from '../types.js';
5
+ import type { FacetCheckResult } from './index.js';
6
+ /**
7
+ * Check if an entity matches an attribute facet
8
+ */
9
+ export declare function checkAttributeFacet(facet: IDSAttributeFacet, expressId: number, accessor: IFCDataAccessor): FacetCheckResult;
10
+ //# sourceMappingURL=attribute-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-facet.d.ts","sourceRoot":"","sources":["../../src/facets/attribute-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAanD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,iBAAiB,EACxB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CA8ElB"}
@@ -0,0 +1,107 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { matchConstraint, formatConstraint } from '../constraints/index.js';
5
+ /** Standard IFC attributes that can be checked */
6
+ const STANDARD_ATTRIBUTES = [
7
+ 'Name',
8
+ 'Description',
9
+ 'ObjectType',
10
+ 'Tag',
11
+ 'GlobalId',
12
+ 'LongName',
13
+ ];
14
+ /**
15
+ * Check if an entity matches an attribute facet
16
+ */
17
+ export function checkAttributeFacet(facet, expressId, accessor) {
18
+ // Get the attribute name to check
19
+ const attrNameConstraint = facet.name;
20
+ let attrName;
21
+ // For simple value, use the name directly
22
+ if (attrNameConstraint.type === 'simpleValue') {
23
+ attrName = attrNameConstraint.value;
24
+ }
25
+ else {
26
+ // For patterns/enumerations, we need to check all matching attributes
27
+ // Simplified: just check the first standard attribute that matches
28
+ const matchingAttrs = STANDARD_ATTRIBUTES.filter((a) => matchConstraint(attrNameConstraint, a));
29
+ if (matchingAttrs.length === 0) {
30
+ return {
31
+ passed: false,
32
+ failure: {
33
+ type: 'ATTRIBUTE_MISSING',
34
+ field: formatConstraint(attrNameConstraint),
35
+ expected: formatConstraint(attrNameConstraint),
36
+ },
37
+ };
38
+ }
39
+ attrName = matchingAttrs[0];
40
+ }
41
+ // Get the attribute value
42
+ const attrValue = getAttributeValue(attrName, expressId, accessor);
43
+ // Check if attribute exists
44
+ if (attrValue === undefined || attrValue === null || attrValue === '') {
45
+ return {
46
+ passed: false,
47
+ actualValue: undefined,
48
+ expectedValue: facet.value
49
+ ? formatConstraint(facet.value)
50
+ : `attribute "${attrName}" to exist`,
51
+ failure: {
52
+ type: 'ATTRIBUTE_MISSING',
53
+ field: attrName,
54
+ expected: facet.value ? formatConstraint(facet.value) : 'any value',
55
+ },
56
+ };
57
+ }
58
+ // If no value constraint, just check existence
59
+ if (!facet.value) {
60
+ return {
61
+ passed: true,
62
+ actualValue: String(attrValue),
63
+ expectedValue: `attribute "${attrName}" to exist`,
64
+ };
65
+ }
66
+ // Check value constraint
67
+ if (!matchConstraint(facet.value, attrValue)) {
68
+ return {
69
+ passed: false,
70
+ actualValue: String(attrValue),
71
+ expectedValue: formatConstraint(facet.value),
72
+ failure: {
73
+ type: facet.value.type === 'pattern'
74
+ ? 'ATTRIBUTE_PATTERN_MISMATCH'
75
+ : 'ATTRIBUTE_VALUE_MISMATCH',
76
+ field: attrName,
77
+ actual: String(attrValue),
78
+ expected: formatConstraint(facet.value),
79
+ },
80
+ };
81
+ }
82
+ return {
83
+ passed: true,
84
+ actualValue: String(attrValue),
85
+ expectedValue: formatConstraint(facet.value),
86
+ };
87
+ }
88
+ /**
89
+ * Get an attribute value from an entity
90
+ */
91
+ function getAttributeValue(attrName, expressId, accessor) {
92
+ const normalizedName = attrName.toLowerCase();
93
+ switch (normalizedName) {
94
+ case 'name':
95
+ return accessor.getEntityName(expressId);
96
+ case 'description':
97
+ return accessor.getDescription(expressId);
98
+ case 'objecttype':
99
+ return accessor.getObjectType(expressId);
100
+ case 'globalid':
101
+ return accessor.getGlobalId(expressId);
102
+ default:
103
+ // Try generic attribute access
104
+ return accessor.getAttribute(expressId, attrName);
105
+ }
106
+ }
107
+ //# sourceMappingURL=attribute-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attribute-facet.js","sourceRoot":"","sources":["../../src/facets/attribute-facet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Classification facet checker
3
+ */
4
+ import type { IDSClassificationFacet, IFCDataAccessor } from '../types.js';
5
+ import type { FacetCheckResult } from './index.js';
6
+ /**
7
+ * Check if an entity matches a classification facet
8
+ */
9
+ export declare function checkClassificationFacet(facet: IDSClassificationFacet, expressId: number, accessor: IFCDataAccessor): FacetCheckResult;
10
+ //# sourceMappingURL=classification-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification-facet.d.ts","sourceRoot":"","sources":["../../src/facets/classification-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,sBAAsB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,sBAAsB,EAC7B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAuGlB"}
@@ -0,0 +1,98 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { matchConstraint, formatConstraint } from '../constraints/index.js';
5
+ /**
6
+ * Check if an entity matches a classification facet
7
+ */
8
+ export function checkClassificationFacet(facet, expressId, accessor) {
9
+ // Get classifications for the entity
10
+ const classifications = accessor.getClassifications(expressId);
11
+ // If no value or system constraint, just check if any classification exists
12
+ if (!facet.system && !facet.value) {
13
+ if (classifications.length === 0) {
14
+ return {
15
+ passed: false,
16
+ actualValue: '(none)',
17
+ expectedValue: 'any classification',
18
+ failure: {
19
+ type: 'CLASSIFICATION_MISSING',
20
+ expected: 'any classification',
21
+ },
22
+ };
23
+ }
24
+ return {
25
+ passed: true,
26
+ actualValue: classifications
27
+ .map((c) => `${c.system}:${c.value}`)
28
+ .join(', '),
29
+ expectedValue: 'any classification',
30
+ };
31
+ }
32
+ // Filter by system if specified
33
+ let matchingClassifications = classifications;
34
+ if (facet.system) {
35
+ matchingClassifications = classifications.filter((c) => matchConstraint(facet.system, c.system));
36
+ if (matchingClassifications.length === 0) {
37
+ const availableSystems = [
38
+ ...new Set(classifications.map((c) => c.system)),
39
+ ].join(', ');
40
+ return {
41
+ passed: false,
42
+ actualValue: availableSystems || '(none)',
43
+ expectedValue: formatConstraint(facet.system),
44
+ failure: {
45
+ type: 'CLASSIFICATION_SYSTEM_MISMATCH',
46
+ field: 'system',
47
+ actual: availableSystems,
48
+ expected: formatConstraint(facet.system),
49
+ context: {
50
+ availableSystems,
51
+ },
52
+ },
53
+ };
54
+ }
55
+ }
56
+ // Check value if specified
57
+ if (facet.value) {
58
+ const matchingValues = matchingClassifications.filter((c) => matchConstraint(facet.value, c.value));
59
+ if (matchingValues.length === 0) {
60
+ const availableValues = matchingClassifications
61
+ .map((c) => c.value)
62
+ .join(', ');
63
+ return {
64
+ passed: false,
65
+ actualValue: availableValues || '(none)',
66
+ expectedValue: formatConstraint(facet.value),
67
+ failure: {
68
+ type: 'CLASSIFICATION_VALUE_MISMATCH',
69
+ field: 'value',
70
+ actual: availableValues,
71
+ expected: formatConstraint(facet.value),
72
+ context: {
73
+ system: facet.system ? formatConstraint(facet.system) : 'any',
74
+ availableValues,
75
+ },
76
+ },
77
+ };
78
+ }
79
+ return {
80
+ passed: true,
81
+ actualValue: matchingValues
82
+ .map((c) => `${c.system}:${c.value}`)
83
+ .join(', '),
84
+ expectedValue: facet.system
85
+ ? `${formatConstraint(facet.system)}:${formatConstraint(facet.value)}`
86
+ : formatConstraint(facet.value),
87
+ };
88
+ }
89
+ // System matched, no value constraint
90
+ return {
91
+ passed: true,
92
+ actualValue: matchingClassifications
93
+ .map((c) => `${c.system}:${c.value}`)
94
+ .join(', '),
95
+ expectedValue: formatConstraint(facet.system),
96
+ };
97
+ }
98
+ //# sourceMappingURL=classification-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"classification-facet.js","sourceRoot":"","sources":["../../src/facets/classification-facet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ /**
2
+ * Entity facet checker
3
+ */
4
+ import type { IDSEntityFacet, IDSConstraint, IFCDataAccessor } from '../types.js';
5
+ import type { FacetCheckResult } from './index.js';
6
+ /**
7
+ * Check if an entity matches an entity facet
8
+ */
9
+ export declare function checkEntityFacet(facet: IDSEntityFacet, expressId: number, accessor: IFCDataAccessor): FacetCheckResult;
10
+ /**
11
+ * Get candidate entity IDs that might match an entity facet (broadphase filter)
12
+ */
13
+ export declare function filterByEntityFacet(facet: IDSEntityFacet, accessor: IFCDataAccessor): number[] | undefined;
14
+ /**
15
+ * Get all entity types that could match a constraint
16
+ */
17
+ export declare function getMatchingEntityTypes(constraint: IDSConstraint, allTypes: string[]): string[];
18
+ //# sourceMappingURL=entity-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-facet.d.ts","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,aAAa,EACb,eAAe,EAChB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAuElB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,QAAQ,EAAE,eAAe,GACxB,MAAM,EAAE,GAAG,SAAS,CAoBtB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,UAAU,EAAE,aAAa,EACzB,QAAQ,EAAE,MAAM,EAAE,GACjB,MAAM,EAAE,CAsBV"}
@@ -0,0 +1,116 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { matchConstraint, formatConstraint } from '../constraints/index.js';
5
+ /**
6
+ * Check if an entity matches an entity facet
7
+ */
8
+ export function checkEntityFacet(facet, expressId, accessor) {
9
+ const entityType = accessor.getEntityType(expressId);
10
+ if (!entityType) {
11
+ return {
12
+ passed: false,
13
+ actualValue: undefined,
14
+ expectedValue: formatConstraint(facet.name),
15
+ failure: {
16
+ type: 'ENTITY_TYPE_MISMATCH',
17
+ field: 'entityType',
18
+ actual: 'unknown',
19
+ expected: formatConstraint(facet.name),
20
+ },
21
+ };
22
+ }
23
+ // Check entity type
24
+ if (!matchConstraint(facet.name, entityType)) {
25
+ return {
26
+ passed: false,
27
+ actualValue: entityType,
28
+ expectedValue: formatConstraint(facet.name),
29
+ failure: {
30
+ type: 'ENTITY_TYPE_MISMATCH',
31
+ field: 'entityType',
32
+ actual: entityType,
33
+ expected: formatConstraint(facet.name),
34
+ },
35
+ };
36
+ }
37
+ // Check predefined type if specified
38
+ if (facet.predefinedType) {
39
+ const objectType = accessor.getObjectType(expressId);
40
+ if (!objectType) {
41
+ return {
42
+ passed: false,
43
+ actualValue: entityType,
44
+ expectedValue: `${formatConstraint(facet.name)} with predefinedType ${formatConstraint(facet.predefinedType)}`,
45
+ failure: {
46
+ type: 'PREDEFINED_TYPE_MISSING',
47
+ field: 'predefinedType',
48
+ expected: formatConstraint(facet.predefinedType),
49
+ },
50
+ };
51
+ }
52
+ if (!matchConstraint(facet.predefinedType, objectType)) {
53
+ return {
54
+ passed: false,
55
+ actualValue: `${entityType}[${objectType}]`,
56
+ expectedValue: `${formatConstraint(facet.name)} with predefinedType ${formatConstraint(facet.predefinedType)}`,
57
+ failure: {
58
+ type: 'PREDEFINED_TYPE_MISMATCH',
59
+ field: 'predefinedType',
60
+ actual: objectType,
61
+ expected: formatConstraint(facet.predefinedType),
62
+ },
63
+ };
64
+ }
65
+ }
66
+ return {
67
+ passed: true,
68
+ actualValue: facet.predefinedType
69
+ ? `${entityType}[${accessor.getObjectType(expressId) || ''}]`
70
+ : entityType,
71
+ expectedValue: formatConstraint(facet.name),
72
+ };
73
+ }
74
+ /**
75
+ * Get candidate entity IDs that might match an entity facet (broadphase filter)
76
+ */
77
+ export function filterByEntityFacet(facet, accessor) {
78
+ const constraint = facet.name;
79
+ // For simple values, we can efficiently filter by type
80
+ if (constraint.type === 'simpleValue') {
81
+ return accessor.getEntitiesByType(constraint.value);
82
+ }
83
+ // For enumerations, collect entities of all specified types
84
+ if (constraint.type === 'enumeration') {
85
+ const ids = [];
86
+ for (const value of constraint.values) {
87
+ ids.push(...accessor.getEntitiesByType(value));
88
+ }
89
+ return ids;
90
+ }
91
+ // For patterns, we need to check all entity types
92
+ // Return undefined to indicate full scan needed
93
+ return undefined;
94
+ }
95
+ /**
96
+ * Get all entity types that could match a constraint
97
+ */
98
+ export function getMatchingEntityTypes(constraint, allTypes) {
99
+ switch (constraint.type) {
100
+ case 'simpleValue':
101
+ return allTypes.filter((t) => t.toUpperCase() === constraint.value.toUpperCase());
102
+ case 'enumeration':
103
+ return allTypes.filter((t) => constraint.values.some((v) => v.toUpperCase() === t.toUpperCase()));
104
+ case 'pattern':
105
+ try {
106
+ const regex = new RegExp(`^${constraint.pattern}$`, 'i');
107
+ return allTypes.filter((t) => regex.test(t));
108
+ }
109
+ catch {
110
+ return [];
111
+ }
112
+ default:
113
+ return allTypes;
114
+ }
115
+ }
116
+ //# sourceMappingURL=entity-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-facet.js","sourceRoot":"","sources":["../../src/facets/entity-facet.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAY/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,KAAqB,EACrB,SAAiB,EACjB,QAAyB;IAEzB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;IAErD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO;YACL,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,SAAS;YACtB,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3C,OAAO,EAAE;gBACP,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED,oBAAoB;IACpB,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,CAAC,EAAE,CAAC;QAC7C,OAAO;YACL,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,UAAU;YACvB,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;YAC3C,OAAO,EAAE;gBACP,IAAI,EAAE,sBAAsB;gBAC5B,KAAK,EAAE,YAAY;gBACnB,MAAM,EAAE,UAAU;gBAClB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;aACvC;SACF,CAAC;IACJ,CAAC;IAED,qCAAqC;IACrC,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;QAErD,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,UAAU;gBACvB,aAAa,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;gBAC9G,OAAO,EAAE;oBACP,IAAI,EAAE,yBAAyB;oBAC/B,KAAK,EAAE,gBAAgB;oBACvB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC;iBACjD;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,cAAc,EAAE,UAAU,CAAC,EAAE,CAAC;YACvD,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,GAAG,UAAU,IAAI,UAAU,GAAG;gBAC3C,aAAa,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC,EAAE;gBAC9G,OAAO,EAAE;oBACP,IAAI,EAAE,0BAA0B;oBAChC,KAAK,EAAE,gBAAgB;oBACvB,MAAM,EAAE,UAAU;oBAClB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,cAAc,CAAC;iBACjD;aACF,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,KAAK,CAAC,cAAc;YAC/B,CAAC,CAAC,GAAG,UAAU,IAAI,QAAQ,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG;YAC7D,CAAC,CAAC,UAAU;QACd,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,IAAI,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAqB,EACrB,QAAyB;IAEzB,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;IAE9B,uDAAuD;IACvD,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACtC,OAAO,QAAQ,CAAC,iBAAiB,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,4DAA4D;IAC5D,IAAI,UAAU,CAAC,IAAI,KAAK,aAAa,EAAE,CAAC;QACtC,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,KAAK,MAAM,KAAK,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;YACtC,GAAG,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC;QACjD,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,kDAAkD;IAClD,gDAAgD;IAChD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAAyB,EACzB,QAAkB;IAElB,QAAQ,UAAU,CAAC,IAAI,EAAE,CAAC;QACxB,KAAK,aAAa;YAChB,OAAO,QAAQ,CAAC,MAAM,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,UAAU,CAAC,KAAK,CAAC,WAAW,EAAE,CAC1D,CAAC;QACJ,KAAK,aAAa;YAChB,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3B,UAAU,CAAC,MAAM,CAAC,IAAI,CACpB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC,WAAW,EAAE,CAC3C,CACF,CAAC;QACJ,KAAK,SAAS;YACZ,IAAI,CAAC;gBACH,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,UAAU,CAAC,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;gBACzD,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/C,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,CAAC;YACZ,CAAC;QACH;YACE,OAAO,QAAQ,CAAC;IACpB,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * Facet checkers for IDS validation
3
+ */
4
+ import type { IDSFacet, IFCDataAccessor, IDSFailureDetail } from '../types.js';
5
+ export { checkEntityFacet, filterByEntityFacet, } from './entity-facet.js';
6
+ export { checkAttributeFacet } from './attribute-facet.js';
7
+ export { checkPropertyFacet } from './property-facet.js';
8
+ export { checkClassificationFacet } from './classification-facet.js';
9
+ export { checkMaterialFacet } from './material-facet.js';
10
+ export { checkPartOfFacet } from './partof-facet.js';
11
+ /** Result of a facet check */
12
+ export interface FacetCheckResult {
13
+ /** Whether the facet check passed */
14
+ passed: boolean;
15
+ /** Actual value found (for diagnostics) */
16
+ actualValue?: string;
17
+ /** Expected value description */
18
+ expectedValue?: string;
19
+ /** Failure details if failed */
20
+ failure?: IDSFailureDetail;
21
+ }
22
+ /**
23
+ * Check if an entity matches a facet
24
+ */
25
+ export declare function checkFacet(facet: IDSFacet, expressId: number, accessor: IFCDataAccessor): FacetCheckResult;
26
+ /**
27
+ * Get candidate entity IDs that might match a facet (broadphase filter)
28
+ * Returns undefined if no efficient filtering is possible
29
+ */
30
+ export declare function filterByFacet(facet: IDSFacet, accessor: IFCDataAccessor): number[] | undefined;
31
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/facets/index.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,QAAQ,EAOR,eAAe,EACf,gBAAgB,EACjB,MAAM,aAAa,CAAC;AASrB,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,8BAA8B;AAC9B,MAAM,WAAW,gBAAgB;IAC/B,qCAAqC;IACrC,MAAM,EAAE,OAAO,CAAC;IAChB,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iCAAiC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAgB,UAAU,CACxB,KAAK,EAAE,QAAQ,EACf,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAwBlB;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,eAAe,GACxB,MAAM,EAAE,GAAG,SAAS,CAQtB"}
@@ -0,0 +1,57 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { checkEntityFacet, filterByEntityFacet } from './entity-facet.js';
5
+ import { checkAttributeFacet } from './attribute-facet.js';
6
+ import { checkPropertyFacet } from './property-facet.js';
7
+ import { checkClassificationFacet } from './classification-facet.js';
8
+ import { checkMaterialFacet } from './material-facet.js';
9
+ import { checkPartOfFacet } from './partof-facet.js';
10
+ export { checkEntityFacet, filterByEntityFacet, } from './entity-facet.js';
11
+ export { checkAttributeFacet } from './attribute-facet.js';
12
+ export { checkPropertyFacet } from './property-facet.js';
13
+ export { checkClassificationFacet } from './classification-facet.js';
14
+ export { checkMaterialFacet } from './material-facet.js';
15
+ export { checkPartOfFacet } from './partof-facet.js';
16
+ /**
17
+ * Check if an entity matches a facet
18
+ */
19
+ export function checkFacet(facet, expressId, accessor) {
20
+ switch (facet.type) {
21
+ case 'entity':
22
+ return checkEntityFacet(facet, expressId, accessor);
23
+ case 'attribute':
24
+ return checkAttributeFacet(facet, expressId, accessor);
25
+ case 'property':
26
+ return checkPropertyFacet(facet, expressId, accessor);
27
+ case 'classification':
28
+ return checkClassificationFacet(facet, expressId, accessor);
29
+ case 'material':
30
+ return checkMaterialFacet(facet, expressId, accessor);
31
+ case 'partOf':
32
+ return checkPartOfFacet(facet, expressId, accessor);
33
+ default:
34
+ return {
35
+ passed: false,
36
+ failure: {
37
+ type: 'ENTITY_TYPE_MISMATCH',
38
+ expected: 'known facet type',
39
+ actual: facet.type,
40
+ },
41
+ };
42
+ }
43
+ }
44
+ /**
45
+ * Get candidate entity IDs that might match a facet (broadphase filter)
46
+ * Returns undefined if no efficient filtering is possible
47
+ */
48
+ export function filterByFacet(facet, accessor) {
49
+ switch (facet.type) {
50
+ case 'entity':
51
+ return filterByEntityFacet(facet, accessor);
52
+ // Other facets don't have efficient broadphase filtering
53
+ default:
54
+ return undefined;
55
+ }
56
+ }
57
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/facets/index.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAkB/D,OAAO,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,EACL,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAcrD;;GAEG;AACH,MAAM,UAAU,UAAU,CACxB,KAAe,EACf,SAAiB,EACjB,QAAyB;IAEzB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD,KAAK,WAAW;YACd,OAAO,mBAAmB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACzD,KAAK,UAAU;YACb,OAAO,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,gBAAgB;YACnB,OAAO,wBAAwB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QAC9D,KAAK,UAAU;YACb,OAAO,kBAAkB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,QAAQ;YACX,OAAO,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;QACtD;YACE,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,OAAO,EAAE;oBACP,IAAI,EAAE,sBAAsB;oBAC5B,QAAQ,EAAE,kBAAkB;oBAC5B,MAAM,EAAG,KAAkB,CAAC,IAAI;iBACjC;aACF,CAAC;IACN,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,KAAe,EACf,QAAyB;IAEzB,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,QAAQ;YACX,OAAO,mBAAmB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC9C,yDAAyD;QACzD;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Material facet checker
3
+ */
4
+ import type { IDSMaterialFacet, IFCDataAccessor } from '../types.js';
5
+ import type { FacetCheckResult } from './index.js';
6
+ /**
7
+ * Check if an entity matches a material facet
8
+ */
9
+ export declare function checkMaterialFacet(facet: IDSMaterialFacet, expressId: number, accessor: IFCDataAccessor): FacetCheckResult;
10
+ //# sourceMappingURL=material-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-facet.d.ts","sourceRoot":"","sources":["../../src/facets/material-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGnD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,gBAAgB,EACvB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAoElB"}
@@ -0,0 +1,67 @@
1
+ /* This Source Code Form is subject to the terms of the Mozilla Public
2
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
3
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4
+ import { matchConstraint, formatConstraint } from '../constraints/index.js';
5
+ /**
6
+ * Check if an entity matches a material facet
7
+ */
8
+ export function checkMaterialFacet(facet, expressId, accessor) {
9
+ // Get materials for the entity
10
+ const materials = accessor.getMaterials(expressId);
11
+ // If no value constraint, just check if any material exists
12
+ if (!facet.value) {
13
+ if (materials.length === 0) {
14
+ return {
15
+ passed: false,
16
+ actualValue: '(none)',
17
+ expectedValue: 'any material',
18
+ failure: {
19
+ type: 'MATERIAL_MISSING',
20
+ expected: 'any material',
21
+ },
22
+ };
23
+ }
24
+ return {
25
+ passed: true,
26
+ actualValue: materials.map((m) => m.name).join(', '),
27
+ expectedValue: 'any material',
28
+ };
29
+ }
30
+ // Check if any material matches the value constraint
31
+ const matchingMaterials = materials.filter((m) => matchConstraint(facet.value, m.name) ||
32
+ (m.category && matchConstraint(facet.value, m.category)));
33
+ if (matchingMaterials.length === 0) {
34
+ if (materials.length === 0) {
35
+ return {
36
+ passed: false,
37
+ actualValue: '(none)',
38
+ expectedValue: formatConstraint(facet.value),
39
+ failure: {
40
+ type: 'MATERIAL_MISSING',
41
+ expected: formatConstraint(facet.value),
42
+ },
43
+ };
44
+ }
45
+ const availableMaterials = materials.map((m) => m.name).join(', ');
46
+ return {
47
+ passed: false,
48
+ actualValue: availableMaterials,
49
+ expectedValue: formatConstraint(facet.value),
50
+ failure: {
51
+ type: 'MATERIAL_VALUE_MISMATCH',
52
+ field: 'material',
53
+ actual: availableMaterials,
54
+ expected: formatConstraint(facet.value),
55
+ context: {
56
+ availableMaterials,
57
+ },
58
+ },
59
+ };
60
+ }
61
+ return {
62
+ passed: true,
63
+ actualValue: matchingMaterials.map((m) => m.name).join(', '),
64
+ expectedValue: formatConstraint(facet.value),
65
+ };
66
+ }
67
+ //# sourceMappingURL=material-facet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"material-facet.js","sourceRoot":"","sources":["../../src/facets/material-facet.ts"],"names":[],"mappings":"AAAA;;+DAE+D;AAQ/D,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE5E;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAChC,KAAuB,EACvB,SAAiB,EACjB,QAAyB;IAEzB,+BAA+B;IAC/B,MAAM,SAAS,GAAG,QAAQ,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEnD,4DAA4D;IAC5D,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACjB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,QAAQ;gBACrB,aAAa,EAAE,cAAc;gBAC7B,OAAO,EAAE;oBACP,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,cAAc;iBACzB;aACF,CAAC;QACJ,CAAC;QAED,OAAO;YACL,MAAM,EAAE,IAAI;YACZ,WAAW,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YACpD,aAAa,EAAE,cAAc;SAC9B,CAAC;IACJ,CAAC;IAED,qDAAqD;IACrD,MAAM,iBAAiB,GAAG,SAAS,CAAC,MAAM,CACxC,CAAC,CAAC,EAAE,EAAE,CACJ,eAAe,CAAC,KAAK,CAAC,KAAM,EAAE,CAAC,CAAC,IAAI,CAAC;QACrC,CAAC,CAAC,CAAC,QAAQ,IAAI,eAAe,CAAC,KAAK,CAAC,KAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAC5D,CAAC;IAEF,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,OAAO;gBACL,MAAM,EAAE,KAAK;gBACb,WAAW,EAAE,QAAQ;gBACrB,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;gBAC5C,OAAO,EAAE;oBACP,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;iBACxC;aACF,CAAC;QACJ,CAAC;QAED,MAAM,kBAAkB,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEnE,OAAO;YACL,MAAM,EAAE,KAAK;YACb,WAAW,EAAE,kBAAkB;YAC/B,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;YAC5C,OAAO,EAAE;gBACP,IAAI,EAAE,yBAAyB;gBAC/B,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,kBAAkB;gBAC1B,QAAQ,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;gBACvC,OAAO,EAAE;oBACP,kBAAkB;iBACnB;aACF;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;QAC5D,aAAa,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,CAAC;KAC7C,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * PartOf facet checker
3
+ */
4
+ import type { IDSPartOfFacet, IFCDataAccessor } from '../types.js';
5
+ import type { FacetCheckResult } from './index.js';
6
+ /**
7
+ * Check if an entity matches a partOf facet
8
+ */
9
+ export declare function checkPartOfFacet(facet: IDSPartOfFacet, expressId: number, accessor: IFCDataAccessor): FacetCheckResult;
10
+ //# sourceMappingURL=partof-facet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"partof-facet.d.ts","sourceRoot":"","sources":["../../src/facets/partof-facet.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EAEhB,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAYnD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,cAAc,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,GACxB,gBAAgB,CAyGlB"}