@vscada/sim 0.0.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.
- package/dist/.tsbuildinfo +1 -0
- package/dist/generators/blink-generator.d.ts +26 -0
- package/dist/generators/blink-generator.d.ts.map +1 -0
- package/dist/generators/build-generators.d.ts +14 -0
- package/dist/generators/build-generators.d.ts.map +1 -0
- package/dist/generators/drift-generator.d.ts +27 -0
- package/dist/generators/drift-generator.d.ts.map +1 -0
- package/dist/generators/level-generator.d.ts +31 -0
- package/dist/generators/level-generator.d.ts.map +1 -0
- package/dist/generators/position-generator.d.ts +28 -0
- package/dist/generators/position-generator.d.ts.map +1 -0
- package/dist/generators/ramp-generator.d.ts +31 -0
- package/dist/generators/ramp-generator.d.ts.map +1 -0
- package/dist/generators/state-generator.d.ts +30 -0
- package/dist/generators/state-generator.d.ts.map +1 -0
- package/dist/generators/types.d.ts +8 -0
- package/dist/generators/types.d.ts.map +1 -0
- package/dist/generators/visibility-generator.d.ts +26 -0
- package/dist/generators/visibility-generator.d.ts.map +1 -0
- package/dist/generators/walk.d.ts +19 -0
- package/dist/generators/walk.d.ts.map +1 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +378 -0
- package/dist/inventory.d.ts +37 -0
- package/dist/inventory.d.ts.map +1 -0
- package/dist/prng.d.ts +19 -0
- package/dist/prng.d.ts.map +1 -0
- package/dist/quality.d.ts +38 -0
- package/dist/quality.d.ts.map +1 -0
- package/dist/simulator.d.ts +59 -0
- package/dist/simulator.d.ts.map +1 -0
- package/dist/test-fixtures/wte-scene.d.ts +15 -0
- package/dist/test-fixtures/wte-scene.d.ts.map +1 -0
- package/package.json +31 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"fileNames":["../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es5.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.dom.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.core.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.collection.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.generator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.iterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.proxy.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.reflect.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2015.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.array.include.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2016.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.arraybuffer.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2017.typedarrays.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asyncgenerator.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.asynciterable.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2018.regexp.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.array.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.object.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.symbol.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2019.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.bigint.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.date.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.promise.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.sharedmemory.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.string.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.symbol.wellknown.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.intl.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.es2020.number.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.d.ts","../../../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript/lib/lib.decorators.legacy.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/css-tag.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-controller.d.ts","../../../node_modules/.pnpm/@lit+reactive-element@2.1.2/node_modules/@lit/reactive-element/development/reactive-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/directive.d.ts","../../../node_modules/.pnpm/@types+trusted-types@2.0.7/node_modules/@types/trusted-types/lib/index.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/lit-html.d.ts","../../../node_modules/.pnpm/lit-element@4.2.2/node_modules/lit-element/development/lit-element.d.ts","../../../node_modules/.pnpm/lit-html@3.3.3/node_modules/lit-html/development/is-server.d.ts","../../../node_modules/.pnpm/lit@3.3.3/node_modules/lit/development/index.d.ts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/standard-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/registries.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/to-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/util.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/versions.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/schemas.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/checks.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/errors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/core.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/parse.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/regexes.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ar.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/az.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/be.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/bg.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ca.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/cs.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/da.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/de.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/el.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/en.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/eo.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/es.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fa.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fi.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/fr-CA.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/he.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hu.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/hy.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/id.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/is.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/it.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ja.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ka.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/kh.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/km.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ko.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/lt.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/mk.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ms.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/nl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/no.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ota.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ps.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/pt.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ro.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ru.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sl.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/sv.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ta.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/th.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/tr.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ua.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uk.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/ur.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/uz.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/vi.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-CN.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/zh-TW.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/yo.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/locales/index.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/doc.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/api.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-processors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/json-schema-generator.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/core/index.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/errors.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/parse.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/schemas.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/checks.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/compat.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/from-json-schema.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/iso.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/coerce.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/v4/classic/external.d.cts","../../../node_modules/.pnpm/zod@4.4.3/node_modules/zod/index.d.cts","../../core/dist/scene/scene-schema.d.ts","../../core/dist/contracts/tag-value.d.ts","../../core/dist/contracts/connection-state.d.ts","../../core/dist/contracts/time-source.d.ts","../../core/dist/contracts/renderer.d.ts","../../core/dist/contracts/handles.d.ts","../../core/dist/store/value-store.d.ts","../../core/dist/scheduler/animation-registry.d.ts","../../core/dist/topology/graph.d.ts","../../core/dist/media/registry.d.ts","../../core/dist/tokens.d.ts","../../core/dist/contracts/primitive.d.ts","../../core/dist/scheduler/quality.d.ts","../../core/dist/scheduler/quality-overlay.d.ts","../../core/dist/topology/inference.d.ts","../../core/dist/scheduler/scheduler.d.ts","../../core/dist/a11y/static-representation-registry.d.ts","../../core/dist/a11y/reduced-motion.d.ts","../../core/dist/scada-view.d.ts","../../core/dist/scene/constants.d.ts","../../core/dist/scene/errors.d.ts","../../core/dist/scene/structural-validator.d.ts","../../core/dist/registry/primitive-registry.d.ts","../../core/dist/scene/connection-geometry.d.ts","../../core/dist/contracts/connection-renderer.d.ts","../../core/dist/registry/connection-registry.d.ts","../../core/dist/registry/theme-registry.d.ts","../../core/dist/scene/lane-offset.d.ts","../../core/dist/scene/crossing-jumps.d.ts","../../core/dist/topology/traversal.d.ts","../../core/dist/topology/upstream-highlight.d.ts","../../core/dist/scheduler/visual-state-resolver.d.ts","../../core/dist/scheduler/alarm-band.d.ts","../../core/dist/scene/groups.d.ts","../../core/dist/topology/group-collapse.d.ts","../../core/dist/view/group-view-state.d.ts","../../core/dist/fsm/fsm.d.ts","../../core/dist/fsm/tween.d.ts","../../core/dist/license/format.d.ts","../../core/dist/license/state.d.ts","../../core/dist/interaction/gesture-arbiter.d.ts","../../core/dist/interaction/pointer-pipeline.d.ts","../../core/dist/a11y/contrast.d.ts","../../core/dist/units/registry.d.ts","../../core/dist/units/formatter.d.ts","../../core/dist/bindings/transforms.d.ts","../../core/dist/bindings/color-ramp.d.ts","../../core/dist/import/svg-source-registry.d.ts","../../core/dist/index.d.ts","../src/prng.ts","../src/inventory.ts","../src/generators/types.ts","../src/generators/blink-generator.ts","../src/generators/walk.ts","../src/generators/drift-generator.ts","../src/generators/level-generator.ts","../src/generators/position-generator.ts","../src/generators/ramp-generator.ts","../src/generators/state-generator.ts","../src/generators/visibility-generator.ts","../src/generators/build-generators.ts","../src/quality.ts","../src/simulator.ts","../src/index.ts","../../core/dist/scene/validate-scene.d.ts","../../core/dist/registry/element-catalog.d.ts","../../core/dist/scene-authoring.d.ts","../../builder/dist/catalog.d.ts","../../builder/dist/element-builder.d.ts","../../builder/dist/scene-builder.d.ts","../../builder/dist/errors.d.ts","../../builder/dist/factories.d.ts","../../builder/dist/index.d.ts","../src/test-fixtures/wte-scene.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/compatibility/disposable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/compatibility/indexable.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/compatibility/iterators.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/compatibility/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/globals.typedarray.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/buffer.buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/globals.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/abortcontroller.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/domexception.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/events.d.ts","../../../node_modules/.pnpm/buffer@6.0.3/node_modules/buffer/index.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/header.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/readable.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/file.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/fetch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/formdata.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/connector.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-dispatcher.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/global-origin.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool-stats.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/handlers.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/balanced-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-interceptor.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-client.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-pool.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/mock-errors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/env-http-proxy-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-handler.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/retry-agent.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/api.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/interceptors.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/util.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cookies.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/patch.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/websocket.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/eventsource.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/filereader.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/diagnostics-channel.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/content-type.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/cache.d.ts","../../../node_modules/.pnpm/undici-types@6.21.0/node_modules/undici-types/index.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/fetch.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/navigator.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/storage.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/web-globals/streams.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/assert.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/assert/strict.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/async_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/buffer.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/child_process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/cluster.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/console.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/constants.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/crypto.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/dgram.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/diagnostics_channel.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/dns.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/dns/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/domain.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/fs.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/fs/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/http.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/http2.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/https.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/inspector.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/inspector.generated.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/module.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/net.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/os.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/path.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/perf_hooks.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/process.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/punycode.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/querystring.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/readline.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/readline/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/repl.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/sea.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/sqlite.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/stream.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/stream/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/stream/consumers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/stream/web.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/string_decoder.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/test.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/timers.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/timers/promises.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/tls.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/trace_events.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/tty.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/url.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/util.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/v8.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/vm.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/wasi.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/worker_threads.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/zlib.d.ts","../../../node_modules/.pnpm/@types+node@22.20.1/node_modules/@types/node/index.d.ts","../../../node_modules/.pnpm/@types+pngjs@6.0.5/node_modules/@types/pngjs/index.d.ts"],"fileIdsList":[[216,266,283,284],[48,49,216,266,283,284],[216,263,264,266,283,284],[216,265,266,283,284],[266,283,284],[216,266,271,283,284,301],[216,266,267,272,277,283,284,286,298,309],[216,266,267,268,277,283,284,286],[211,212,213,216,266,283,284],[216,266,269,283,284,310],[216,266,270,271,278,283,284,287],[216,266,271,283,284,298,306],[216,266,272,274,277,283,284,286],[216,265,266,273,283,284],[216,266,274,275,283,284],[216,266,276,277,283,284],[216,265,266,277,283,284],[216,266,277,278,279,283,284,298,309],[216,266,277,278,279,283,284,293,298,301],[216,258,266,274,277,280,283,284,286,298,309],[216,266,277,278,280,281,283,284,286,298,306,309],[216,266,280,282,283,284,298,306,309],[214,215,216,217,218,219,220,259,260,261,262,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315],[216,266,277,283,284],[216,266,283,284,285,309],[216,266,274,277,283,284,286,298],[216,266,283,284,287],[216,266,283,284,288],[216,265,266,283,284,289],[216,263,264,265,266,267,268,269,270,271,272,273,274,275,276,277,278,279,280,281,282,283,284,285,286,287,288,289,290,291,292,293,294,295,296,297,298,299,300,301,302,303,304,305,306,307,308,309,310,311,312,313,314,315],[216,266,283,284,291],[216,266,283,284,292],[216,266,277,283,284,293,294],[216,266,283,284,293,295,310,312],[216,266,278,283,284],[216,266,277,283,284,298,299,301],[216,266,283,284,300,301],[216,266,283,284,298,299],[216,266,283,284,301],[216,266,283,284,302],[216,263,266,283,284,298,303,309],[216,266,277,283,284,304,305],[216,266,283,284,304,305],[216,266,271,283,284,286,298,306],[216,266,283,284,307],[216,266,283,284,286,308],[216,266,280,283,284,292,309],[216,266,271,283,284,310],[216,266,283,284,298,311],[216,266,283,284,285,312],[216,266,283,284,313],[216,258,266,283,284],[216,258,266,277,279,283,284,289,298,301,309,311,312,314],[216,266,283,284,298,315],[216,266,283,284,298,315,316],[50,53,216,266,283,284],[53,216,266,283,284],[51,52,216,266,283,284],[50,53,54,55,216,266,283,284],[216,230,234,266,283,284,309],[216,230,266,283,284,298,309],[216,225,266,283,284],[216,227,230,266,283,284,306,309],[216,266,283,284,286,306],[216,266,283,284,316],[216,225,266,283,284,316],[216,227,230,266,283,284,286,309],[216,222,223,226,229,266,277,283,284,298,309],[216,230,237,266,283,284],[216,222,228,266,283,284],[216,230,251,252,266,283,284],[216,226,230,266,283,284,301,309,316],[216,251,266,283,284,316],[216,224,225,266,283,284,316],[216,230,266,283,284],[216,224,225,226,227,228,229,230,231,232,234,235,236,237,238,239,240,241,242,243,244,245,246,247,248,249,250,252,253,254,255,256,257,266,283,284],[216,230,245,266,283,284],[216,230,237,238,266,283,284],[216,228,230,238,239,266,283,284],[216,229,266,283,284],[216,222,225,230,266,283,284],[216,230,234,238,239,266,283,284],[216,234,266,283,284],[216,228,230,233,266,283,284,309],[216,222,227,230,237,266,283,284],[216,266,283,284,298],[216,225,230,251,266,283,284,314,316],[135,216,266,283,284],[126,216,266,283,284],[126,129,216,266,283,284],[61,121,124,126,127,128,129,130,131,132,133,134,216,266,283,284],[57,59,129,216,266,283,284],[126,127,216,266,283,284],[58,126,128,216,266,283,284],[59,61,63,64,65,66,216,266,283,284],[61,63,65,66,216,266,283,284],[61,63,65,216,266,283,284],[58,61,63,64,66,216,266,283,284],[57,59,60,61,62,63,64,65,66,67,68,121,122,123,124,125,216,266,283,284],[57,59,60,63,216,266,283,284],[59,60,63,216,266,283,284],[63,66,216,266,283,284],[57,58,60,61,62,64,65,66,216,266,283,284],[57,58,59,63,126,216,266,283,284],[63,64,65,66,216,266,283,284],[65,216,266,283,284],[69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,216,266,283,284],[203,216,266,283,284],[185,204,216,266,283,284],[205,216,266,283,284],[204,205,206,207,208,216,266,283,284],[185,205,216,266,283,284],[153,216,266,283,284],[142,216,266,283,284],[147,182,216,266,283,284],[137,138,216,266,283,284],[141,142,148,160,216,266,283,284],[138,141,216,266,283,284],[137,141,142,147,216,266,283,284],[138,216,266,283,284],[137,138,139,140,141,142,145,146,147,148,149,151,152,155,156,157,158,159,160,161,162,163,164,165,166,167,168,169,170,171,172,173,174,176,178,179,180,181,182,183,184,216,266,283,284],[177,216,266,283,284],[175,216,266,283,284],[145,216,266,283,284],[161,216,266,283,284],[148,216,266,283,284],[147,216,266,283,284],[56,137,138,139,140,141,144,152,154,216,266,283,284],[201,202,216,266,283,284],[137,145,216,266,283,284],[137,160,216,266,283,284],[137,141,145,148,149,160,216,266,283,284],[160,216,266,283,284],[136,216,266,283,284],[137,157,216,266,283,284],[137,216,266,283,284],[137,147,216,266,283,284],[141,148,149,216,266,283,284],[143,216,266,283,284],[139,140,141,142,143,144,149,150,151,216,266,283,284],[149,216,266,283,284],[138,140,216,266,283,284],[146,216,266,283,284],[141,145,216,266,283,284],[137,144,216,266,283,284],[186,188,216,266,283,284],[185,186,187,188,189,191,192,193,194,195,196,216,266,283,284],[186,188,190,216,266,283,284],[185,186,188,190,216,266,283,284],[186,188,190,191,216,266,283,284],[185,216,266,283,284],[186,216,266,283,284],[198,199,216,266,283,284],[185,186,197,198,216,266,283,284],[185,209,216,266,283,284]],"fileInfos":[{"version":"c430d44666289dae81f30fa7b2edebf186ecc91a2d4c71266ea6ae76388792e1","affectsGlobalScope":true,"impliedFormat":1},{"version":"45b7ab580deca34ae9729e97c13cfd999df04416a79116c3bfb483804f85ded4","impliedFormat":1},{"version":"3facaf05f0c5fc569c5649dd359892c98a85557e3e0c847964caeb67076f4d75","impliedFormat":1},{"version":"e44bb8bbac7f10ecc786703fe0a6a4b952189f908707980ba8f3c8975a760962","impliedFormat":1},{"version":"5e1c4c362065a6b95ff952c0eab010f04dcd2c3494e813b493ecfd4fcb9fc0d8","impliedFormat":1},{"version":"68d73b4a11549f9c0b7d352d10e91e5dca8faa3322bfb77b661839c42b1ddec7","impliedFormat":1},{"version":"5efce4fc3c29ea84e8928f97adec086e3dc876365e0982cc8479a07954a3efd4","impliedFormat":1},{"version":"080941d9f9ff9307f7e27a83bcd888b7c8270716c39af943532438932ec1d0b9","affectsGlobalScope":true,"impliedFormat":1},{"version":"2e80ee7a49e8ac312cc11b77f1475804bee36b3b2bc896bead8b6e1266befb43","affectsGlobalScope":true,"impliedFormat":1},{"version":"c57796738e7f83dbc4b8e65132f11a377649c00dd3eee333f672b8f0a6bea671","affectsGlobalScope":true,"impliedFormat":1},{"version":"dc2df20b1bcdc8c2d34af4926e2c3ab15ffe1160a63e58b7e09833f616efff44","affectsGlobalScope":true,"impliedFormat":1},{"version":"515d0b7b9bea2e31ea4ec968e9edd2c39d3eebf4a2d5cbd04e88639819ae3b71","affectsGlobalScope":true,"impliedFormat":1},{"version":"0559b1f683ac7505ae451f9a96ce4c3c92bdc71411651ca6ddb0e88baaaad6a3","affectsGlobalScope":true,"impliedFormat":1},{"version":"0dc1e7ceda9b8b9b455c3a2d67b0412feab00bd2f66656cd8850e8831b08b537","affectsGlobalScope":true,"impliedFormat":1},{"version":"ce691fb9e5c64efb9547083e4a34091bcbe5bdb41027e310ebba8f7d96a98671","affectsGlobalScope":true,"impliedFormat":1},{"version":"8d697a2a929a5fcb38b7a65594020fcef05ec1630804a33748829c5ff53640d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"4ff2a353abf8a80ee399af572debb8faab2d33ad38c4b4474cff7f26e7653b8d","affectsGlobalScope":true,"impliedFormat":1},{"version":"fb0f136d372979348d59b3f5020b4cdb81b5504192b1cacff5d1fbba29378aa1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d15bea3d62cbbdb9797079416b8ac375ae99162a7fba5de2c6c505446486ac0a","affectsGlobalScope":true,"impliedFormat":1},{"version":"68d18b664c9d32a7336a70235958b8997ebc1c3b8505f4f1ae2b7e7753b87618","affectsGlobalScope":true,"impliedFormat":1},{"version":"eb3d66c8327153d8fa7dd03f9c58d351107fe824c79e9b56b462935176cdf12a","affectsGlobalScope":true,"impliedFormat":1},{"version":"38f0219c9e23c915ef9790ab1d680440d95419ad264816fa15009a8851e79119","affectsGlobalScope":true,"impliedFormat":1},{"version":"69ab18c3b76cd9b1be3d188eaf8bba06112ebbe2f47f6c322b5105a6fbc45a2e","affectsGlobalScope":true,"impliedFormat":1},{"version":"a680117f487a4d2f30ea46f1b4b7f58bef1480456e18ba53ee85c2746eeca012","affectsGlobalScope":true,"impliedFormat":1},{"version":"2f11ff796926e0832f9ae148008138ad583bd181899ab7dd768a2666700b1893","affectsGlobalScope":true,"impliedFormat":1},{"version":"4de680d5bb41c17f7f68e0419412ca23c98d5749dcaaea1896172f06435891fc","affectsGlobalScope":true,"impliedFormat":1},{"version":"954296b30da6d508a104a3a0b5d96b76495c709785c1d11610908e63481ee667","affectsGlobalScope":true,"impliedFormat":1},{"version":"ac9538681b19688c8eae65811b329d3744af679e0bdfa5d842d0e32524c73e1c","affectsGlobalScope":true,"impliedFormat":1},{"version":"0a969edff4bd52585473d24995c5ef223f6652d6ef46193309b3921d65dd4376","affectsGlobalScope":true,"impliedFormat":1},{"version":"9e9fbd7030c440b33d021da145d3232984c8bb7916f277e8ffd3dc2e3eae2bdb","affectsGlobalScope":true,"impliedFormat":1},{"version":"811ec78f7fefcabbda4bfa93b3eb67d9ae166ef95f9bff989d964061cbf81a0c","affectsGlobalScope":true,"impliedFormat":1},{"version":"717937616a17072082152a2ef351cb51f98802fb4b2fdabd32399843875974ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"d7e7d9b7b50e5f22c915b525acc5a49a7a6584cf8f62d0569e557c5cfc4b2ac2","affectsGlobalScope":true,"impliedFormat":1},{"version":"71c37f4c9543f31dfced6c7840e068c5a5aacb7b89111a4364b1d5276b852557","affectsGlobalScope":true,"impliedFormat":1},{"version":"576711e016cf4f1804676043e6a0a5414252560eb57de9faceee34d79798c850","affectsGlobalScope":true,"impliedFormat":1},{"version":"89c1b1281ba7b8a96efc676b11b264de7a8374c5ea1e6617f11880a13fc56dc6","affectsGlobalScope":true,"impliedFormat":1},{"version":"74f7fa2d027d5b33eb0471c8e82a6c87216223181ec31247c357a3e8e2fddc5b","affectsGlobalScope":true,"impliedFormat":1},{"version":"d6d7ae4d1f1f3772e2a3cde568ed08991a8ae34a080ff1151af28b7f798e22ca","affectsGlobalScope":true,"impliedFormat":1},{"version":"063600664504610fe3e99b717a1223f8b1900087fab0b4cad1496a114744f8df","affectsGlobalScope":true,"impliedFormat":1},{"version":"934019d7e3c81950f9a8426d093458b65d5aff2c7c1511233c0fd5b941e608ab","affectsGlobalScope":true,"impliedFormat":1},{"version":"52ada8e0b6e0482b728070b7639ee42e83a9b1c22d205992756fe020fd9f4a47","affectsGlobalScope":true,"impliedFormat":1},{"version":"3bdefe1bfd4d6dee0e26f928f93ccc128f1b64d5d501ff4a8cf3c6371200e5e6","affectsGlobalScope":true,"impliedFormat":1},{"version":"59fb2c069260b4ba00b5643b907ef5d5341b167e7d1dbf58dfd895658bda2867","affectsGlobalScope":true,"impliedFormat":1},{"version":"639e512c0dfc3fad96a84caad71b8834d66329a1f28dc95e3946c9b58176c73a","affectsGlobalScope":true,"impliedFormat":1},{"version":"368af93f74c9c932edd84c58883e736c9e3d53cec1fe24c0b0ff451f529ceab1","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e7f8264d0fb4c5339605a15daadb037bf238c10b654bb3eee14208f860a32ea","affectsGlobalScope":true,"impliedFormat":1},{"version":"782dec38049b92d4e85c1585fbea5474a219c6984a35b004963b00beb1aab538","affectsGlobalScope":true,"impliedFormat":1},{"version":"74012d464fbc5354ca3a7d5e71bee43b17da01a853c8ff10971bbe3680c76f40","impliedFormat":99},{"version":"5e30131b6a5587fe666926ad1d9807e733c0a597ed12d682669fcaa331aea576","impliedFormat":99},{"version":"a0f82d2f9450bd147a8c137798d9501bd49b7c9e118f75b07b76709ff39b6b55","affectsGlobalScope":true,"impliedFormat":99},{"version":"00cb63103f9670f8094c238a4a7e252c8b4c06ba371fea5c44add7e41b7247e4","impliedFormat":99},{"version":"15fe687c59d62741b4494d5e623d497d55eb38966ecf5bea7f36e48fc3fbe15e","impliedFormat":1},{"version":"e09db3291e6b440f7debed2227d8357e80c95987a0d0d67ac17521d8f7b11bdb","impliedFormat":99},{"version":"9a318e3a8900672b85cd3c8c3a5acf51b88049557a3ae897ccdcf2b85a8f61f9","impliedFormat":99},{"version":"1bcd560deed90a43c51b08aa18f7f55229f2e30974ab5ed1b7bb5721be379013","impliedFormat":99},{"version":"dc08fe04e50bc24d1baded4f33e942222bbdd5d77d6341a93cfe6e4e4586a3be","impliedFormat":99},{"version":"c1a2e05eb6d7ca8d7e4a7f4c93ccf0c2857e842a64c98eaee4d85841ee9855e6","impliedFormat":1},{"version":"835fb2909ce458740fb4a49fc61709896c6864f5ce3db7f0a88f06c720d74d02","impliedFormat":1},{"version":"6e5857f38aa297a859cab4ec891408659218a5a2610cd317b6dcbef9979459cc","impliedFormat":1},{"version":"ead8e39c2e11891f286b06ae2aa71f208b1802661fcdb2425cffa4f494a68854","impliedFormat":1},{"version":"40ba6c32eb732a09e4446ade5cb6ad0c147f186f9c9dc6878b90b4418ad9f6ea","impliedFormat":1},{"version":"fdd814741843f85c98281522c58f5a646590ba9019fad2efaa95987655e0611b","impliedFormat":1},{"version":"c78aff4fb58b28b8f642d5095fc7eeb79f00e652a67caa19693af1adabb833c9","impliedFormat":1},{"version":"f80a08ced8818dc99359c0acd5b3f12762e1ce53758007759b0d4e503cbf4a5e","impliedFormat":1},{"version":"37935fa7564bcc6e0bc845b766a24391098d26f7c8245d6e8ab37bc016816e94","impliedFormat":1},{"version":"68add36d9632bc096d7245d24d6b0b8ad5f125183016102a3dad4c9c2438ccb0","impliedFormat":1},{"version":"3a819c2928ee06bbcc84e2797fd3558ae2ebb7e0ed8d87f71732fb2e2acc87b4","impliedFormat":1},{"version":"0f8a263f4c8595c8a07de52e3f3927640c44386c1aa2984de9eae50d75e613b2","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"e0bfe601a9fdf6defe94ed62dc60ac71597566001a1f86e705c95e431a9c816d","impliedFormat":1},{"version":"346fffde7c32da87c2196eb7494422449dc2ca82d3b4e6bf55be1d1a33ffc2b0","impliedFormat":1},{"version":"add0ce7b77ba5b308492fa68f77f24d1ed1d9148534bdf05ac17c30763fc1a79","impliedFormat":1},{"version":"8b5875e4958528042103fdd775e106a7f76bafc29709f0690df9a7d2241d52a7","impliedFormat":1},{"version":"2f67911e4bf4e0717dc2ded248ce2d5e4398d945ee13889a6852c1233ea41508","impliedFormat":1},{"version":"d8430c275b0f59417ea8e173cfb888a4477b430ec35b595bf734f3ec7a7d729f","impliedFormat":1},{"version":"69364df1c776372d7df1fb46a6cb3a6bf7f55e700f533a104e3f9d70a32bec18","impliedFormat":1},{"version":"6042774c61ece4ba77b3bf375f15942eb054675b7957882a00c22c0e4fe5865c","impliedFormat":1},{"version":"5a3bd57ed7a9d9afef74c75f77fce79ba3c786401af9810cdf45907c4e93f30e","impliedFormat":1},{"version":"aef26cf95593c8ace1c62c4724f9afac77bdfa756fb8a00613cd152117cb2f43","impliedFormat":1},{"version":"30db853bb2e60170ba11e39ab48bacecb32d06d4def89eedf17e58ebab762a65","impliedFormat":1},{"version":"e27451b24234dfed45f6cf22112a04955183a99c42a2691fb4936d63cfe42761","impliedFormat":1},{"version":"2316301dd223d31962d917999acf8e543e0119c5d24ec984c9f22cb23247160c","impliedFormat":1},{"version":"58d65a2803c3b6629b0e18c8bf1bc883a686fcf0333230dd0151ab6e85b74307","impliedFormat":1},{"version":"e818471014c77c103330aee11f00a7a00b37b35500b53ea6f337aefacd6174c9","impliedFormat":1},{"version":"268fd6d9f2e807a39a6c5aa654b00f949feb63d3faa7dd0f9bba7dde9172159c","impliedFormat":1},{"version":"29f823cbe0166e10e7176a94afe609a24b9e5af3858628c541ff8ce1727023cd","impliedFormat":1},"e440bfd558f1ed98f5663e68978c4ece88dea07e831dcc6ea39870a121f98b9a","681d73788d313db4eab1f8290077b892e70b2b1f3abdb1ed3661f9802a27999b","1987cc7589b4de59aea46f23c070a35f3e2c48f73b99384994c3cc207c088111","1aab37a8bbf0f0305c181146bf876dd2ae9f317d1b44c2fffde5b77c22d7a77b","237fd213a58e20827c363b4a86eb584d0341338c6ca33489b3e58037770f1acc","b463f3cb4aa04e1011b624369afff748284eda7a72680e9ba006ab2b32552c41","66cb7bccc3f8a450d6fde871af53ebfe57af5215341f52b2a81b48ccdc71ae11","6746b771110bf781a8c4dd6fef80255ada78d73fcac664221aa0b4a385105814","d9d4bb833a7f2f5948a3bd219a58b74969f3180421cc4eb6cc0c187d2b773fe8","ddcb981b5d939087baade70d13961b28d1436200427f12b36f00187b18d6d832","0e75b454f758293b5f6f4759c23a0d56730348717f372a7e7602354333f32826","2356f42ced08775d0b925ad69082a183923cd28ca167b56172ccc9b76d3a7b10","e661a131f8f3f2c323167efb1e15591a795c6d8850ce1d683becfbe2fafc09bf","b76bb55e84812dde380179e1670e4f20dc592563f5af12e904674731a2c13b0a","11e85ccf5f12a3356f2b6e5cf3db6f05e6416749f20bd7d6016f855ad22be0ff","959cd4782c3e6dbff24e24be8f9a3d76cfeb69e999c9307d509f89ea0dc20bab","5a52d41667b7c92fdab694b4798463c47a4b55e1af278c25e31a63c34139c330","49991295d23e418bc2a01ccad9bf4547e2303e0ebd2bf8e015d2fe883e12475e","fc3a2be1eb3eefafa7a2fe4d8449f22a7da2754a8a4f2a53abe45c28949f7812","259d1fc5ed365c55ba3ec4a4236d3240f4d057a0d9e1774f8588f25d12338fc0","9af4348354094535ba6e3791e816a78c3978499809f4c59c047f83a8bf4a842d","9f290708b155df1a45ea278567a62d3b2cef7f57002276bdb06f893166176f0d","5be9736412661ebbaf6c1d8607fd3909d407080529aebae482dfc78e6046ec3a","8c43bdd094699f9c634f2787a4e190e98e80c091ceae4364c1efd2a9a560e887","a19d2b338117dd9649afc43ea029d4c621049edf68b9398d2b8d997cf2085c0c","c1da17f4c815ec426197f84a9d04fe8e8b42d17c1186a0860e5f54ce76db0e0d","6bb6f750643e5e6ce257cb1c02c4f858da537ef36157514551e6a627d07504c6","ab29ae9662805ff19f6eb939da720c4a0a98d74076a4e02e3e0e5d75356629f6","d0c89afddabf6654e112a20082508e3b93ff30b6d76fc00f315fb8afad3f7625","b4ee409278e592c6ecc3cac3bf39f457b49ea833e588d9d70459124d525f01e7","a77e3a55d531e5ee8a1989d3e3897e506d967a191d164bc44060088706eaf55f","5428d320eae54104d07509907b933415bf486af14db5711b7f06262d9ce2a63f","f0c82ca58f62a8ea4fceebcb5461c8879fd62e0cc862114f82e179983db9c9f2","4d010d85ac039f1cc61f84fdcf3856d58eb28c04861473b732d4b495e4984ac0","8f8e9e970d0f47d762cd1c1e0b12d7f100bc52b76ffa411252036b2d6ef61600","065eddf62ace417dd123053aac4513acd717fac25969f06c0f1a677e18cd5d36","afa5d567c3c0532beb6002ebcdf25a84be7bf0d619f866e5504210d10ed4258d","5e993aef2ca3d70921bd02b96e543a4288fc87ebea77fa642509fd14b8cf1ead","56aa396b18f69b3b4c19903e643f91695d2b6c06e6361183274630745d676058","0ec7aa3882d394903a37ecc39482207ef86a7c232f1d0c508c9fd5f6a6b8a27d","dc49645dd9d131c5258809ea847b5520a48ca134ecdecc50bc305f3b5481e0c0","b16ede8d9a84ec1f75a47ab5bf4a21b2fad274657eb45575276ff6a5409717c0","09a2f722ef529b70620263e0340e91d6788bb9786a65fbf12d1f25b4b4ae62ac","7077e44386a54aa6048564ee9a3af2ce7652a208c80930212ba18119b65dfb7f","9ed05e5ec0a2553f76708d501d02d4b125dc2e43655321987074990199f3f926","4afbc739a300e955995c4fbdd6b5ad055b739e81625fabcc917894ccf4c4ea00","dc989c1edd3ceb3e226d3b815d2146e0c6a8ccf81bb874d81449f7cd0636996a","cadaa5ff77e63de11a92ce8f3fccf5d1844297c37ba930e08e43ce1b21d5a7e4","9b74e19b30bb0710fcf35a0e91c911649093a728a267307d5cc5e2a64fb72867",{"version":"6e28fecf5b995a5c4840895742e421f951c0d4c2d71cc18a65543b97ed53e52c","signature":"414d6a089065abeb3de6fbbe99e3b45b57b9b2e923f39a6278f0f10f8a08882a"},{"version":"a192743c46d023c4d63b63d3f6c0cd565ca85725f8b8b3fd707334623ebcea7f","signature":"9baf915932e23257b53b53b3efffb2e53deb2822926d98721d53ba01023efaf0"},{"version":"1693dc63ee48cbf41c8217eaa3b2de29fc8e239f9bc6b34cbd570d6152d1d4be","signature":"87287bde46402a4f22b7e4c1f542a2d4a3cd8078aeca8fa31540d7d9cab9ccd9"},{"version":"a9448c2ed1a9b4a5784e19ba6ed2ae7499de4b590fb3fa9ada1e3fc6a6ebf118","signature":"89b830c8272f8d532224c4b7f21ac814430c52c807a11579a9eae955e55c238e"},{"version":"ea7e68a8a846d6f507abc62b828e1c4bd739a80f2897c422c538a5086738c8e2","signature":"8c48547b1189d0cc7c76a5af8796c6e2332f141df9100649565055ecf8b13acd"},{"version":"6ee07695e6e3728b18cd254fe21d3f859591ddbb1232388adfec48a5a6b16b3d","signature":"8bbd415a8839883d4ad573e1f0532d7a69667e201170fdb63ba894f3288cc036"},{"version":"01b9dcc286bb2fe995fd209b7931a411ed75c2d99221a8d9787309a6fdda7d03","signature":"7b652c0b950df3a2f18021bcebf5e9f3c471e97f443d4b4dcac6d41b5d0aca8c"},{"version":"87e8ccda8e31df9e5f23b332680f74e46a9c51c534605ac8e78a8bfcbf4dc506","signature":"995053f5c03374a6f70d45e647d7a30857f38ce68dcaabe1964601ee63fef882"},{"version":"5c6cf43d1bb67234a04804842c2def067389de6798c5feb8b5785adfc81dbbe4","signature":"435d5ed8b67840fafd0bdc3b2b2fe7fb62afcd6d72f1df418c1d07f10dee2d02"},{"version":"1776d8567875deb799c33087334fac9affecbb20ec08c394e342d5996cab5634","signature":"b88c8a787417af64950fde33808f324cd00e9f8f383f89d89e3286d8047ac2ca"},{"version":"7a657fe2a030f4947eeaaa2ce536325baf5c7f7fb1a3b5de398373af46f8cb6c","signature":"3b652ab5d1f2d846a89a2fc4d7c9366c823992cee2c01a5dfe4f2ef03bb1faac"},{"version":"b5f6a5fa01e2fb8078fbf8edea5757c934b5470bd20347ce5c0f062f629a648c","signature":"dbc615bc05aef3967c1e0fd7c0fb2611549c3213e0930a911d6158e12a034cbb"},{"version":"96e5125bfb2a47ec09688093367463827af98754a3ff5d9a5e72e1d4ad30ddf4","signature":"a4f8d0d5c950ff54b169a260b1493df4165db74ec17fd26e9783d469949bf74d"},{"version":"2d446c16c3e850b932de97c37307b4abf80157182dffe7ec3fe017c500268258","signature":"ed5f0a698672bda864fb809b22d023c29e306660c6b5342d48a8c81b1608f3e7"},{"version":"9f743ee07a3545e736475b231d4054ab71dbc00b77a449f297eb505479fdb03f","signature":"b91777174f268f407dbf3151e460a1fa5e4cf22d4871a72c2338d1c3d9bc0bbe"},"7e95718f2a08286917ed2fc8b4bcdaee4674e17c7cd6fe862dbeaa360fc7e03b","98f5dfde177549c68f2cc9c267bbba0922933d2a21966f9c3fe36e7ef7bb88d2","fb277c73f13379605e290a5267543a28669f71b1b35cc17625e58567cdd5c580","2b2833b2c89ff5558e0913c14834912e2adf9c23d533bc4756312a641bb6e57f","b71455a494a011531749429399c3ccc746f8b4170b9eacec4043f90e717dba5e","98f729248326fbe5124bbf4ec16d08e4b054b1a14b48ce1fed43c0be6a13f280","dd1e06f5df98f65b3007f85667399d4cbe29dd523c35da5cccfdf8902fc3007c","1bb6d1118a6aea79ff9928b92e9410bac9fa2052367e30b95480c761dbe3b612","fef4e790e1c1be9ae3fdd9ca0165a2430c7e21b7304565a78d6c25002b5f098f",{"version":"9d3eaf38501781a18f84f41c87f9fe5707f17a18c45b72ea73f3bc4d02db5592","signature":"aaf006643e86beb1fa87ba4a88ed800dfd3ca29cdb51caf73d42897c960b8547"},{"version":"6c7176368037af28cb72f2392010fa1cef295d6d6744bca8cfb54985f3a18c3e","affectsGlobalScope":true,"impliedFormat":1},{"version":"ab41ef1f2cdafb8df48be20cd969d875602483859dc194e9c97c8a576892c052","affectsGlobalScope":true,"impliedFormat":1},{"version":"437e20f2ba32abaeb7985e0afe0002de1917bc74e949ba585e49feba65da6ca1","affectsGlobalScope":true,"impliedFormat":1},{"version":"21d819c173c0cf7cc3ce57c3276e77fd9a8a01d35a06ad87158781515c9a438a","impliedFormat":1},{"version":"98cffbf06d6bab333473c70a893770dbe990783904002c4f1a960447b4b53dca","affectsGlobalScope":true,"impliedFormat":1},{"version":"3af97acf03cc97de58a3a4bc91f8f616408099bc4233f6d0852e72a8ffb91ac9","affectsGlobalScope":true,"impliedFormat":1},{"version":"808069bba06b6768b62fd22429b53362e7af342da4a236ed2d2e1c89fcca3b4a","affectsGlobalScope":true,"impliedFormat":1},{"version":"1db0b7dca579049ca4193d034d835f6bfe73096c73663e5ef9a0b5779939f3d0","affectsGlobalScope":true,"impliedFormat":1},{"version":"9798340ffb0d067d69b1ae5b32faa17ab31b82466a3fc00d8f2f2df0c8554aaa","affectsGlobalScope":true,"impliedFormat":1},{"version":"f26b11d8d8e4b8028f1c7d618b22274c892e4b0ef5b3678a8ccbad85419aef43","affectsGlobalScope":true,"impliedFormat":1},{"version":"4967529644e391115ca5592184d4b63980569adf60ee685f968fd59ab1557188","impliedFormat":1},{"version":"5929864ce17fba74232584d90cb721a89b7ad277220627cc97054ba15a98ea8f","impliedFormat":1},{"version":"763fe0f42b3d79b440a9b6e51e9ba3f3f91352469c1e4b3b67bfa4ff6352f3f4","impliedFormat":1},{"version":"25c8056edf4314820382a5fdb4bb7816999acdcb929c8f75e3f39473b87e85bc","impliedFormat":1},{"version":"c464d66b20788266e5353b48dc4aa6bc0dc4a707276df1e7152ab0c9ae21fad8","impliedFormat":1},{"version":"78d0d27c130d35c60b5e5566c9f1e5be77caf39804636bc1a40133919a949f21","impliedFormat":1},{"version":"c6fd2c5a395f2432786c9cb8deb870b9b0e8ff7e22c029954fabdd692bff6195","impliedFormat":1},{"version":"1d6e127068ea8e104a912e42fc0a110e2aa5a66a356a917a163e8cf9a65e4a75","impliedFormat":1},{"version":"5ded6427296cdf3b9542de4471d2aa8d3983671d4cac0f4bf9c637208d1ced43","impliedFormat":1},{"version":"7f182617db458e98fc18dfb272d40aa2fff3a353c44a89b2c0ccb3937709bfb5","impliedFormat":1},{"version":"cadc8aced301244057c4e7e73fbcae534b0f5b12a37b150d80e5a45aa4bebcbd","impliedFormat":1},{"version":"385aab901643aa54e1c36f5ef3107913b10d1b5bb8cbcd933d4263b80a0d7f20","impliedFormat":1},{"version":"9670d44354bab9d9982eca21945686b5c24a3f893db73c0dae0fd74217a4c219","impliedFormat":1},{"version":"0b8a9268adaf4da35e7fa830c8981cfa22adbbe5b3f6f5ab91f6658899e657a7","impliedFormat":1},{"version":"11396ed8a44c02ab9798b7dca436009f866e8dae3c9c25e8c1fbc396880bf1bb","impliedFormat":1},{"version":"ba7bc87d01492633cb5a0e5da8a4a42a1c86270e7b3d2dea5d156828a84e4882","impliedFormat":1},{"version":"4893a895ea92c85345017a04ed427cbd6a1710453338df26881a6019432febdd","impliedFormat":1},{"version":"c21dc52e277bcfc75fac0436ccb75c204f9e1b3fa5e12729670910639f27343e","impliedFormat":1},{"version":"13f6f39e12b1518c6650bbb220c8985999020fe0f21d818e28f512b7771d00f9","impliedFormat":1},{"version":"9b5369969f6e7175740bf51223112ff209f94ba43ecd3bb09eefff9fd675624a","impliedFormat":1},{"version":"4fe9e626e7164748e8769bbf74b538e09607f07ed17c2f20af8d680ee49fc1da","impliedFormat":1},{"version":"24515859bc0b836719105bb6cc3d68255042a9f02a6022b3187948b204946bd2","impliedFormat":1},{"version":"ea0148f897b45a76544ae179784c95af1bd6721b8610af9ffa467a518a086a43","impliedFormat":1},{"version":"24c6a117721e606c9984335f71711877293a9651e44f59f3d21c1ea0856f9cc9","impliedFormat":1},{"version":"dd3273ead9fbde62a72949c97dbec2247ea08e0c6952e701a483d74ef92d6a17","impliedFormat":1},{"version":"405822be75ad3e4d162e07439bac80c6bcc6dbae1929e179cf467ec0b9ee4e2e","impliedFormat":1},{"version":"0db18c6e78ea846316c012478888f33c11ffadab9efd1cc8bcc12daded7a60b6","impliedFormat":1},{"version":"e61be3f894b41b7baa1fbd6a66893f2579bfad01d208b4ff61daef21493ef0a8","impliedFormat":1},{"version":"bd0532fd6556073727d28da0edfd1736417a3f9f394877b6d5ef6ad88fba1d1a","impliedFormat":1},{"version":"89167d696a849fce5ca508032aabfe901c0868f833a8625d5a9c6e861ef935d2","impliedFormat":1},{"version":"615ba88d0128ed16bf83ef8ccbb6aff05c3ee2db1cc0f89ab50a4939bfc1943f","impliedFormat":1},{"version":"a4d551dbf8746780194d550c88f26cf937caf8d56f102969a110cfaed4b06656","impliedFormat":1},{"version":"8bd86b8e8f6a6aa6c49b71e14c4ffe1211a0e97c80f08d2c8cc98838006e4b88","impliedFormat":1},{"version":"317e63deeb21ac07f3992f5b50cdca8338f10acd4fbb7257ebf56735bf52ab00","impliedFormat":1},{"version":"4732aec92b20fb28c5fe9ad99521fb59974289ed1e45aecb282616202184064f","impliedFormat":1},{"version":"2e85db9e6fd73cfa3d7f28e0ab6b55417ea18931423bd47b409a96e4a169e8e6","impliedFormat":1},{"version":"c46e079fe54c76f95c67fb89081b3e399da2c7d109e7dca8e4b58d83e332e605","impliedFormat":1},{"version":"bf67d53d168abc1298888693338cb82854bdb2e69ef83f8a0092093c2d562107","impliedFormat":1},{"version":"b52476feb4a0cbcb25e5931b930fc73cb6643fb1a5060bf8a3dda0eeae5b4b68","affectsGlobalScope":true,"impliedFormat":1},{"version":"f9501cc13ce624c72b61f12b3963e84fad210fbdf0ffbc4590e08460a3f04eba","affectsGlobalScope":true,"impliedFormat":1},{"version":"e7721c4f69f93c91360c26a0a84ee885997d748237ef78ef665b153e622b36c1","affectsGlobalScope":true,"impliedFormat":1},{"version":"d97fb21da858fb18b8ae72c314e9743fd52f73ebe2764e12af1db32fc03f853f","affectsGlobalScope":true,"impliedFormat":1},{"version":"0fa06ada475b910e2106c98c68b10483dc8811d0c14a8a8dd36efb2672485b29","impliedFormat":1},{"version":"33e5e9aba62c3193d10d1d33ae1fa75c46a1171cf76fef750777377d53b0303f","impliedFormat":1},{"version":"2b06b93fd01bcd49d1a6bd1f9b65ddcae6480b9a86e9061634d6f8e354c1468f","impliedFormat":1},{"version":"6a0cd27e5dc2cfbe039e731cf879d12b0e2dded06d1b1dedad07f7712de0d7f4","affectsGlobalScope":true,"impliedFormat":1},{"version":"13f5c844119c43e51ce777c509267f14d6aaf31eafb2c2b002ca35584cd13b29","impliedFormat":1},{"version":"e60477649d6ad21542bd2dc7e3d9ff6853d0797ba9f689ba2f6653818999c264","impliedFormat":1},{"version":"c2510f124c0293ab80b1777c44d80f812b75612f297b9857406468c0f4dafe29","affectsGlobalScope":true,"impliedFormat":1},{"version":"5524481e56c48ff486f42926778c0a3cce1cc85dc46683b92b1271865bcf015a","impliedFormat":1},{"version":"4c829ab315f57c5442c6667b53769975acbf92003a66aef19bce151987675bd1","affectsGlobalScope":true,"impliedFormat":1},{"version":"b2ade7657e2db96d18315694789eff2ddd3d8aea7215b181f8a0b303277cc579","impliedFormat":1},{"version":"78dbea00e90d2df8ea3dbef0cc379d95b8be9b71cd6bde4c28728f306811803b","impliedFormat":1},{"version":"4d631b81fa2f07a0e63a9a143d6a82c25c5f051298651a9b69176ba28930756d","impliedFormat":1},{"version":"836a356aae992ff3c28a0212e3eabcb76dd4b0cc06bcb9607aeef560661b860d","impliedFormat":1},{"version":"1e0d1f8b0adfa0b0330e028c7941b5a98c08b600efe7f14d2d2a00854fb2f393","impliedFormat":1},{"version":"41670ee38943d9cbb4924e436f56fc19ee94232bc96108562de1a734af20dc2c","affectsGlobalScope":true,"impliedFormat":1},{"version":"8e1e46d0a9837ee058c100501080c920fa98081ea3956af0374308ba6f22a33e","impliedFormat":1},{"version":"272ca407e0c9068bdc5152552d876e68037ceae3de62e529306403e973dec8e1","impliedFormat":1},{"version":"fa7834c715d5357e4540cee40ce96c3250ddb67a7b879a6b7fa0e86d6696f121","impliedFormat":1},{"version":"22dfb07a7ab15b66ac043829056fe70124844636ae719551812ac631ba04985b","impliedFormat":1},{"version":"a10f0e1854f3316d7ee437b79649e5a6ae3ae14ffe6322b02d4987071a95362e","impliedFormat":1},{"version":"e208f73ef6a980104304b0d2ca5f6bf1b85de6009d2c7e404028b875020fa8f2","impliedFormat":1},{"version":"d163b6bc2372b4f07260747cbc6c0a6405ab3fbcea3852305e98ac43ca59f5bc","impliedFormat":1},{"version":"e6fa9ad47c5f71ff733744a029d1dc472c618de53804eae08ffc243b936f87ff","affectsGlobalScope":true,"impliedFormat":1},{"version":"a6f137d651076822d4fe884287e68fd61785a0d3d1fdb250a5059b691fa897db","impliedFormat":1},{"version":"24826ed94a78d5c64bd857570fdbd96229ad41b5cb654c08d75a9845e3ab7dde","impliedFormat":1},{"version":"8b479a130ccb62e98f11f136d3ac80f2984fdc07616516d29881f3061f2dd472","impliedFormat":1},{"version":"928af3d90454bf656a52a48679f199f64c1435247d6189d1caf4c68f2eaf921f","affectsGlobalScope":true,"impliedFormat":1},{"version":"bceb58df66ab8fb00170df20cd813978c5ab84be1d285710c4eb005d8e9d8efb","affectsGlobalScope":true,"impliedFormat":1},{"version":"3f16a7e4deafa527ed9995a772bb380eb7d3c2c0fd4ae178c5263ed18394db2c","impliedFormat":1},{"version":"933921f0bb0ec12ef45d1062a1fc0f27635318f4d294e4d99de9a5493e618ca2","impliedFormat":1},{"version":"71a0f3ad612c123b57239a7749770017ecfe6b66411488000aba83e4546fde25","impliedFormat":1},{"version":"77fbe5eecb6fac4b6242bbf6eebfc43e98ce5ccba8fa44e0ef6a95c945ff4d98","impliedFormat":1},{"version":"4f9d8ca0c417b67b69eeb54c7ca1bedd7b56034bb9bfd27c5d4f3bc4692daca7","impliedFormat":1},{"version":"0cb167c371eaa8c869f8a7656a7296f2e4fae43b4d8b803a680236b24794e5f9","impliedFormat":1},{"version":"0a839dba0287cc0481ad4beedd48a1c64acf1e212ae865d1315f7007ca215161","impliedFormat":1},{"version":"38dc4655376cd1a4bd6bb3763d92949233e33d38d3dd3cbea7bbf218175a38ef","impliedFormat":1},{"version":"37ba7b45141a45ce6e80e66f2a96c8a5ab1bcef0fc2d0f56bb58df96ec67e972","impliedFormat":1},{"version":"45650f47bfb376c8a8ed39d4bcda5902ab899a3150029684ee4c10676d9fbaee","impliedFormat":1},{"version":"d61e0a64cd175208ac0b83670151a9a6b5916f0d1ffcdc5c29c90b1cebfc5045","affectsGlobalScope":true,"impliedFormat":1},{"version":"18fd40412d102c5564136f29735e5d1c3b455b8a37f920da79561f1fde068208","impliedFormat":1},{"version":"48a679952eefe4cb776d5a0e1ccba2d3eb53b57448bbb7abc1fcebcbd5440188","impliedFormat":1},{"version":"f0be1b8078cd549d91f37c30c222c2a187ac1cf981d994fb476a1adc61387b14","affectsGlobalScope":true,"impliedFormat":1},{"version":"0aaed1d72199b01234152f7a60046bc947f1f37d78d182e9ae09c4289e06a592","impliedFormat":1},{"version":"2d14da6ecb49bf828d83948765ec2d3a579d476bbb9645e749610baa6ec880ca","impliedFormat":1},{"version":"66ba1b2c3e3a3644a1011cd530fb444a96b1b2dfe2f5e837a002d41a1a799e60","impliedFormat":1},{"version":"7e514f5b852fdbc166b539fdd1f4e9114f29911592a5eb10a94bb3a13ccac3c4","impliedFormat":1},{"version":"5b7aa3c4c1a5d81b411e8cb302b45507fea9358d3569196b27eb1a27ae3a90ef","affectsGlobalScope":true,"impliedFormat":1},{"version":"5987a903da92c7462e0b35704ce7da94d7fdc4b89a984871c0e2b87a8aae9e69","affectsGlobalScope":true,"impliedFormat":1},{"version":"ea08a0345023ade2b47fbff5a76d0d0ed8bff10bc9d22b83f40858a8e941501c","impliedFormat":1},{"version":"0aef708fb4c7a6b915e8305cbfac40cd207b032dbaabe9a01889a5fff3254681","impliedFormat":1},{"version":"ae062ce7d9510060c5d7e7952ae379224fb3f8f2dd74e88959878af2057c143b","impliedFormat":1},{"version":"ad9bdafb4e7abf14cc53ce7970486a84c87831e62891e5dfe798ddcd55e84701","affectsGlobalScope":true,"impliedFormat":1},{"version":"358765d5ea8afd285d4fd1532e78b88273f18cb3f87403a9b16fef61ac9fdcfe","impliedFormat":1},{"version":"71d3ae6a5e73ca4130762560425e00984ebaff64d5353a3333d1bb7eb86ef336","impliedFormat":1},{"version":"90ac19cb97ae85c7ccfd0c04322b02ce088bda9de7b42cc081cbb3674fe5446d","impliedFormat":1}],"root":[[186,200],210],"options":{"composite":true,"declaration":true,"declarationMap":true,"emitDeclarationOnly":true,"module":99,"outDir":"./","rootDir":"../src","skipLibCheck":true,"strict":true,"target":7,"tsBuildInfoFile":"./.tsbuildinfo","verbatimModuleSyntax":true},"referencedMap":[[48,1],[49,1],[50,2],[263,3],[264,3],[265,4],[216,5],[266,6],[267,7],[268,8],[211,1],[214,9],[212,1],[213,1],[269,10],[270,11],[271,12],[272,13],[273,14],[274,15],[275,15],[276,16],[277,17],[278,18],[279,19],[217,1],[215,1],[280,20],[281,21],[282,22],[316,23],[283,24],[284,1],[285,25],[286,26],[287,27],[288,28],[289,29],[290,30],[291,31],[292,32],[293,33],[294,33],[295,34],[296,1],[297,35],[298,36],[300,37],[299,38],[301,39],[302,40],[303,41],[304,42],[305,43],[306,44],[307,45],[308,46],[309,47],[310,48],[311,49],[312,50],[313,51],[218,1],[219,1],[220,1],[259,52],[260,1],[261,1],[262,39],[314,53],[315,54],[317,55],[52,1],[221,1],[54,56],[51,57],[55,1],[53,58],[56,59],[46,1],[47,1],[8,1],[9,1],[11,1],[10,1],[2,1],[12,1],[13,1],[14,1],[15,1],[16,1],[17,1],[18,1],[19,1],[3,1],[20,1],[21,1],[4,1],[22,1],[26,1],[23,1],[24,1],[25,1],[27,1],[28,1],[29,1],[5,1],[30,1],[31,1],[32,1],[33,1],[6,1],[37,1],[34,1],[35,1],[36,1],[38,1],[7,1],[39,1],[44,1],[45,1],[40,1],[41,1],[42,1],[43,1],[1,1],[237,60],[247,61],[236,60],[257,62],[228,63],[227,64],[256,65],[250,66],[255,67],[230,68],[244,69],[229,70],[253,71],[225,72],[224,65],[254,73],[226,74],[231,75],[232,1],[235,75],[222,1],[258,76],[248,77],[239,78],[240,79],[242,80],[238,81],[241,82],[251,65],[233,83],[234,84],[243,85],[223,86],[246,77],[245,75],[249,1],[252,87],[136,88],[130,89],[134,90],[131,90],[127,89],[135,91],[132,92],[133,90],[128,93],[129,94],[123,95],[64,96],[66,97],[122,1],[65,98],[126,99],[125,100],[124,101],[57,1],[67,96],[68,1],[59,102],[63,103],[58,1],[60,104],[61,105],[62,1],[69,106],[70,106],[71,106],[72,106],[73,106],[74,106],[75,106],[76,106],[77,106],[78,106],[79,106],[80,106],[81,106],[82,106],[84,106],[83,106],[85,106],[86,106],[87,106],[88,106],[89,106],[121,107],[90,106],[91,106],[92,106],[93,106],[94,106],[95,106],[96,106],[97,106],[98,106],[99,106],[100,106],[101,106],[102,106],[104,106],[103,106],[105,106],[106,106],[107,106],[108,106],[109,106],[110,106],[111,106],[112,106],[113,106],[114,106],[115,106],[116,106],[117,106],[120,106],[118,106],[119,106],[204,108],[205,109],[207,1],[208,110],[209,111],[206,112],[179,1],[154,113],[153,114],[183,115],[182,116],[161,117],[139,1],[142,118],[148,119],[141,1],[138,1],[140,1],[173,120],[174,1],[184,1],[185,121],[177,1],[178,122],[175,1],[176,123],[146,124],[162,125],[202,1],[159,126],[163,127],[155,128],[203,129],[160,130],[156,1],[165,131],[157,1],[170,132],[164,133],[137,134],[158,135],[201,136],[169,137],[144,114],[150,138],[149,139],[152,140],[168,141],[143,142],[147,143],[145,136],[171,130],[151,124],[166,124],[167,144],[181,1],[180,1],[172,145],[189,146],[197,147],[191,148],[192,149],[193,148],[194,150],[195,149],[188,151],[196,149],[190,152],[200,153],[187,151],[186,1],[198,152],[199,154],[210,155]],"latestChangedDtsFile":"./test-fixtures/wte-scene.d.ts","version":"5.9.3"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { type Prng } from '../prng';
|
|
2
|
+
import type { TagGenerator } from './types';
|
|
3
|
+
export interface BlinkBindingLike {
|
|
4
|
+
tag: string;
|
|
5
|
+
min?: number;
|
|
6
|
+
max?: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `blink`: occasional toggles (Task 1) between an "off" rate (`min`,
|
|
10
|
+
* default 0 — no registered blink animation runs at rate 0) and an "on"
|
|
11
|
+
* rate (`max`, default 1 — a plain playback rate since core's own
|
|
12
|
+
* blink-rate ceiling lives in `@vscada/primitives`, which this AD-10-bound
|
|
13
|
+
* package cannot import), mostly dwelling off.
|
|
14
|
+
*/
|
|
15
|
+
export declare class BlinkGenerator implements TagGenerator {
|
|
16
|
+
private readonly prng;
|
|
17
|
+
readonly tag: string;
|
|
18
|
+
private readonly offValue;
|
|
19
|
+
private readonly onValue;
|
|
20
|
+
private on;
|
|
21
|
+
private dwellRemainingMs;
|
|
22
|
+
constructor(prng: Prng, binding: BlinkBindingLike);
|
|
23
|
+
step(dtMs: number): number;
|
|
24
|
+
private toggle;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=blink-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"blink-generator.d.ts","sourceRoot":"","sources":["../../src/generators/blink-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAE5C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAKD;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,YAAY;IAQ/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;IACjC,OAAO,CAAC,EAAE,CAAS;IACnB,OAAO,CAAC,gBAAgB,CAAS;gBAGd,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,gBAAgB;IAQ3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAM1B,OAAO,CAAC,MAAM;CAKf"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Scene } from '@vscada/core';
|
|
2
|
+
import type { Prng } from '../prng';
|
|
3
|
+
import type { TagGenerator } from './types';
|
|
4
|
+
/**
|
|
5
|
+
* Story 5.2 Task 1 — the inference step: walks the tag inventory and
|
|
6
|
+
* builds one stateful generator per tag, dispatched purely by the tag's
|
|
7
|
+
* OWN declared binding type (Dev Notes: "the scene tells us what a tag
|
|
8
|
+
* means"). Two passes: `state` generators build first (pass 1) so
|
|
9
|
+
* `rotate`/`flow`/`emission` (pass 2) can wire a live follow-signal to an
|
|
10
|
+
* already-constructed sibling/upstream state generator within the same
|
|
11
|
+
* call — never a second scene walk.
|
|
12
|
+
*/
|
|
13
|
+
export declare function buildGenerators(scene: Scene, prng: Prng): Map<string, TagGenerator>;
|
|
14
|
+
//# sourceMappingURL=build-generators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-generators.d.ts","sourceRoot":"","sources":["../../src/generators/build-generators.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,KAAK,EAAsC,MAAM,cAAc,CAAC;AAClG,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AAQpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAkD5C;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,GAAG,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAkEnF"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { Prng } from '../prng';
|
|
2
|
+
import type { TagGenerator } from './types';
|
|
3
|
+
export interface RangeBindingLike {
|
|
4
|
+
tag: string;
|
|
5
|
+
min: number;
|
|
6
|
+
max: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `readout`/`needle`/`color-ramp`: a plain bounded random walk around its
|
|
10
|
+
* range's midpoint (Task 1's "drifting process values in range"). No
|
|
11
|
+
* regime switching (unlike `level`) — these binding types have no
|
|
12
|
+
* declared alarm thresholds to excurse toward, just a process value that
|
|
13
|
+
* wanders continuously within its declared range. Also the fallback for
|
|
14
|
+
* `rotate`/`flow`/`emission` when no linked state tag is found
|
|
15
|
+
* (`ramp-generator.ts`).
|
|
16
|
+
*/
|
|
17
|
+
export declare class DriftGenerator implements TagGenerator {
|
|
18
|
+
private readonly prng;
|
|
19
|
+
readonly tag: string;
|
|
20
|
+
private readonly min;
|
|
21
|
+
private readonly max;
|
|
22
|
+
private readonly center;
|
|
23
|
+
private value;
|
|
24
|
+
constructor(prng: Prng, binding: RangeBindingLike);
|
|
25
|
+
step(dtMs: number): number;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=drift-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drift-generator.d.ts","sourceRoot":"","sources":["../../src/generators/drift-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAKD;;;;;;;;GAQG;AACH,qBAAa,cAAe,YAAW,YAAY;IAQ/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAChC,OAAO,CAAC,KAAK,CAAS;gBAGH,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,gBAAgB;IAS3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CAI3B"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Threshold } from '@vscada/core';
|
|
2
|
+
import { type Prng } from '../prng';
|
|
3
|
+
import type { TagGenerator } from './types';
|
|
4
|
+
export interface LevelBindingLike {
|
|
5
|
+
tag: string;
|
|
6
|
+
min: number;
|
|
7
|
+
max: number;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* `level`: bounded random walk biased inside its declared thresholds, with
|
|
11
|
+
* occasional deliberate excursions into an alarm band (Task 1) — a tank
|
|
12
|
+
* that mostly sits mid-range but periodically drifts low or high enough to
|
|
13
|
+
* demo the alarm/quality visuals, then returns to normal. A binding with
|
|
14
|
+
* no declared thresholds degrades to a plain bounded drift around the
|
|
15
|
+
* range's midpoint (no side to excurse toward).
|
|
16
|
+
*/
|
|
17
|
+
export declare class LevelGenerator implements TagGenerator {
|
|
18
|
+
private readonly prng;
|
|
19
|
+
readonly tag: string;
|
|
20
|
+
private readonly min;
|
|
21
|
+
private readonly max;
|
|
22
|
+
private readonly targets;
|
|
23
|
+
private value;
|
|
24
|
+
private regime;
|
|
25
|
+
private regimeRemainingMs;
|
|
26
|
+
constructor(prng: Prng, binding: LevelBindingLike, thresholds: readonly Threshold[]);
|
|
27
|
+
step(dtMs: number): number;
|
|
28
|
+
private currentTarget;
|
|
29
|
+
private rerollRegime;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=level-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"level-generator.d.ts","sourceRoot":"","sources":["../../src/generators/level-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAA2B,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AA2CD;;;;;;;GAOG;AACH,qBAAa,cAAe,YAAW,YAAY;IAU/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgB;IACxC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,iBAAiB,CAAS;gBAGf,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,gBAAgB,EACzB,UAAU,EAAE,SAAS,SAAS,EAAE;IAUlC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe1B,OAAO,CAAC,aAAa;IAMrB,OAAO,CAAC,YAAY;CAQrB"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { type Prng } from '../prng';
|
|
2
|
+
import type { TagGenerator } from './types';
|
|
3
|
+
export interface RangeBindingLike {
|
|
4
|
+
tag: string;
|
|
5
|
+
min: number;
|
|
6
|
+
max: number;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `position`: commanded strokes to random setpoints at valve-speed (Task
|
|
10
|
+
* 1) — periodically picks a new target (mostly the two extremes, sometimes
|
|
11
|
+
* mid-range) and rate-limits the approach to it, so the value never jumps,
|
|
12
|
+
* only strokes continuously toward its commanded setpoint.
|
|
13
|
+
*/
|
|
14
|
+
export declare class PositionGenerator implements TagGenerator {
|
|
15
|
+
private readonly prng;
|
|
16
|
+
readonly tag: string;
|
|
17
|
+
private readonly min;
|
|
18
|
+
private readonly max;
|
|
19
|
+
private value;
|
|
20
|
+
private target;
|
|
21
|
+
private rampRatePerMs;
|
|
22
|
+
private dwellRemainingMs;
|
|
23
|
+
constructor(prng: Prng, binding: RangeBindingLike);
|
|
24
|
+
step(dtMs: number): number;
|
|
25
|
+
private rerollTarget;
|
|
26
|
+
private rollRampRate;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=position-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"position-generator.d.ts","sourceRoot":"","sources":["../../src/generators/position-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;CACb;AAQD;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,YAAY;IAUlD,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAAS;gBAGd,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,gBAAgB;IAW3B,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAO1B,OAAO,CAAC,YAAY;IAMpB,OAAO,CAAC,YAAY;CAGrB"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { type Prng } from '../prng';
|
|
2
|
+
import { type RangeBindingLike } from './drift-generator';
|
|
3
|
+
import type { TagGenerator } from './types';
|
|
4
|
+
/** Reads a linked element's current logical activity — almost always `() => someStateGenerator.isActive`, wired up in `build-generators.ts`. */
|
|
5
|
+
export type ActivitySignal = () => boolean;
|
|
6
|
+
/**
|
|
7
|
+
* `rotate`/`flow`/`emission`: follows a linked `state` tag when topology
|
|
8
|
+
* (or same-element sibling bindings) connects them — Task 1's "a stopped
|
|
9
|
+
* pump's flow tags decay". Ramps (never jumps) toward a randomized
|
|
10
|
+
* upper-range target while the linked equipment is active, and decays
|
|
11
|
+
* toward `min` while it's not. With no linked state tag at all (an
|
|
12
|
+
* unconnected instrument, or a scene that doesn't declare topology), falls
|
|
13
|
+
* back to `DriftGenerator`'s independent bounded wander — still bounded
|
|
14
|
+
* and continuous, just not state-driven.
|
|
15
|
+
*/
|
|
16
|
+
export declare class RampGenerator implements TagGenerator {
|
|
17
|
+
private readonly prng;
|
|
18
|
+
readonly tag: string;
|
|
19
|
+
private readonly min;
|
|
20
|
+
private readonly max;
|
|
21
|
+
private readonly isUpstreamActive;
|
|
22
|
+
private readonly fallbackDrift;
|
|
23
|
+
private readonly rampRatePerMs;
|
|
24
|
+
private value;
|
|
25
|
+
private activeTarget;
|
|
26
|
+
private targetRerollRemainingMs;
|
|
27
|
+
constructor(prng: Prng, binding: RangeBindingLike, isUpstreamActive?: ActivitySignal);
|
|
28
|
+
step(dtMs: number): number;
|
|
29
|
+
private rollActiveTarget;
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=ramp-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ramp-generator.d.ts","sourceRoot":"","sources":["../../src/generators/ramp-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AACtD,OAAO,EAAkB,KAAK,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAC1E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,gJAAgJ;AAChJ,MAAM,MAAM,cAAc,GAAG,MAAM,OAAO,CAAC;AAO3C;;;;;;;;;GASG;AACH,qBAAa,aAAc,YAAW,YAAY;IAY9C,OAAO,CAAC,QAAQ,CAAC,IAAI;IAXvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAS;IAC7B,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA6B;IAC9D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA6B;IAC3D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAS;IACvC,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,uBAAuB,CAAS;gBAGrB,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,gBAAgB,EACzB,gBAAgB,CAAC,EAAE,cAAc;IAanC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAe1B,OAAO,CAAC,gBAAgB;CAIzB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { TagValue } from '@vscada/core';
|
|
2
|
+
import { type Prng } from '../prng';
|
|
3
|
+
import type { TagGenerator } from './types';
|
|
4
|
+
export interface StateBindingLike {
|
|
5
|
+
tag: string;
|
|
6
|
+
map: Record<string, string>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Cyclic state-machine walk with realistic dwell times (Task 1): long
|
|
10
|
+
* stretches of 'active' (a pump's normal running condition), occasional
|
|
11
|
+
* short 'stopped' dwells, and rare 'fault' excursions — every OTHER
|
|
12
|
+
* generator that "follows" a state tag (`ramp-generator.ts`) reads this
|
|
13
|
+
* generator's `isActive` after each `step()`.
|
|
14
|
+
*/
|
|
15
|
+
export declare class StateGenerator implements TagGenerator {
|
|
16
|
+
private readonly prng;
|
|
17
|
+
readonly tag: string;
|
|
18
|
+
private readonly buckets;
|
|
19
|
+
private readonly keyByStateName;
|
|
20
|
+
private bucket;
|
|
21
|
+
private stateName;
|
|
22
|
+
private dwellRemainingMs;
|
|
23
|
+
constructor(prng: Prng, binding: StateBindingLike);
|
|
24
|
+
/** The signal `rotate`/`flow`/`emission` generators follow (Task 1: "follow their upstream state tags when topology links them"). */
|
|
25
|
+
get isActive(): boolean;
|
|
26
|
+
step(dtMs: number): TagValue['value'];
|
|
27
|
+
private transition;
|
|
28
|
+
private enter;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=state-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"state-generator.d.ts","sourceRoot":"","sources":["../../src/generators/state-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAA2B,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAC7D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAoDD;;;;;;GAMG;AACH,qBAAa,cAAe,YAAW,YAAY;IAS/C,OAAO,CAAC,QAAQ,CAAC,IAAI;IARvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAsB;IACrD,OAAO,CAAC,MAAM,CAAoB;IAClC,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,gBAAgB,CAAS;gBAGd,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,gBAAgB;IAU3B,qIAAqI;IACrI,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAED,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;IAOrC,OAAO,CAAC,UAAU;IAgBlB,OAAO,CAAC,KAAK;CAKd"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TagValue } from '@vscada/core';
|
|
2
|
+
/** One tag's stateful value generator — constructed once per simulator run, then advanced tick by tick. Every concrete generator in this directory implements this. */
|
|
3
|
+
export interface TagGenerator {
|
|
4
|
+
readonly tag: string;
|
|
5
|
+
/** Advances internal state by `dtMs` of simulated time and returns the CURRENT value to push for this tag. */
|
|
6
|
+
step(dtMs: number): TagValue['value'];
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/generators/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,uKAAuK;AACvK,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,8GAA8G;IAC9G,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;CACvC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { TagValue } from '@vscada/core';
|
|
2
|
+
import { type Prng } from '../prng';
|
|
3
|
+
import type { TagGenerator } from './types';
|
|
4
|
+
export interface VisibilityBindingLike {
|
|
5
|
+
tag: string;
|
|
6
|
+
map?: Record<string, boolean>;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* `visibility`: occasional toggles (Task 1) between shown and hidden. With
|
|
10
|
+
* a declared `map`, emits one of the raw keys that resolve to `true`/
|
|
11
|
+
* `false` (mirrors `state`'s key round-trip, `resolveVisibilityFlag`'s
|
|
12
|
+
* lookup); with no map, `resolveVisibilityFlag` falls back to
|
|
13
|
+
* `Boolean(value)`, so this pushes the boolean directly.
|
|
14
|
+
*/
|
|
15
|
+
export declare class VisibilityGenerator implements TagGenerator {
|
|
16
|
+
private readonly prng;
|
|
17
|
+
readonly tag: string;
|
|
18
|
+
private readonly trueKeys;
|
|
19
|
+
private readonly falseKeys;
|
|
20
|
+
private visible;
|
|
21
|
+
private dwellRemainingMs;
|
|
22
|
+
constructor(prng: Prng, binding: VisibilityBindingLike);
|
|
23
|
+
step(dtMs: number): TagValue['value'];
|
|
24
|
+
private toggle;
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=visibility-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibility-generator.d.ts","sourceRoot":"","sources":["../../src/generators/visibility-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAmB,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAG5C,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC/B;AAKD;;;;;;GAMG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IAQpD,OAAO,CAAC,QAAQ,CAAC,IAAI;IAPvB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAW;IACpC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAW;IACrC,OAAO,CAAC,OAAO,CAAQ;IACvB,OAAO,CAAC,gBAAgB,CAAS;gBAGd,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,qBAAqB;IAShC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC;IASrC,OAAO,CAAC,MAAM;CAKf"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { type Prng } from '../prng';
|
|
2
|
+
export declare function clamp(value: number, min: number, max: number): number;
|
|
3
|
+
/**
|
|
4
|
+
* Shared bounded random-walk-with-mean-reversion step — the math every
|
|
5
|
+
* continuous generator (level/drift/ramp) is built on. Reverts toward
|
|
6
|
+
* `target` at `reversionPerSec` (fraction of the remaining gap closed per
|
|
7
|
+
* simulated second), perturbed by noise scaled to `noiseFraction` of the
|
|
8
|
+
* `[min, max]` range, then clamped so a caller never has to re-check
|
|
9
|
+
* bounds itself.
|
|
10
|
+
*/
|
|
11
|
+
export declare function walkToward(prng: Prng, current: number, target: number, min: number, max: number, options: {
|
|
12
|
+
noiseFraction: number;
|
|
13
|
+
reversionPerSec: number;
|
|
14
|
+
}, dtMs: number): number;
|
|
15
|
+
/** Rate-limited approach toward `target` — the "continuous, never a jump" math `position`/`rotate`/`flow` share (a valve stroking, a pump's flow decaying). */
|
|
16
|
+
export declare function rampToward(current: number, target: number, maxDeltaPerMs: number, dtMs: number): number;
|
|
17
|
+
/** `state`/`visibility` raw map keys round-trip as numbers when they parse cleanly (the common device-code convention, e.g. `'0'`/`'1'`); anything else stays the literal string. */
|
|
18
|
+
export declare function keyToValue(key: string): number | string;
|
|
19
|
+
//# sourceMappingURL=walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"walk.d.ts","sourceRoot":"","sources":["../../src/generators/walk.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAE3C,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;;;;;;GAOG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,GAAG,EAAE,MAAM,EACX,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,aAAa,EAAE,MAAM,CAAC;IAAC,eAAe,EAAE,MAAM,CAAA;CAAE,EAC3D,IAAI,EAAE,MAAM,GACX,MAAM,CAMR;AAED,+JAA+J;AAC/J,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAKvG;AAED,qLAAqL;AACrL,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAEvD"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,KAAK,gBAAgB,EAAE,MAAM,aAAa,CAAC;AACrF,YAAY,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,378 @@
|
|
|
1
|
+
import { buildTopologyGraph as e } from "@vscada/core";
|
|
2
|
+
//#region src/inventory.ts
|
|
3
|
+
function t(e) {
|
|
4
|
+
return e.type === "off-page";
|
|
5
|
+
}
|
|
6
|
+
function n(e) {
|
|
7
|
+
let n = /* @__PURE__ */ new Map(), r = [], i = (e) => {
|
|
8
|
+
let t = n.get(e.tag);
|
|
9
|
+
t || (t = [], n.set(e.tag, t), r.push(e.tag)), t.push(e);
|
|
10
|
+
};
|
|
11
|
+
for (let n of e.elements) {
|
|
12
|
+
if (t(n)) continue;
|
|
13
|
+
let e = n;
|
|
14
|
+
for (let t of e.bindings) {
|
|
15
|
+
let n = e.thresholds.filter((e) => e.tag === t.tag);
|
|
16
|
+
i({
|
|
17
|
+
tag: t.tag,
|
|
18
|
+
binding: t,
|
|
19
|
+
ownerId: e.id,
|
|
20
|
+
ownerKind: "element",
|
|
21
|
+
thresholds: n
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
for (let t of e.connections) for (let e of t.bindings) i({
|
|
26
|
+
tag: e.tag,
|
|
27
|
+
binding: e,
|
|
28
|
+
ownerId: t.id,
|
|
29
|
+
ownerKind: "connection",
|
|
30
|
+
thresholds: []
|
|
31
|
+
});
|
|
32
|
+
for (let t of e.groups) for (let e of t.summaryTags) n.has(e) || (n.set(e, []), r.push(e));
|
|
33
|
+
let a = /* @__PURE__ */ new Map();
|
|
34
|
+
for (let e of r) a.set(e, {
|
|
35
|
+
tag: e,
|
|
36
|
+
refs: n.get(e) ?? []
|
|
37
|
+
});
|
|
38
|
+
return {
|
|
39
|
+
tags: r,
|
|
40
|
+
byTag: a
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//#endregion
|
|
44
|
+
//#region src/prng.ts
|
|
45
|
+
function r(e) {
|
|
46
|
+
let t = e >>> 0;
|
|
47
|
+
return function() {
|
|
48
|
+
t = t + 1831565813 | 0;
|
|
49
|
+
let e = Math.imul(t ^ t >>> 15, 1 | t);
|
|
50
|
+
return e = e + Math.imul(e ^ e >>> 7, 61 | e) ^ e, ((e ^ e >>> 14) >>> 0) / 4294967296;
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
function i(e, t, n) {
|
|
54
|
+
return t + e() * (n - t);
|
|
55
|
+
}
|
|
56
|
+
function a(e, t, n) {
|
|
57
|
+
return Math.floor(i(e, t, n + 1));
|
|
58
|
+
}
|
|
59
|
+
function o(e, t) {
|
|
60
|
+
return e() < t;
|
|
61
|
+
}
|
|
62
|
+
function s(e, t) {
|
|
63
|
+
return t[a(e, 0, t.length - 1)];
|
|
64
|
+
}
|
|
65
|
+
function c(e) {
|
|
66
|
+
return i(e, -1, 1);
|
|
67
|
+
}
|
|
68
|
+
//#endregion
|
|
69
|
+
//#region src/generators/blink-generator.ts
|
|
70
|
+
var l = [1e4, 6e4], u = [2e3, 8e3], d = class {
|
|
71
|
+
constructor(e, t) {
|
|
72
|
+
this.prng = e, this.on = !1, this.tag = t.tag, this.offValue = t.min ?? 0, this.onValue = t.max ?? 1, this.dwellRemainingMs = i(e, l[0], l[1]);
|
|
73
|
+
}
|
|
74
|
+
step(e) {
|
|
75
|
+
return this.dwellRemainingMs -= e, this.dwellRemainingMs <= 0 && this.toggle(), this.on ? this.onValue : this.offValue;
|
|
76
|
+
}
|
|
77
|
+
toggle() {
|
|
78
|
+
this.on = !this.on;
|
|
79
|
+
let e = this.on ? u : l;
|
|
80
|
+
this.dwellRemainingMs = i(this.prng, e[0], e[1]);
|
|
81
|
+
}
|
|
82
|
+
};
|
|
83
|
+
//#endregion
|
|
84
|
+
//#region src/generators/walk.ts
|
|
85
|
+
function f(e, t, n) {
|
|
86
|
+
return Math.min(Math.max(e, t), n);
|
|
87
|
+
}
|
|
88
|
+
function p(e, t, n, r, i, a, o) {
|
|
89
|
+
let s = i - r, l = o / 1e3, u = c(e) * a.noiseFraction * s * l, d = (n - t) * Math.min(1, a.reversionPerSec * l);
|
|
90
|
+
return f(t + u + d, r, i);
|
|
91
|
+
}
|
|
92
|
+
function m(e, t, n, r) {
|
|
93
|
+
let i = n * r, a = t - e;
|
|
94
|
+
return Math.abs(a) <= i ? t : e + Math.sign(a) * i;
|
|
95
|
+
}
|
|
96
|
+
function h(e) {
|
|
97
|
+
return /^-?\d+(\.\d+)?$/.test(e) ? Number(e) : e;
|
|
98
|
+
}
|
|
99
|
+
//#endregion
|
|
100
|
+
//#region src/generators/drift-generator.ts
|
|
101
|
+
var g = .06, _ = .1, v = class {
|
|
102
|
+
constructor(e, t) {
|
|
103
|
+
this.prng = e, this.tag = t.tag, this.min = t.min, this.max = t.max, this.center = (t.min + t.max) / 2, this.value = this.center;
|
|
104
|
+
}
|
|
105
|
+
step(e) {
|
|
106
|
+
return this.value = p(this.prng, this.value, this.center, this.min, this.max, {
|
|
107
|
+
noiseFraction: g,
|
|
108
|
+
reversionPerSec: _
|
|
109
|
+
}, e), this.value;
|
|
110
|
+
}
|
|
111
|
+
}, y = [2e4, 9e4], b = .05, x = .15, S = .2, C = .08;
|
|
112
|
+
function w(e, t, n) {
|
|
113
|
+
let r = n.filter((e) => e.direction === "below").map((e) => e.value), i = n.filter((e) => e.direction === "above").map((e) => e.value), a = t - e, o = r.length > 0 ? Math.max(...r) : e, s = r.length > 0 ? Math.min(...r) : e, c = i.length > 0 ? Math.min(...i) : t, l = i.length > 0 ? Math.max(...i) : t;
|
|
114
|
+
return {
|
|
115
|
+
normalCenter: (o + c) / 2,
|
|
116
|
+
lowExcursionTarget: f(s - a * C, e, t),
|
|
117
|
+
highExcursionTarget: f(l + a * C, e, t),
|
|
118
|
+
hasBelow: r.length > 0,
|
|
119
|
+
hasAbove: i.length > 0
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
var T = class {
|
|
123
|
+
constructor(e, t, n) {
|
|
124
|
+
this.prng = e, this.regime = "normal", this.tag = t.tag, this.min = t.min, this.max = t.max, this.targets = w(this.min, this.max, n), this.value = this.targets.normalCenter, this.regimeRemainingMs = i(e, y[0], y[1]);
|
|
125
|
+
}
|
|
126
|
+
step(e) {
|
|
127
|
+
return this.regimeRemainingMs -= e, this.regimeRemainingMs <= 0 && this.rerollRegime(), this.value = p(this.prng, this.value, this.currentTarget(), this.min, this.max, {
|
|
128
|
+
noiseFraction: b,
|
|
129
|
+
reversionPerSec: x
|
|
130
|
+
}, e), this.value;
|
|
131
|
+
}
|
|
132
|
+
currentTarget() {
|
|
133
|
+
return this.regime === "low" ? this.targets.lowExcursionTarget : this.regime === "high" ? this.targets.highExcursionTarget : this.targets.normalCenter;
|
|
134
|
+
}
|
|
135
|
+
rerollRegime() {
|
|
136
|
+
let e = [];
|
|
137
|
+
this.targets.hasBelow && e.push("low"), this.targets.hasAbove && e.push("high"), this.regime = e.length > 0 && o(this.prng, S) ? s(this.prng, e) : "normal", this.regimeRemainingMs = i(this.prng, y[0], y[1]);
|
|
138
|
+
}
|
|
139
|
+
}, E = [5e3, 3e4], D = [2e3, 6e3], ee = .8, O = class {
|
|
140
|
+
constructor(e, t) {
|
|
141
|
+
this.prng = e, this.tag = t.tag, this.min = t.min, this.max = t.max, this.value = t.min, this.target = this.value, this.rampRatePerMs = this.rollRampRate(), this.dwellRemainingMs = i(e, E[0], E[1]);
|
|
142
|
+
}
|
|
143
|
+
step(e) {
|
|
144
|
+
return this.dwellRemainingMs -= e, this.dwellRemainingMs <= 0 && this.rerollTarget(), this.value = m(this.value, this.target, this.rampRatePerMs, e), this.value;
|
|
145
|
+
}
|
|
146
|
+
rerollTarget() {
|
|
147
|
+
this.target = o(this.prng, ee) ? s(this.prng, [this.min, this.max]) : i(this.prng, this.min, this.max), this.rampRatePerMs = this.rollRampRate(), this.dwellRemainingMs = i(this.prng, E[0], E[1]);
|
|
148
|
+
}
|
|
149
|
+
rollRampRate() {
|
|
150
|
+
return (this.max - this.min) / i(this.prng, D[0], D[1]);
|
|
151
|
+
}
|
|
152
|
+
}, k = [2e3, 6e3], A = [.6, 1], j = [1e4, 4e4], M = .02, N = class {
|
|
153
|
+
constructor(e, t, n) {
|
|
154
|
+
this.prng = e, this.tag = t.tag, this.min = t.min, this.max = t.max, this.isUpstreamActive = n, this.fallbackDrift = n ? void 0 : new v(e, t), this.rampRatePerMs = (this.max - this.min) / i(e, k[0], k[1]), this.value = this.min, this.activeTarget = this.rollActiveTarget(), this.targetRerollRemainingMs = i(e, j[0], j[1]);
|
|
155
|
+
}
|
|
156
|
+
step(e) {
|
|
157
|
+
if (!this.isUpstreamActive) return this.fallbackDrift.step(e);
|
|
158
|
+
this.targetRerollRemainingMs -= e, this.targetRerollRemainingMs <= 0 && (this.activeTarget = this.rollActiveTarget(), this.targetRerollRemainingMs = i(this.prng, j[0], j[1]));
|
|
159
|
+
let t = this.isUpstreamActive() ? this.activeTarget : this.min, n = m(this.value, t, this.rampRatePerMs, e);
|
|
160
|
+
return this.value = f(n + c(this.prng) * M * (this.max - this.min) * (e / 1e3), this.min, this.max), this.value;
|
|
161
|
+
}
|
|
162
|
+
rollActiveTarget() {
|
|
163
|
+
let e = this.max - this.min;
|
|
164
|
+
return i(this.prng, this.min + e * A[0], this.min + e * A[1]);
|
|
165
|
+
}
|
|
166
|
+
}, P = /trip|fault|alarm|fail/i, F = /stop|off|closed|idle/i;
|
|
167
|
+
function I(e) {
|
|
168
|
+
let t = {
|
|
169
|
+
active: [],
|
|
170
|
+
stopped: [],
|
|
171
|
+
fault: []
|
|
172
|
+
}, n = /* @__PURE__ */ new Map();
|
|
173
|
+
for (let [r, i] of Object.entries(e)) n.set(i, r), P.test(i) ? t.fault.push(i) : F.test(i) ? t.stopped.push(i) : t.active.push(i);
|
|
174
|
+
if (t.active.length === 0) {
|
|
175
|
+
let [, n] = Object.entries(e)[0];
|
|
176
|
+
t.active.push(n);
|
|
177
|
+
}
|
|
178
|
+
return {
|
|
179
|
+
buckets: t,
|
|
180
|
+
keyByStateName: n
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
var L = [3e4, 3e5], R = [1e4, 6e4], z = [5e3, 2e4], B = .08, V = class {
|
|
184
|
+
constructor(e, t) {
|
|
185
|
+
this.prng = e, this.bucket = "active", this.tag = t.tag;
|
|
186
|
+
let n = I(t.map);
|
|
187
|
+
this.buckets = n.buckets, this.keyByStateName = n.keyByStateName, this.stateName = s(e, this.buckets.active), this.dwellRemainingMs = i(e, ...L);
|
|
188
|
+
}
|
|
189
|
+
get isActive() {
|
|
190
|
+
return this.bucket === "active";
|
|
191
|
+
}
|
|
192
|
+
step(e) {
|
|
193
|
+
return this.dwellRemainingMs -= e, this.dwellRemainingMs <= 0 && this.transition(), h(this.keyByStateName.get(this.stateName) ?? this.stateName);
|
|
194
|
+
}
|
|
195
|
+
transition() {
|
|
196
|
+
this.bucket === "active" ? this.buckets.fault.length > 0 && o(this.prng, B) ? this.enter("fault", s(this.prng, this.buckets.fault), z) : this.buckets.stopped.length > 0 ? this.enter("stopped", s(this.prng, this.buckets.stopped), R) : this.enter("active", s(this.prng, this.buckets.active), L) : this.enter("active", s(this.prng, this.buckets.active), L);
|
|
197
|
+
}
|
|
198
|
+
enter(e, t, n) {
|
|
199
|
+
this.bucket = e, this.stateName = t, this.dwellRemainingMs = i(this.prng, n[0], n[1]);
|
|
200
|
+
}
|
|
201
|
+
}, H = [15e3, 9e4], U = [5e3, 3e4], W = class {
|
|
202
|
+
constructor(e, t) {
|
|
203
|
+
this.prng = e, this.visible = !0, this.tag = t.tag;
|
|
204
|
+
let n = Object.entries(t.map ?? {});
|
|
205
|
+
this.trueKeys = n.filter(([, e]) => e).map(([e]) => e), this.falseKeys = n.filter(([, e]) => !e).map(([e]) => e), this.dwellRemainingMs = i(e, H[0], H[1]);
|
|
206
|
+
}
|
|
207
|
+
step(e) {
|
|
208
|
+
if (this.dwellRemainingMs -= e, this.dwellRemainingMs <= 0 && this.toggle(), this.trueKeys.length === 0 && this.falseKeys.length === 0) return this.visible;
|
|
209
|
+
let t = this.visible ? this.trueKeys.length > 0 ? this.trueKeys : this.falseKeys : this.falseKeys.length > 0 ? this.falseKeys : this.trueKeys;
|
|
210
|
+
return h(s(this.prng, t));
|
|
211
|
+
}
|
|
212
|
+
toggle() {
|
|
213
|
+
this.visible = !this.visible;
|
|
214
|
+
let e = this.visible ? H : U;
|
|
215
|
+
this.dwellRemainingMs = i(this.prng, e[0], e[1]);
|
|
216
|
+
}
|
|
217
|
+
}, G = {
|
|
218
|
+
min: 0,
|
|
219
|
+
max: 100
|
|
220
|
+
}, K = .2;
|
|
221
|
+
function q(e) {
|
|
222
|
+
if (e.length === 0) return G;
|
|
223
|
+
let t = e.map((e) => e.value), n = Math.min(...t), r = Math.max(...t), i = Math.max(r - n, 1) * K;
|
|
224
|
+
return {
|
|
225
|
+
min: n - i,
|
|
226
|
+
max: r + i
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
function J(e, t, n) {
|
|
230
|
+
if (e.ownerKind === "element") {
|
|
231
|
+
let r = n.get(e.ownerId);
|
|
232
|
+
if (r) return () => r.isActive;
|
|
233
|
+
let i = t.incoming.get(e.ownerId)?.[0]?.from, a = i ? n.get(i) : void 0;
|
|
234
|
+
return a ? () => a.isActive : void 0;
|
|
235
|
+
}
|
|
236
|
+
let r = t.edgeById.get(e.ownerId)?.from, i = r ? n.get(r) : void 0;
|
|
237
|
+
return i ? () => i.isActive : void 0;
|
|
238
|
+
}
|
|
239
|
+
function Y(t, r) {
|
|
240
|
+
let i = n(t), a = e(t), o = /* @__PURE__ */ new Map(), s = /* @__PURE__ */ new Map();
|
|
241
|
+
for (let e of i.tags) {
|
|
242
|
+
let t = i.byTag.get(e).refs[0];
|
|
243
|
+
if (!t || t.binding.type !== "state") continue;
|
|
244
|
+
let n = new V(r, {
|
|
245
|
+
tag: e,
|
|
246
|
+
map: t.binding.map
|
|
247
|
+
});
|
|
248
|
+
o.set(e, n), t.ownerKind === "element" && s.set(t.ownerId, n);
|
|
249
|
+
}
|
|
250
|
+
for (let e of i.tags) {
|
|
251
|
+
if (o.has(e)) continue;
|
|
252
|
+
let t = i.byTag.get(e).refs[0];
|
|
253
|
+
if (!t) continue;
|
|
254
|
+
let n = t.binding;
|
|
255
|
+
switch (n.type) {
|
|
256
|
+
case "level":
|
|
257
|
+
o.set(e, new T(r, n, t.thresholds));
|
|
258
|
+
break;
|
|
259
|
+
case "position":
|
|
260
|
+
o.set(e, new O(r, n));
|
|
261
|
+
break;
|
|
262
|
+
case "rotate":
|
|
263
|
+
case "flow":
|
|
264
|
+
case "emission":
|
|
265
|
+
o.set(e, new N(r, n, J(t, a, s)));
|
|
266
|
+
break;
|
|
267
|
+
case "readout":
|
|
268
|
+
o.set(e, new v(r, {
|
|
269
|
+
tag: e,
|
|
270
|
+
...q(t.thresholds)
|
|
271
|
+
}));
|
|
272
|
+
break;
|
|
273
|
+
case "needle":
|
|
274
|
+
case "color-ramp":
|
|
275
|
+
o.set(e, new v(r, n));
|
|
276
|
+
break;
|
|
277
|
+
case "blink":
|
|
278
|
+
o.set(e, new d(r, n));
|
|
279
|
+
break;
|
|
280
|
+
case "visibility":
|
|
281
|
+
o.set(e, new W(r, n));
|
|
282
|
+
break;
|
|
283
|
+
case "state": break;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
let c = /* @__PURE__ */ new Map();
|
|
287
|
+
for (let e of i.tags) {
|
|
288
|
+
let t = o.get(e);
|
|
289
|
+
t && c.set(e, t);
|
|
290
|
+
}
|
|
291
|
+
return c;
|
|
292
|
+
}
|
|
293
|
+
//#endregion
|
|
294
|
+
//#region src/quality.ts
|
|
295
|
+
var X = {
|
|
296
|
+
meanIntervalMs: 15e4,
|
|
297
|
+
durationMs: [3e3, 8e3]
|
|
298
|
+
}, Z = {
|
|
299
|
+
meanIntervalMs: 2e5,
|
|
300
|
+
durationMs: [12e3, 25e3]
|
|
301
|
+
};
|
|
302
|
+
function Q(e, t) {
|
|
303
|
+
return {
|
|
304
|
+
meanIntervalMs: e?.meanIntervalMs ?? t.meanIntervalMs,
|
|
305
|
+
durationMs: e?.durationMs ?? t.durationMs
|
|
306
|
+
};
|
|
307
|
+
}
|
|
308
|
+
function $(e, t) {
|
|
309
|
+
return i(e, t * .5, t * 1.5);
|
|
310
|
+
}
|
|
311
|
+
var te = class {
|
|
312
|
+
constructor(e, t) {
|
|
313
|
+
this.prng = e, this.state = "good", this.remainingMs = 0, this.enabled = t?.enabled ?? !0, this.bad = Q(t?.badQuality, X), this.stale = Q(t?.stale, Z), this.nextBadInMs = $(e, this.bad.meanIntervalMs), this.nextStaleInMs = $(e, this.stale.meanIntervalMs);
|
|
314
|
+
}
|
|
315
|
+
step(e) {
|
|
316
|
+
if (!this.enabled) return "good";
|
|
317
|
+
if (this.state !== "good") {
|
|
318
|
+
if (this.remainingMs -= e, this.remainingMs > 0) return this.state;
|
|
319
|
+
this.state = "good";
|
|
320
|
+
}
|
|
321
|
+
this.nextBadInMs -= e, this.nextStaleInMs -= e;
|
|
322
|
+
let t = this.nextBadInMs <= 0, n = this.nextStaleInMs <= 0;
|
|
323
|
+
return t && (!n || this.nextBadInMs <= this.nextStaleInMs) ? this.enterBad() : n && this.enterStale(), this.state;
|
|
324
|
+
}
|
|
325
|
+
enterBad() {
|
|
326
|
+
this.state = "bad", this.remainingMs = i(this.prng, this.bad.durationMs[0], this.bad.durationMs[1]), this.nextBadInMs = $(this.prng, this.bad.meanIntervalMs);
|
|
327
|
+
}
|
|
328
|
+
enterStale() {
|
|
329
|
+
this.state = "stale", this.remainingMs = i(this.prng, this.stale.durationMs[0], this.stale.durationMs[1]), this.nextStaleInMs = $(this.prng, this.stale.meanIntervalMs);
|
|
330
|
+
}
|
|
331
|
+
}, ne = 1, re = 250, ie = 5e3;
|
|
332
|
+
function ae(e, t = {}) {
|
|
333
|
+
let n = r(t.seed ?? ne), i = Y(e, n), a = /* @__PURE__ */ new Map();
|
|
334
|
+
for (let e of i.keys()) a.set(e, new te(n, t.quality));
|
|
335
|
+
let o = t.rate ?? re, s = t.quality?.onConnectionDrop, c = t.startTimestamp ?? Date.now(), l, u = 0, d = !1;
|
|
336
|
+
function f(e) {
|
|
337
|
+
if (c += e, u > 0) {
|
|
338
|
+
u -= e;
|
|
339
|
+
for (let t of i.values()) t.step(e);
|
|
340
|
+
for (let t of a.values()) t.step(e);
|
|
341
|
+
return u <= 0 && (d = !1, s?.(!1)), [];
|
|
342
|
+
}
|
|
343
|
+
let t = [];
|
|
344
|
+
for (let [n, r] of i) {
|
|
345
|
+
let i = r.step(e), o = a.get(n).step(e);
|
|
346
|
+
o !== "stale" && t.push({
|
|
347
|
+
tag: n,
|
|
348
|
+
value: i,
|
|
349
|
+
quality: o === "bad" ? "bad" : "good",
|
|
350
|
+
timestamp: c
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
return t;
|
|
354
|
+
}
|
|
355
|
+
function p(e) {
|
|
356
|
+
l === void 0 && (l = setInterval(() => {
|
|
357
|
+
let t = f(o);
|
|
358
|
+
t.length > 0 && e(t);
|
|
359
|
+
}, o));
|
|
360
|
+
}
|
|
361
|
+
function m() {
|
|
362
|
+
l !== void 0 && (clearInterval(l), l = void 0);
|
|
363
|
+
}
|
|
364
|
+
function h(e = ie) {
|
|
365
|
+
u = e, d || (d = !0, s?.(!0));
|
|
366
|
+
}
|
|
367
|
+
return {
|
|
368
|
+
start: p,
|
|
369
|
+
stop: m,
|
|
370
|
+
step: f,
|
|
371
|
+
triggerConnectionDrop: h
|
|
372
|
+
};
|
|
373
|
+
}
|
|
374
|
+
//#endregion
|
|
375
|
+
//#region src/index.ts
|
|
376
|
+
var oe = "0.0.0";
|
|
377
|
+
//#endregion
|
|
378
|
+
export { oe as VERSION, ae as createSimulator };
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { Binding, Scene, Threshold } from '@vscada/core';
|
|
2
|
+
/**
|
|
3
|
+
* Story 5.2 Task 1 — one occurrence of a tag being bound somewhere in the
|
|
4
|
+
* scene (an element's own binding, or a connection's `flow` binding). A
|
|
5
|
+
* tag CAN be bound more than once (rare, but not disallowed by the
|
|
6
|
+
* schema); every occurrence is kept so `buildTagInventory` never silently
|
|
7
|
+
* drops information, even though `build-generators.ts` only acts on the
|
|
8
|
+
* first (see its own doc for why that's the right call).
|
|
9
|
+
*/
|
|
10
|
+
export interface TagBindingRef {
|
|
11
|
+
tag: string;
|
|
12
|
+
binding: Binding;
|
|
13
|
+
ownerId: string;
|
|
14
|
+
ownerKind: 'element' | 'connection';
|
|
15
|
+
/** Thresholds declared on the owning ELEMENT for this exact tag; always empty for a connection-owned binding (connections have no `thresholds` field). */
|
|
16
|
+
thresholds: readonly Threshold[];
|
|
17
|
+
}
|
|
18
|
+
export interface TagInventoryEntry {
|
|
19
|
+
tag: string;
|
|
20
|
+
/** Authoring order — the first ref is what `build-generators.ts` treats as authoritative for inference. Empty when the tag is only ever referenced via a group's `summaryTags` (see module doc). */
|
|
21
|
+
refs: readonly TagBindingRef[];
|
|
22
|
+
}
|
|
23
|
+
export interface SceneTagInventory {
|
|
24
|
+
/** Every discovered tag, first-seen order (elements, then connections, then group summaryTags) — the deterministic order every downstream `Map` built from this relies on for AC3. */
|
|
25
|
+
tags: readonly string[];
|
|
26
|
+
byTag: ReadonlyMap<string, TagInventoryEntry>;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Walks a scene's bindings/thresholds/summaryTags (Dev Notes) into a flat,
|
|
30
|
+
* deterministic tag inventory — the input every generator-inference step
|
|
31
|
+
* (`build-generators.ts`) and the simulator's own tag-iteration order (AC3
|
|
32
|
+
* determinism) is built from. Pure and read-only: never mutates the scene,
|
|
33
|
+
* never touches a clock (AD-4 spirit — this package isn't core, but the
|
|
34
|
+
* same discipline keeps it testable the same way).
|
|
35
|
+
*/
|
|
36
|
+
export declare function buildTagInventory(scene: Scene): SceneTagInventory;
|
|
37
|
+
//# sourceMappingURL=inventory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inventory.d.ts","sourceRoot":"","sources":["../src/inventory.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAc,OAAO,EAAkB,KAAK,EAAgB,SAAS,EAAE,MAAM,cAAc,CAAC;AAExG;;;;;;;GAOG;AACH,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,SAAS,GAAG,YAAY,CAAC;IACpC,0JAA0J;IAC1J,UAAU,EAAE,SAAS,SAAS,EAAE,CAAC;CAClC;AAED,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,oMAAoM;IACpM,IAAI,EAAE,SAAS,aAAa,EAAE,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,sLAAsL;IACtL,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,KAAK,EAAE,WAAW,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;CAC/C;AAOD;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,KAAK,GAAG,iBAAiB,CAqDjE"}
|
package/dist/prng.d.ts
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Mulberry32 — a small, fast, seeded PRNG (no deps, per Story 5.2 Dev
|
|
3
|
+
* Notes). Deterministic: the same seed always produces the same sequence
|
|
4
|
+
* of `next()` outputs, which is what AC3's "fixed seed -> deterministic
|
|
5
|
+
* value sequence" ultimately rests on for every generator in this package.
|
|
6
|
+
*/
|
|
7
|
+
export type Prng = () => number;
|
|
8
|
+
export declare function mulberry32(seed: number): Prng;
|
|
9
|
+
/** Uniform float in `[min, max)`. */
|
|
10
|
+
export declare function randRange(prng: Prng, min: number, max: number): number;
|
|
11
|
+
/** Uniform integer in `[min, max]` (inclusive both ends). */
|
|
12
|
+
export declare function randInt(prng: Prng, min: number, max: number): number;
|
|
13
|
+
/** `true` with probability `probability` (0..1). */
|
|
14
|
+
export declare function chance(prng: Prng, probability: number): boolean;
|
|
15
|
+
/** Uniformly picks one element of a non-empty array. */
|
|
16
|
+
export declare function pick<T>(prng: Prng, values: readonly T[]): T;
|
|
17
|
+
/** Signed unit noise in `[-1, 1)`, the shape every bounded-walk generator scales by its own step size. */
|
|
18
|
+
export declare function noise(prng: Prng): number;
|
|
19
|
+
//# sourceMappingURL=prng.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prng.d.ts","sourceRoot":"","sources":["../src/prng.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC;AAEhC,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAQ7C;AAED,qCAAqC;AACrC,wBAAgB,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED,6DAA6D;AAC7D,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAEpE;AAED,oDAAoD;AACpD,wBAAgB,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAE/D;AAED,wDAAwD;AACxD,wBAAgB,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,CAE3D;AAED,0GAA0G;AAC1G,wBAAgB,KAAK,CAAC,IAAI,EAAE,IAAI,GAAG,MAAM,CAExC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { type Prng } from './prng';
|
|
2
|
+
export type TagQualityState = 'good' | 'bad' | 'stale';
|
|
3
|
+
export interface QualityBlipBandOptions {
|
|
4
|
+
/** Average simulated time between blips of this kind, ms — the actual interval is jittered ±50% around it so tags don't all blip in lockstep. */
|
|
5
|
+
meanIntervalMs?: number;
|
|
6
|
+
/** How long one blip lasts, ms — drawn uniformly from this `[min, max]` range each time. */
|
|
7
|
+
durationMs?: readonly [number, number];
|
|
8
|
+
}
|
|
9
|
+
export interface QualityBlipOptions {
|
|
10
|
+
/** Master on/off switch. Default `true`. */
|
|
11
|
+
enabled?: boolean;
|
|
12
|
+
badQuality?: QualityBlipBandOptions;
|
|
13
|
+
stale?: QualityBlipBandOptions;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Per-tag quality-blip scheduler (Task 3): independently-timed 'bad'
|
|
17
|
+
* quality bursts and 'stale' (no-push) windows, each on its own jittered
|
|
18
|
+
* periodic timer. 'bad' and 'stale' are mutually exclusive per tag —
|
|
19
|
+
* whichever timer is due first wins; the other keeps counting down
|
|
20
|
+
* underneath and still fires on its own schedule once the current window
|
|
21
|
+
* ends. One instance per tag, constructed from the simulator's own seeded
|
|
22
|
+
* PRNG stream (AC3 determinism).
|
|
23
|
+
*/
|
|
24
|
+
export declare class TagQualityScheduler {
|
|
25
|
+
private readonly prng;
|
|
26
|
+
private state;
|
|
27
|
+
private remainingMs;
|
|
28
|
+
private nextBadInMs;
|
|
29
|
+
private nextStaleInMs;
|
|
30
|
+
private readonly bad;
|
|
31
|
+
private readonly stale;
|
|
32
|
+
private readonly enabled;
|
|
33
|
+
constructor(prng: Prng, options: QualityBlipOptions | undefined);
|
|
34
|
+
step(dtMs: number): TagQualityState;
|
|
35
|
+
private enterBad;
|
|
36
|
+
private enterStale;
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=quality.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quality.d.ts","sourceRoot":"","sources":["../src/quality.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,IAAI,EAAE,MAAM,QAAQ,CAAC;AAE9C,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,CAAC;AAEvD,MAAM,WAAW,sBAAsB;IACrC,iJAAiJ;IACjJ,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,kBAAkB;IACjC,4CAA4C;IAC5C,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,sBAAsB,CAAC;IACpC,KAAK,CAAC,EAAE,sBAAsB,CAAC;CAChC;AAuBD;;;;;;;;GAQG;AACH,qBAAa,mBAAmB;IAU5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IATvB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAe;IACrC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAU;gBAGf,IAAI,EAAE,IAAI,EAC3B,OAAO,EAAE,kBAAkB,GAAG,SAAS;IASzC,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe;IAoBnC,OAAO,CAAC,QAAQ;IAMhB,OAAO,CAAC,UAAU;CAKnB"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import type { Scene, TagValue } from '@vscada/core';
|
|
2
|
+
import { type QualityBlipOptions } from './quality';
|
|
3
|
+
export interface SimulatorOptions {
|
|
4
|
+
/** Same seed -> identical value sequence for the same `step()` calls (AC3). */
|
|
5
|
+
seed?: number;
|
|
6
|
+
/** Real-time tick interval for `start()`'s own scheduling loop, ms. Irrelevant to `step()`, which always advances by the caller's own `dtMs` — the deterministic path tests and 4.1 static-mode snapshots use (Dev Notes). */
|
|
7
|
+
rate?: number;
|
|
8
|
+
/** Task 3 — per-tag bad-quality/stale scheduling. Omit for the tuned defaults; `{enabled: false}` turns it off entirely (every value stays 'good', nothing ever skipped). */
|
|
9
|
+
quality?: QualityBlipOptions & {
|
|
10
|
+
onConnectionDrop?: (dropped: boolean) => void;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Anchors the epoch `timestamp` every pushed `TagValue` carries — real
|
|
14
|
+
* device data is stamped with real wall-clock time, so a live demo
|
|
15
|
+
* (`start()`) needs a realistic epoch, not a counter starting at 0 (a
|
|
16
|
+
* real `<scada-view>`'s staleness check would see every value as already
|
|
17
|
+
* ancient). Defaults to `Date.now()`, read exactly ONCE at construction
|
|
18
|
+
* (never per-tick — this package has no continuous clock dependency to
|
|
19
|
+
* inject, unlike core's `TimeSource`). Pass a fixed number (e.g. `0`)
|
|
20
|
+
* for full timestamp determinism in tests (AC3).
|
|
21
|
+
*
|
|
22
|
+
* AD-4 note (architecture-code-audit-2026-08-27): reviewed as a
|
|
23
|
+
* `Date.now()` call outside `TimeSource` and confirmed already-compliant
|
|
24
|
+
* in spirit — `@vscada/sim` is dev tooling (a data generator), not part
|
|
25
|
+
* of the runtime frame/animation pipeline AD-4's "one clock" rule
|
|
26
|
+
* targets, and this option already exists specifically so a caller can
|
|
27
|
+
* override it for full determinism. No code change made.
|
|
28
|
+
*/
|
|
29
|
+
startTimestamp?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface Simulator {
|
|
32
|
+
/** Begins a real-time push loop: calls `push` with every tag's current value every `rate` ms. Push-based against the component's own public `setValues`-shaped API (AD-10) — this module never imports `@vscada/core`'s `ScadaView` or touches its internals. */
|
|
33
|
+
start(push: (values: TagValue[]) => void): void;
|
|
34
|
+
stop(): void;
|
|
35
|
+
/** Manual advance by `dtMs` of simulated time — the deterministic path every test (and a static-mode snapshot) drives directly, bypassing `start()`'s real-time interval entirely. */
|
|
36
|
+
step(dtMs: number): TagValue[];
|
|
37
|
+
/**
|
|
38
|
+
* Task 3's "one scripted `connectionState` drop hook the caller can
|
|
39
|
+
* trigger": for `durationMs`, `step()` (and therefore `start()`'s own
|
|
40
|
+
* loop) pushes NOTHING at all — a total feed outage, distinct from a
|
|
41
|
+
* per-tag stale window. The sim never touches `connectionState` itself
|
|
42
|
+
* (it only knows `TagValue`s, not the component — AD-10); `onConnectionDrop`
|
|
43
|
+
* is this method's own callback seam for a caller that wants to mirror
|
|
44
|
+
* the drop onto `view.connectionState` itself. Re-triggering while
|
|
45
|
+
* already dropped extends the window; it does not fire the callback a
|
|
46
|
+
* second time.
|
|
47
|
+
*/
|
|
48
|
+
triggerConnectionDrop(durationMs?: number): void;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Story 5.2 Task 2 — the simulator's runtime shape. Discovers/infers every
|
|
52
|
+
* tag's generator ONCE at construction (Task 1's `buildGenerators`), then
|
|
53
|
+
* exposes `start`/`stop` (real-time demo loop) and `step` (deterministic
|
|
54
|
+
* manual advance) over that same generator set and the same seeded PRNG
|
|
55
|
+
* stream — so a `step()`-driven test and a `start()`-driven live demo are
|
|
56
|
+
* never two different code paths, just two different callers of `step`.
|
|
57
|
+
*/
|
|
58
|
+
export declare function createSimulator(scene: Scene, options?: SimulatorOptions): Simulator;
|
|
59
|
+
//# sourceMappingURL=simulator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"simulator.d.ts","sourceRoot":"","sources":["../src/simulator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAGpD,OAAO,EAAuB,KAAK,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAEzE,MAAM,WAAW,gBAAgB;IAC/B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8NAA8N;IAC9N,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6KAA6K;IAC7K,OAAO,CAAC,EAAE,kBAAkB,GAAG;QAAE,gBAAgB,CAAC,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,IAAI,CAAA;KAAE,CAAC;IACjF;;;;;;;;;;;;;;;;OAgBG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,iQAAiQ;IACjQ,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,IAAI,GAAG,IAAI,CAAC;IAChD,IAAI,IAAI,IAAI,CAAC;IACb,sLAAsL;IACtL,IAAI,CAAC,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAAC;IAC/B;;;;;;;;;;OAUG;IACH,qBAAqB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CAClD;AAMD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,GAAE,gBAAqB,GAAG,SAAS,CAmEvF"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { Scene } from '@vscada/core';
|
|
2
|
+
/**
|
|
3
|
+
* Story 5.2 Task 4 — a WtE-class fixture (Dev Notes reference: the same
|
|
4
|
+
* tank/pump/readout shape as Story 1.7's walking skeleton, plus a valve so
|
|
5
|
+
* `position` gets exercised too) rebuilt locally rather than imported from
|
|
6
|
+
* `@vscada/builder`'s own `src/fixtures/walking-skeleton.ts` — that file
|
|
7
|
+
* isn't part of builder's public `index.ts` export surface (deliberately;
|
|
8
|
+
* it's Story 5.1's own internal fixture), so this package keeps its own,
|
|
9
|
+
* covering one instance of every binding type this story's generators
|
|
10
|
+
* dispatch on: `level` (with thresholds), `readout`, `state`, `rotate`
|
|
11
|
+
* (same-element follow), `flow` (topology-linked follow, on P-205 —
|
|
12
|
+
* PMP-05's discharge), and `position` (the isolation valve).
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildWteFixtureScene(): Scene;
|
|
15
|
+
//# sourceMappingURL=wte-scene.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wte-scene.d.ts","sourceRoot":"","sources":["../../src/test-fixtures/wte-scene.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,cAAc,CAAC;AAE1C;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,IAAI,KAAK,CAkD5C"}
|
package/package.json
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@vscada/sim",
|
|
3
|
+
"version": "0.0.1",
|
|
4
|
+
"description": "VScada Tag simulator (real content: Story 5.2; consumed by the Story 5.3 preview CLI in @vscada/cli)",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"sideEffects": false,
|
|
7
|
+
"license": "UNLICENSED",
|
|
8
|
+
"files": [
|
|
9
|
+
"dist"
|
|
10
|
+
],
|
|
11
|
+
"exports": {
|
|
12
|
+
".": {
|
|
13
|
+
"types": "./dist/index.d.ts",
|
|
14
|
+
"import": "./dist/index.js"
|
|
15
|
+
}
|
|
16
|
+
},
|
|
17
|
+
"dependencies": {
|
|
18
|
+
"@vscada/core": "0.0.1"
|
|
19
|
+
},
|
|
20
|
+
"devDependencies": {
|
|
21
|
+
"typescript": "~5.9.3",
|
|
22
|
+
"vite": "~8.1.5",
|
|
23
|
+
"@vscada/builder": "0.0.1",
|
|
24
|
+
"@vscada/primitives": "0.0.1",
|
|
25
|
+
"@vscada/themes": "0.0.1"
|
|
26
|
+
},
|
|
27
|
+
"scripts": {
|
|
28
|
+
"build": "vite build && tsc -b",
|
|
29
|
+
"typecheck": "tsc -b"
|
|
30
|
+
}
|
|
31
|
+
}
|