@dialecte/scl 0.3.17 → 0.4.1

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 (54) hide show
  1. package/dist/{hooks-BBGXNK0x.js → hooks-CZTZsrpD.js} +23574 -11419
  2. package/dist/v2019C1/config/dialecte.config.d.ts +11911 -2332
  3. package/dist/v2019C1/config/dialecte.config.d.ts.map +1 -1
  4. package/dist/v2019C1/config/hydrated.types.d.ts +3 -2
  5. package/dist/v2019C1/config/hydrated.types.d.ts.map +1 -1
  6. package/dist/v2019C1/constants/index.d.ts +1 -0
  7. package/dist/v2019C1/constants/index.d.ts.map +1 -1
  8. package/dist/v2019C1/constants/min-requested-scd-file.d.ts +37 -0
  9. package/dist/v2019C1/constants/min-requested-scd-file.d.ts.map +1 -0
  10. package/dist/v2019C1/definition/constants.generated.d.ts +1126 -211
  11. package/dist/v2019C1/definition/constants.generated.d.ts.map +1 -1
  12. package/dist/v2019C1/definition/definition.generated.d.ts +10804 -2134
  13. package/dist/v2019C1/definition/definition.generated.d.ts.map +1 -1
  14. package/dist/v2019C1/definition/types.generated.d.ts +920 -1
  15. package/dist/v2019C1/definition/types.generated.d.ts.map +1 -1
  16. package/dist/v2019C1/extensions/identity/query/resolve-identity.d.ts +4 -3
  17. package/dist/v2019C1/extensions/identity/query/resolve-identity.d.ts.map +1 -1
  18. package/dist/v2019C1/extensions/lifecycle/constraints/index.d.ts +1 -1
  19. package/dist/v2019C1/extensions/lifecycle/constraints/index.d.ts.map +1 -1
  20. package/dist/v2019C1/extensions/lifecycle/instance/find-instance.d.ts.map +1 -1
  21. package/dist/v2019C1/extensions/presentation/query/extract-element-title.d.ts +1 -1
  22. package/dist/v2019C1/extensions/presentation/query/extract-element-title.d.ts.map +1 -1
  23. package/dist/v2019C1/hooks/after-created/after-created.d.ts.map +1 -1
  24. package/dist/v2019C1/hooks/after-created/min-requested-scd-file.d.ts +14 -0
  25. package/dist/v2019C1/hooks/after-created/min-requested-scd-file.d.ts.map +1 -0
  26. package/dist/v2019C1/hooks/after-updated/after-updated.d.ts +2 -1
  27. package/dist/v2019C1/hooks/after-updated/after-updated.d.ts.map +1 -1
  28. package/dist/v2019C1/hooks/after-updated/min-requested-scd-file.d.ts +17 -0
  29. package/dist/v2019C1/hooks/after-updated/min-requested-scd-file.d.ts.map +1 -0
  30. package/dist/v2019C1/hooks/before-delete/before-delete.d.ts +2 -1
  31. package/dist/v2019C1/hooks/before-delete/before-delete.d.ts.map +1 -1
  32. package/dist/v2019C1/hooks/before-delete/min-requested-scd-file.d.ts +18 -0
  33. package/dist/v2019C1/hooks/before-delete/min-requested-scd-file.d.ts.map +1 -0
  34. package/dist/v2019C1/hooks/shared/index.d.ts +2 -1
  35. package/dist/v2019C1/hooks/shared/index.d.ts.map +1 -1
  36. package/dist/v2019C1/hooks/shared/min-requested-scd-file/entry-operations.d.ts +29 -0
  37. package/dist/v2019C1/hooks/shared/min-requested-scd-file/entry-operations.d.ts.map +1 -0
  38. package/dist/v2019C1/hooks/shared/min-requested-scd-file/index.d.ts +5 -0
  39. package/dist/v2019C1/hooks/shared/min-requested-scd-file/index.d.ts.map +1 -0
  40. package/dist/v2019C1/hooks/shared/min-requested-scd-file/min-requested-scd-file.types.d.ts +4 -0
  41. package/dist/v2019C1/hooks/shared/min-requested-scd-file/min-requested-scd-file.types.d.ts.map +1 -0
  42. package/dist/v2019C1/hooks/shared/min-requested-scd-file/resolve-affected-ieds.d.ts +25 -0
  43. package/dist/v2019C1/hooks/shared/min-requested-scd-file/resolve-affected-ieds.d.ts.map +1 -0
  44. package/dist/v2019C1/hooks/shared/min-requested-scd-file/sync-min-requested-scd-files.d.ts +13 -0
  45. package/dist/v2019C1/hooks/shared/min-requested-scd-file/sync-min-requested-scd-files.d.ts.map +1 -0
  46. package/dist/v2019C1/hooks/shared/record-ops.d.ts +19 -0
  47. package/dist/v2019C1/hooks/shared/record-ops.d.ts.map +1 -1
  48. package/dist/v2019C1/index.js +13 -13
  49. package/dist/v2019C1/test/assert-valid-scl-xml.d.ts +2 -23
  50. package/dist/v2019C1/test/assert-valid-scl-xml.d.ts.map +1 -1
  51. package/dist/v2019C1/test.js +23 -105
  52. package/package.json +4 -4
  53. package/dist/v2019C1/test/assert-valid-scl-xml.types.d.ts +0 -45
  54. package/dist/v2019C1/test/assert-valid-scl-xml.types.d.ts.map +0 -1
@@ -0,0 +1,18 @@
1
+ import { Scl, Config } from '../../config';
2
+ import type * as Core from '@dialecte/core';
3
+ /**
4
+ * Sync the IEDs affected by deleting `record` and its subtree to the current SCD.
5
+ *
6
+ * Runs before the deletion, while the subtree is still readable. The sync only reads the `Header`
7
+ * and the IED's own `MinRequestedSCDFiles`, which the deletion leaves intact, so its result is the
8
+ * same as after the deletion. Deleting an IED itself syncs nothing.
9
+ *
10
+ * @stopgap Stamps at edit time with the Header version current during the edit, so the entry is one
11
+ * version behind when the version is bumped after editing. Remove once a Header version change
12
+ * stamps the IEDs changed since the previous version change (needs the store to list the records
13
+ * changed since then).
14
+ */
15
+ export declare function syncMinRequestedScdFileOnDelete<GenericElement extends Scl.ElementsOf>(query: Core.Query<Config>, params: {
16
+ record: Scl.RawRecord<GenericElement>;
17
+ }): Promise<Scl.Operation[]>;
18
+ //# sourceMappingURL=min-requested-scd-file.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"min-requested-scd-file.d.ts","sourceRoot":"","sources":["../../../../src/v2019C1/hooks/before-delete/min-requested-scd-file.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,KAAK,IAAI,MAAM,gBAAgB,CAAA;AAE3C;;;;;;;;;;;GAWG;AACH,wBAAsB,+BAA+B,CAAC,cAAc,SAAS,GAAG,CAAC,UAAU,EAC1F,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,cAAc,CAAC,CAAA;CAAE,GAC/C,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAM1B"}
@@ -2,5 +2,6 @@ export { updateRefsForEntry, getRefEntriesForTarget } from './ref-entry-ops';
2
2
  export { reconcileMappedName } from './mapped-name';
3
3
  export { reconcileReferrerRefPaths } from './ref-path-rebuild';
4
4
  export { reconcileLNodeBinding } from './lnode-binding';
5
- export { updatedOperation, upsertAttribute } from './record-ops';
5
+ export { changedAttributeNames, hasAttributeChange, readSnapshotAttribute, updatedOperation, upsertAttribute, } from './record-ops';
6
+ export * from './min-requested-scd-file';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2019C1/hooks/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/v2019C1/hooks/shared/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,MAAM,eAAe,CAAA;AACnD,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAA;AACvD,OAAO,EACN,qBAAqB,EACrB,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,GACf,MAAM,cAAc,CAAA;AACrB,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,29 @@
1
+ import { ScdFileReference } from './min-requested-scd-file.types';
2
+ import { Scl, Config } from '../../../config';
3
+ import type * as Core from '@dialecte/core';
4
+ /** The wrapper's entries referencing the project `fileUuid`, in document order. */
5
+ export declare function findProjectEntries(query: Core.Query<Config>, params: {
6
+ wrapper: Scl.Ref<'MinRequestedSCDFiles'>;
7
+ fileUuid: string;
8
+ }): Promise<Scl.TrackedRecord<'MinRequestedSCDFile'>[]>;
9
+ /**
10
+ * Fold `duplicates` of one project into `kept`: `kept` takes the hand-set attributes it lacks
11
+ * from them, then the `scdFile` managed values when given, and the duplicates are removed.
12
+ */
13
+ export declare function foldEntryOperations(query: Core.Query<Config>, params: {
14
+ wrapper: Scl.TrackedRecord<'MinRequestedSCDFiles'>;
15
+ kept: Scl.TrackedRecord<'MinRequestedSCDFile'>;
16
+ duplicates: Scl.TrackedRecord<'MinRequestedSCDFile'>[];
17
+ scdFile?: ScdFileReference;
18
+ }): Promise<Scl.Operation[]>;
19
+ /** Append a new entry for `scdFile` to an existing wrapper. */
20
+ export declare function appendEntryOperations(params: {
21
+ wrapper: Scl.TrackedRecord<'MinRequestedSCDFiles'>;
22
+ scdFile: ScdFileReference;
23
+ }): Scl.Operation[];
24
+ /** Create the wrapper under `ied`, holding a single entry for `scdFile`. */
25
+ export declare function createWrapperOperations(params: {
26
+ ied: Scl.TrackedRecord<'IED'>;
27
+ scdFile: ScdFileReference;
28
+ }): Scl.Operation[];
29
+ //# sourceMappingURL=entry-operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entry-operations.d.ts","sourceRoot":"","sources":["../../../../../src/v2019C1/hooks/shared/min-requested-scd-file/entry-operations.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAA;AACtE,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,KAAK,IAAI,MAAM,gBAAgB,CAAA;AAE3C,mFAAmF;AACnF,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpE,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAUrD;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IACP,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAA;IAClD,IAAI,EAAE,GAAG,CAAC,aAAa,CAAC,qBAAqB,CAAC,CAAA;IAC9C,UAAU,EAAE,GAAG,CAAC,aAAa,CAAC,qBAAqB,CAAC,EAAE,CAAA;IACtD,OAAO,CAAC,EAAE,gBAAgB,CAAA;CAC1B,GACC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CA+B1B;AAED,+DAA+D;AAC/D,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC7C,OAAO,EAAE,GAAG,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAA;IAClD,OAAO,EAAE,gBAAgB,CAAA;CACzB,GAAG,GAAG,CAAC,SAAS,EAAE,CAclB;AAED,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC/C,GAAG,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,CAAA;IAC7B,OAAO,EAAE,gBAAgB,CAAA;CACzB,GAAG,GAAG,CAAC,SAAS,EAAE,CAyBlB"}
@@ -0,0 +1,5 @@
1
+ export { findProjectEntries, foldEntryOperations } from './entry-operations';
2
+ export { resolveAffectedIeds, resolveAncestorIed, resolveIedByName } from './resolve-affected-ieds';
3
+ export { syncMinRequestedScdFiles } from './sync-min-requested-scd-files';
4
+ export type * from './min-requested-scd-file.types';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/v2019C1/hooks/shared/min-requested-scd-file/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAC5E,OAAO,EAAE,mBAAmB,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAA;AACnG,OAAO,EAAE,wBAAwB,EAAE,MAAM,gCAAgC,CAAA;AACzE,mBAAmB,gCAAgC,CAAA"}
@@ -0,0 +1,4 @@
1
+ import { Scl } from '../../../config';
2
+ /** The SCD file an IED's entry must reference: the `Header` identity and version. */
3
+ export type ScdFileReference = Required<Pick<Scl.AttributesValueObjectOf<'MinRequestedSCDFile'>, 'fileType' | 'fileUuid' | 'version' | 'revision'>>;
4
+ //# sourceMappingURL=min-requested-scd-file.types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"min-requested-scd-file.types.d.ts","sourceRoot":"","sources":["../../../../../src/v2019C1/hooks/shared/min-requested-scd-file/min-requested-scd-file.types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,qFAAqF;AACrF,MAAM,MAAM,gBAAgB,GAAG,QAAQ,CACtC,IAAI,CACH,GAAG,CAAC,uBAAuB,CAAC,qBAAqB,CAAC,EAClD,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,CAChD,CACD,CAAA"}
@@ -0,0 +1,25 @@
1
+ import { Scl, Config } from '../../../config';
2
+ import type * as Core from '@dialecte/core';
3
+ /**
4
+ * The IEDs whose configuration changes when `record` is created, updated or deleted.
5
+ *
6
+ * IED content resolves to its `IED` ancestor. Communication content resolves through
7
+ * `ConnectedAP@iedName`; a `SubNetwork` setting reaches every attached IED, once each.
8
+ */
9
+ export declare function resolveAffectedIeds(query: Core.Query<Config>, params: {
10
+ record: Scl.RawRecord<Scl.ElementsOf>;
11
+ }): Promise<Scl.Ref<'IED'>[]>;
12
+ /** The `IED` holding `record`, or `null` outside any IED. */
13
+ export declare function resolveAncestorIed(query: Core.Query<Config>, params: {
14
+ record: Scl.RawRecord<Scl.ElementsOf>;
15
+ }): Promise<Scl.Ref<'IED'> | null>;
16
+ /**
17
+ * The `IED` named `iedName`, or `null` when none carries that name.
18
+ *
19
+ * @stopgap Finds the IED by the `iedName` string. Remove once `ConnectedAP` resolves its
20
+ * `AccessPoint` by uuid through the reference registry: resolve through that reference instead.
21
+ */
22
+ export declare function resolveIedByName(query: Core.Query<Config>, params: {
23
+ iedName: string | undefined;
24
+ }): Promise<Scl.Ref<'IED'> | null>;
25
+ //# sourceMappingURL=resolve-affected-ieds.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve-affected-ieds.d.ts","sourceRoot":"","sources":["../../../../../src/v2019C1/hooks/shared/min-requested-scd-file/resolve-affected-ieds.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,KAAK,IAAI,MAAM,gBAAgB,CAAA;AAE3C;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACxC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;CAAE,GAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAwB3B;AAED,6DAA6D;AAC7D,wBAAsB,kBAAkB,CACvC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IAAE,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;CAAE,GAC/C,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAMhC;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACrC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IAAE,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;CAAE,GACrC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAMhC"}
@@ -0,0 +1,13 @@
1
+ import { Scl, Config } from '../../../config';
2
+ import type * as Core from '@dialecte/core';
3
+ /**
4
+ * Make each IED's `MinRequestedSCDFiles` reference the current SCD: the entry whose `fileUuid` is
5
+ * the `Header` uuid is created or brought up to the Header version and revision. Entries of other
6
+ * projects are left untouched; duplicate entries of the current project are folded into one.
7
+ *
8
+ * Without a `Header` uuid there is no SCD to reference, so nothing is written.
9
+ */
10
+ export declare function syncMinRequestedScdFiles(query: Core.Query<Config>, params: {
11
+ iedRefs: Scl.Ref<'IED'>[];
12
+ }): Promise<Scl.Operation[]>;
13
+ //# sourceMappingURL=sync-min-requested-scd-files.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-min-requested-scd-files.d.ts","sourceRoot":"","sources":["../../../../../src/v2019C1/hooks/shared/min-requested-scd-file/sync-min-requested-scd-files.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AACnD,OAAO,KAAK,KAAK,IAAI,MAAM,gBAAgB,CAAA;AAE3C;;;;;;GAMG;AACH,wBAAsB,wBAAwB,CAC7C,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EACzB,MAAM,EAAE;IAAE,OAAO,EAAE,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAA;CAAE,GACnC,OAAO,CAAC,GAAG,CAAC,SAAS,EAAE,CAAC,CAiB1B"}
@@ -11,6 +11,25 @@ export type AttributeList = readonly {
11
11
  * cast-free.
12
12
  */
13
13
  export declare function updatedOperation(record: Scl.RawRecord<Scl.ElementsOf>, attributes: AttributeList): Scl.Operation;
14
+ /**
15
+ * Read an attribute from a record snapshot. Only for a state `query` can no longer reach, such as
16
+ * the `oldRecord` of an update hook; read the current state through `query.getAttribute`.
17
+ */
18
+ export declare function readSnapshotAttribute(params: {
19
+ record: Scl.RawRecord<Scl.ElementsOf>;
20
+ name: string;
21
+ }): string | undefined;
22
+ /** Whether any of the named attributes differs between two snapshots of one record. */
23
+ export declare function hasAttributeChange(params: {
24
+ oldRecord: Scl.RawRecord<Scl.ElementsOf>;
25
+ newRecord: Scl.RawRecord<Scl.ElementsOf>;
26
+ names: readonly string[];
27
+ }): boolean;
28
+ /** Names of the attributes whose value differs between two snapshots of one record. */
29
+ export declare function changedAttributeNames(params: {
30
+ oldRecord: Scl.RawRecord<Scl.ElementsOf>;
31
+ newRecord: Scl.RawRecord<Scl.ElementsOf>;
32
+ }): string[];
14
33
  /** Upsert (replace-or-append) an attribute value on a plain attribute list. */
15
34
  export declare function upsertAttribute(attributes: AttributeList, name: string, value: string): {
16
35
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"record-ops.d.ts","sourceRoot":"","sources":["../../../../src/v2019C1/hooks/shared/record-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAA;AAEtE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EACrC,UAAU,EAAE,aAAa,GACvB,GAAG,CAAC,SAAS,CAMf;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAC9B,UAAU,EAAE,aAAa,EACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAInC"}
1
+ {"version":3,"file":"record-ops.d.ts","sourceRoot":"","sources":["../../../../src/v2019C1/hooks/shared/record-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,gEAAgE;AAChE,MAAM,MAAM,aAAa,GAAG,SAAS;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAAA;AAEtE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC/B,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EACrC,UAAU,EAAE,aAAa,GACvB,GAAG,CAAC,SAAS,CAMf;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC7C,MAAM,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACrC,IAAI,EAAE,MAAM,CAAA;CACZ,GAAG,MAAM,GAAG,SAAS,CAGrB;AAED,uFAAuF;AACvF,wBAAgB,kBAAkB,CAAC,MAAM,EAAE;IAC1C,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACxC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACxC,KAAK,EAAE,SAAS,MAAM,EAAE,CAAA;CACxB,GAAG,OAAO,CAOV;AAED,uFAAuF;AACvF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC7C,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;IACxC,SAAS,EAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAA;CACxC,GAAG,MAAM,EAAE,CAUX;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAC9B,UAAU,EAAE,aAAa,EACzB,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,MAAM,GACX;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAInC"}
@@ -1,7 +1,7 @@
1
- import { A as e, C as t, D as n, E as r, M as i, N as a, O as o, P as s, S as c, T as l, _ as u, a as d, b as f, c as p, d as m, f as h, g, h as _, i as v, j as y, k as b, l as x, m as S, n as C, o as w, p as T, r as E, s as D, t as O, u as k, v as A, w as j, x as M, y as N } from "../hooks-BBGXNK0x.js";
2
- import { Project as P } from "@dialecte/core";
1
+ import { A as e, B as t, C as n, D as r, E as i, F as a, H as o, I as s, L as c, M as l, N as u, O as d, P as f, R as p, S as m, T as h, V as g, _, a as v, b as y, c as b, d as x, f as S, g as C, h as w, i as T, j as E, k as D, l as O, m as k, n as A, o as j, p as M, r as N, s as P, t as F, u as I, v as L, w as R, x as z, y as B, z as V } from "../hooks-CZTZsrpD.js";
2
+ import { Project as H } from "@dialecte/core";
3
3
  //#region src/v2019C1/extensions/lifecycle/validate/template-uuid-check.info.ts
4
- var F = {
4
+ var U = {
5
5
  "cross-type-template-uuid": {
6
6
  title: "Placeholder templateUuid reused across element types",
7
7
  description: "One templateUuid is carried by elements of several different types, so it cannot identify a single template element — it is an authoring placeholder, not real lineage.",
@@ -20,21 +20,21 @@ var F = {
20
20
  };
21
21
  //#endregion
22
22
  //#region src/v2019C1/dialecte.ts
23
- function I(e) {
24
- let { storage: t = { type: "local" }, extensions: n } = e ?? {};
25
- return new P({
26
- configs: { scl: i },
23
+ function W(e) {
24
+ let { storage: n = { type: "local" }, extensions: r } = e ?? {};
25
+ return new H({
26
+ configs: { scl: t },
27
27
  defaultConfigKey: "scl",
28
- storage: t,
28
+ storage: n,
29
29
  extensions: {
30
- base: E,
31
- custom: n
30
+ base: N,
31
+ custom: r
32
32
  },
33
33
  hooks: {
34
- ...C(),
35
- ...O
34
+ ...A(),
35
+ ...F
36
36
  }
37
37
  });
38
38
  }
39
39
  //#endregion
40
- export { p as ALL_REF_UUID_ATTRIBUTES, x as ALL_RESOLUTIONS, d as DEFAULT_IGNORED_ATTRIBUTES, f as FRAME_OMIT_CHILD_TAGS, j as KEEP_ON_ORPHAN_REFS, k as LOCKED_LNODE_ATTRIBUTES, m as MAPPED_NAME_REFS, h as PAIRS_BY_REF, b as PATH_CONTRIBUTING_ATTRIBUTES, e as PATH_EXTRACTION_CONFIG, l as REFERENCE_TAGS, r as REFERENCE_TAG_NAMES, D as REF_CONTAINERS, T as RESOLUTION_TARGET_REFS, N as RESOLUTION_TYPE, S as RESOLVABLE_RESOLUTIONS, y as SCL_DATABASE_CONFIG, i as SCL_DIALECTE_CONFIG, a as SCL_IO_CONFIG, s as SCL_NAMESPACES, n as TARGET_ELEMENT_TYPES, t as TEMPLATE_NAME, F as TEMPLATE_UUID_WARNING_INFO, M as TOPOLOGY_EQUIPMENT_TAGS, c as TOPOLOGY_STRUCTURAL_TAGS, A as TYPE_ID_REFERENCE_PAIRS, _ as TYPE_ID_REFERRERS_BY_TARGET, g as TYPE_ID_REF_ATTRIBUTES, u as TYPE_ID_TARGET_TAGS, o as UUID_REFERENCE_PAIRS, I as createSclProject, w as isTypeIdTarget, v as presentationScope };
40
+ export { b as ALL_REF_UUID_ATTRIBUTES, O as ALL_RESOLUTIONS, v as DEFAULT_IGNORED_ATTRIBUTES, d as FRAME_OMIT_CHILD_TAGS, l as KEEP_ON_ORPHAN_REFS, I as LOCKED_LNODE_ATTRIBUTES, x as MAPPED_NAME_REFS, y as MIN_REQUESTED_SCD_CONNECTED_AP_TRIGGER_TAGS, z as MIN_REQUESTED_SCD_DESCRIPTIVE_ATTRIBUTES, m as MIN_REQUESTED_SCD_DESCRIPTIVE_TAGS, n as MIN_REQUESTED_SCD_FILE_USER_ATTRIBUTES, R as MIN_REQUESTED_SCD_IED_IGNORED_ATTRIBUTES, h as MIN_REQUESTED_SCD_IED_TRIGGER_ROOTS, i as MIN_REQUESTED_SCD_IED_TRIGGER_TAGS, r as MIN_REQUESTED_SCD_SUBNETWORK_TRIGGER_TAGS, S as PAIRS_BY_REF, c as PATH_CONTRIBUTING_ATTRIBUTES, p as PATH_EXTRACTION_CONFIG, u as REFERENCE_TAGS, f as REFERENCE_TAG_NAMES, P as REF_CONTAINERS, M as RESOLUTION_TARGET_REFS, B as RESOLUTION_TYPE, k as RESOLVABLE_RESOLUTIONS, V as SCL_DATABASE_CONFIG, t as SCL_DIALECTE_CONFIG, g as SCL_IO_CONFIG, o as SCL_NAMESPACES, a as TARGET_ELEMENT_TYPES, E as TEMPLATE_NAME, U as TEMPLATE_UUID_WARNING_INFO, D as TOPOLOGY_EQUIPMENT_TAGS, e as TOPOLOGY_STRUCTURAL_TAGS, L as TYPE_ID_REFERENCE_PAIRS, w as TYPE_ID_REFERRERS_BY_TARGET, C as TYPE_ID_REF_ATTRIBUTES, _ as TYPE_ID_TARGET_TAGS, s as UUID_REFERENCE_PAIRS, W as createSclProject, j as isTypeIdTarget, T as presentationScope };
@@ -1,24 +1,3 @@
1
- import { AssertValidSclTestCasesParams, AssertValidSclXmlOptions } from './assert-valid-scl-xml.types';
2
- /**
3
- * Assert a test XML string is valid SCL, structurally: every element's namespace matches its parent
4
- * context, every element is an allowed child of its parent, and every attribute is a known attribute of
5
- * its element. Elements unknown to the schema are skipped (bespoke content under a transparent
6
- * `Private`), and so is any element in a namespace the SCL config does not declare — even when its
7
- * local name collides with a schema element.
8
- *
9
- * `requireComplete` (default `true`) additionally requires every schema-required attribute to be
10
- * present. Minimal test fixtures legitimately omit these (e.g. a bare `<SCL>` without
11
- * `version`/`revision`/`release`), so the harness runs with it OFF — structural correctness is
12
- * enforced, document completeness is not.
13
- *
14
- * NOT yet enforced (planned with the validation feature): attribute VALUE facets (uuid pattern, enums,
15
- * datatypes) and cross-element constraints (unique keys, keyref resolution).
16
- */
17
- export declare function assertValidSclXml(xml: string, label?: string, options?: AssertValidSclXmlOptions): void;
18
- /**
19
- * Validate every case's `sourceXml`/`targetXml` and throw ONCE with the violations of all invalid
20
- * cases, each attributed to its case name — so a suite's fixtures are fixed in one round instead of
21
- * one failure at a time.
22
- */
23
- export declare function assertValidSclTestCases(params: AssertValidSclTestCasesParams): void;
1
+ export declare const assertValidSclXml: (xml: string, label?: string, options?: import('@dialecte/core/test').AssertValidXmlOptions) => void;
2
+ export declare const assertValidSclTestCases: (params: import('@dialecte/core/test').AssertValidXmlTestCasesParams) => void;
24
3
  //# sourceMappingURL=assert-valid-scl-xml.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"assert-valid-scl-xml.d.ts","sourceRoot":"","sources":["../../../src/v2019C1/test/assert-valid-scl-xml.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACX,6BAA6B,EAC7B,wBAAwB,EAKxB,MAAM,8BAA8B,CAAA;AAsJrC;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAChC,GAAG,EAAE,MAAM,EACX,KAAK,SAAa,EAClB,OAAO,GAAE,wBAA6B,GACpC,IAAI,CAIN;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,6BAA6B,GAAG,IAAI,CAkBnF"}
1
+ {"version":3,"file":"assert-valid-scl-xml.d.ts","sourceRoot":"","sources":["../../../src/v2019C1/test/assert-valid-scl-xml.ts"],"names":[],"mappings":"AAsBA,eAAO,MAAM,iBAAiB,sGAAiB,CAAA;AAC/C,eAAO,MAAM,uBAAuB,+EAA0B,CAAA"}
@@ -1,120 +1,38 @@
1
- import { F as e, M as t, P as n, n as r, r as i, t as a } from "../hooks-BBGXNK0x.js";
1
+ import { B as e, H as t, U as n, n as r, r as i, t as a } from "../hooks-CZTZsrpD.js";
2
2
  import { CUSTOM_RECORD_ID_ATTRIBUTE as o, CUSTOM_RECORD_ID_ATTRIBUTE_NAME as s, XMLNS_XSI_NAMESPACE as c } from "@dialecte/core/helpers";
3
- import { XMLNS_DEV_NAMESPACE as l, createTestProject as u, createTestRecordFactory as d, createTestRunner as f, createXmlAssertions as p } from "@dialecte/core/test";
3
+ import { XMLNS_DEV_NAMESPACE as l, createTestProject as u, createTestRecordFactory as d, createTestRunner as f, createXmlAssertions as p, createXmlSchemaAssertions as m } from "@dialecte/core/test";
4
4
  //#region src/v2019C1/test/assert-valid-scl-xml.ts
5
- var m = e, h = Object.values(n).map((e) => e.uri);
6
- function g(e) {
7
- return e.namespaceURI !== null && !h.includes(e.namespaceURI);
8
- }
9
- function _(e, t) {
10
- return ((e ? m[e]?.children?.details?.[t]?.namespace : void 0) ?? m[t]?.namespace)?.uri;
11
- }
12
- function v(e, t) {
13
- let n = e.children;
14
- return n ? n.any === !0 || n.sequence?.includes(t) ? !0 : n.details ? t in n.details : !1 : !1;
15
- }
16
- function y(e) {
17
- return new Set([...e.attributes?.sequence ?? [], ...Object.keys(e.attributes?.details ?? {})]);
18
- }
19
- function b(e) {
20
- let { element: t, definition: n, requireComplete: r } = e;
21
- if (!n.attributes) return [];
22
- let i = y(n), a = Array.from(t.attributes).filter((e) => e.namespaceURI === null && !i.has(e.localName)).map((e) => `[attribute] <${t.localName}> has unknown attribute '${e.localName}'`);
23
- if (!r) return a;
24
- let o = Object.entries(n.attributes.details ?? {}).filter(([e, n]) => n?.required && !t.hasAttribute(e)).map(([e]) => `[required] <${t.localName}> is missing required attribute '${e}'`);
25
- return [...a, ...o];
26
- }
27
- function x(e) {
28
- let { element: t, parentLocalName: n, requireComplete: r } = e, i = Array.from(t.children);
29
- if (g(t)) return i.flatMap((e) => x({
30
- element: e,
31
- parentLocalName: void 0,
32
- requireComplete: r
33
- }));
34
- let a = t.localName, o = [], s = _(n, a);
35
- if (s !== void 0 && t.namespaceURI !== s) {
36
- let e = n ? ` under <${n}>` : "";
37
- o.push(`[namespace] <${t.tagName}>${e}: is in ${t.namespaceURI ?? "(no namespace)"}, schema declares ${s}`);
38
- }
39
- let c = n ? m[n] : void 0;
40
- c && !v(c, a) && o.push(`[containment] <${a}> is not a valid child of <${n}>`);
41
- let l = m[a], u = l ? b({
42
- element: t,
43
- definition: l,
44
- requireComplete: r
45
- }) : [], d = i.flatMap((e) => x({
46
- element: e,
47
- parentLocalName: a,
48
- requireComplete: r
49
- }));
50
- return [
51
- ...o,
52
- ...u,
53
- ...d
54
- ];
55
- }
56
- function S(e) {
57
- let { xml: t, label: n, requireComplete: r } = e;
58
- if (!t.startsWith("<?xml") && t.trimStart().startsWith("<?xml")) return `${n}: malformed XML — the XML declaration must be the very first characters of the string: remove the declaration (a snippet does not need one) or the whitespace before it`;
59
- let i = new DOMParser().parseFromString(t, "application/xml"), a = i.querySelector("parsererror");
60
- if (a) return `${n}: malformed XML — ${a.textContent?.trim()}`;
61
- if (!i.documentElement) return;
62
- let o = x({
63
- element: i.documentElement,
64
- parentLocalName: void 0,
65
- requireComplete: r
66
- });
67
- return o.length > 0 ? `${n}: not valid SCL:\n ${o.join("\n ")}` : void 0;
68
- }
69
- function C(e, t = "test XML", n = {}) {
70
- let r = S({
71
- xml: e,
72
- label: t,
73
- requireComplete: n.requireComplete ?? !0
74
- });
75
- if (r) throw Error(r);
76
- }
77
- function w(e) {
78
- let { testCases: t } = e, n = Object.entries(t).flatMap(([e, t]) => [S({
79
- xml: t.sourceXml,
80
- label: `${e} › sourceXml`,
81
- requireComplete: !1
82
- }), t.targetXml ? S({
83
- xml: t.targetXml,
84
- label: `${e} › targetXml`,
85
- requireComplete: !1
86
- }) : void 0].filter((e) => e !== void 0));
87
- if (n.length > 0) throw Error(n.join("\n"));
88
- }
89
- //#endregion
90
- //#region src/v2019C1/test/hydrated-test.ts
91
- var T = {
5
+ var { assertValidXml: h, assertValidXmlTestCases: g } = m({
6
+ definition: n,
7
+ namespaces: t,
8
+ schemaName: "SCL"
9
+ }), _ = h, v = g, y = {
92
10
  ...r(),
93
11
  ...a
94
- }, E = `xmlns="${t.namespaces.default.uri}"`, D = `xmlns:${t.namespaces.v2019C1.prefix}="${t.namespaces.v2019C1.uri}"`, O = `${E} ${D} ${l} ${c}`, k = { base: i }, A = f({
95
- dialecteConfig: t,
96
- extensions: k,
97
- hooks: T
98
- }), j = {
99
- ...A,
12
+ }, b = `xmlns="${e.namespaces.default.uri}"`, x = `xmlns:${e.namespaces.v2019C1.prefix}="${e.namespaces.v2019C1.uri}"`, S = `${b} ${x} ${l} ${c}`, C = { base: i }, w = f({
13
+ dialecteConfig: e,
14
+ extensions: C,
15
+ hooks: y
16
+ }), T = {
17
+ ...w,
100
18
  withExport(e) {
101
- w({ testCases: e.testCases }), A.withExport(e);
19
+ v({ testCases: e.testCases }), w.withExport(e);
102
20
  },
103
21
  withoutExport(e) {
104
- w({ testCases: e.testCases }), A.withoutExport(e);
22
+ v({ testCases: e.testCases }), w.withoutExport(e);
105
23
  }
106
24
  };
107
- async function M(e) {
108
- let { sourceXml: n, targetXml: r, dev: i } = e;
109
- return C(n, "sourceXml", { requireComplete: !1 }), r && C(r, "targetXml", { requireComplete: !1 }), u({
25
+ async function E(t) {
26
+ let { sourceXml: n, targetXml: r, dev: i } = t;
27
+ return _(n, "sourceXml", { requireComplete: !1 }), r && _(r, "targetXml", { requireComplete: !1 }), u({
110
28
  sourceXml: n,
111
29
  targetXml: r,
112
- dialecteConfig: t,
113
- extensions: k,
114
- hooks: T,
30
+ dialecteConfig: e,
31
+ extensions: C,
32
+ hooks: y,
115
33
  dev: i
116
34
  });
117
35
  }
118
- var N = d(t), { assertExpectedElementQueries: P, assertUnexpectedElementQueries: F } = p({ namespaces: t.namespaces });
36
+ var D = d(e), { assertExpectedElementQueries: O, assertUnexpectedElementQueries: k } = p({ namespaces: e.namespaces });
119
37
  //#endregion
120
- export { O as ALL_XMLNS_NAMESPACES, o as CUSTOM_RECORD_ID_ATTRIBUTE, s as CUSTOM_RECORD_ID_ATTRIBUTE_NAME, D as XMLNS_SCL_6_100_NAMESPACE, E as XMLNS_SCL_NAMESPACE, P as assertExpectedElementQueries, F as assertUnexpectedElementQueries, C as assertValidSclXml, M as createSclTestProject, N as createSclTestRecord, j as runSclTestCases };
38
+ export { S as ALL_XMLNS_NAMESPACES, o as CUSTOM_RECORD_ID_ATTRIBUTE, s as CUSTOM_RECORD_ID_ATTRIBUTE_NAME, x as XMLNS_SCL_6_100_NAMESPACE, b as XMLNS_SCL_NAMESPACE, O as assertExpectedElementQueries, k as assertUnexpectedElementQueries, _ as assertValidSclXml, E as createSclTestProject, D as createSclTestRecord, T as runSclTestCases };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dialecte/scl",
3
- "version": "0.3.17",
3
+ "version": "0.4.1",
4
4
  "description": "Dialecte - SCL (Substation Configuration Language) sdk",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -38,7 +38,7 @@
38
38
  "test": "vitest",
39
39
  "//====== CHECK ======//": "",
40
40
  "check": "run-p type-check type-check:test lint:check format:check",
41
- "type-check": "tsc --noEmit",
41
+ "type-check": "tsc -p tsconfig.build.json --noEmit",
42
42
  "type-check:test": "tsc -p tsconfig.vitest.json --noEmit",
43
43
  "lint:check": "oxlint",
44
44
  "lint:fix": "oxlint . --fix -D correctness --ignore-path .gitignore",
@@ -56,10 +56,10 @@
56
56
  "prepare": "husky"
57
57
  },
58
58
  "dependencies": {
59
- "@dialecte/core": "0.4.16"
59
+ "@dialecte/core": "0.5.1"
60
60
  },
61
61
  "devDependencies": {
62
- "@dialecte/cli": "0.0.2",
62
+ "@dialecte/cli": "0.0.3",
63
63
  "@tsconfig/node24": "^24.0.4",
64
64
  "@types/node": "^24.12.4",
65
65
  "@typescript/native": "npm:typescript@^7.0.2",
@@ -1,45 +0,0 @@
1
- export type SchemaNamespace = {
2
- uri: string;
3
- };
4
- /** The slice of a generated element definition the fixture validator reads. */
5
- export type SchemaElementDefinition = {
6
- namespace?: SchemaNamespace;
7
- attributes?: {
8
- sequence?: readonly string[];
9
- details?: Record<string, {
10
- required?: boolean;
11
- } | undefined>;
12
- };
13
- children?: {
14
- sequence?: readonly string[];
15
- any?: boolean;
16
- details?: Record<string, {
17
- namespace?: SchemaNamespace;
18
- } | undefined>;
19
- };
20
- };
21
- export type AssertValidSclXmlOptions = {
22
- requireComplete?: boolean;
23
- };
24
- export type DescribeInvalidSclXmlParams = {
25
- xml: string;
26
- label: string;
27
- requireComplete: boolean;
28
- };
29
- export type CollectElementViolationsParams = {
30
- element: Element;
31
- parentLocalName: string | undefined;
32
- requireComplete: boolean;
33
- };
34
- export type CollectAttributeViolationsParams = {
35
- element: Element;
36
- definition: SchemaElementDefinition;
37
- requireComplete: boolean;
38
- };
39
- export type AssertValidSclTestCasesParams = {
40
- testCases: Record<string, {
41
- sourceXml: string;
42
- targetXml?: string;
43
- }>;
44
- };
45
- //# sourceMappingURL=assert-valid-scl-xml.types.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"assert-valid-scl-xml.types.d.ts","sourceRoot":"","sources":["../../../src/v2019C1/test/assert-valid-scl-xml.types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,eAAe,GAAG;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,CAAA;AAE7C,+EAA+E;AAC/E,MAAM,MAAM,uBAAuB,GAAG;IACrC,SAAS,CAAC,EAAE,eAAe,CAAA;IAC3B,UAAU,CAAC,EAAE;QACZ,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QAC5B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;SAAE,GAAG,SAAS,CAAC,CAAA;KAC5D,CAAA;IACD,QAAQ,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;QAC5B,GAAG,CAAC,EAAE,OAAO,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,SAAS,CAAC,EAAE,eAAe,CAAA;SAAE,GAAG,SAAS,CAAC,CAAA;KACrE,CAAA;CACD,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IAAE,eAAe,CAAC,EAAE,OAAO,CAAA;CAAE,CAAA;AAEpE,MAAM,MAAM,2BAA2B,GAAG;IACzC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,eAAe,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,8BAA8B,GAAG;IAC5C,OAAO,EAAE,OAAO,CAAA;IAChB,eAAe,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,eAAe,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,gCAAgC,GAAG;IAC9C,OAAO,EAAE,OAAO,CAAA;IAChB,UAAU,EAAE,uBAAuB,CAAA;IACnC,eAAe,EAAE,OAAO,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,6BAA6B,GAAG;IAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CACpE,CAAA"}