@nac3/forge-cli 0.2.0-alpha.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/LICENSE +45 -0
- package/README.md +371 -0
- package/dist/bin/yf.d.ts +5 -0
- package/dist/bin/yf.d.ts.map +1 -0
- package/dist/bin/yf.js +86 -0
- package/dist/bin/yf.js.map +1 -0
- package/dist/chat/claude.d.ts +100 -0
- package/dist/chat/claude.d.ts.map +1 -0
- package/dist/chat/claude.js +228 -0
- package/dist/chat/claude.js.map +1 -0
- package/dist/chat/ingest_session.d.ts +97 -0
- package/dist/chat/ingest_session.d.ts.map +1 -0
- package/dist/chat/ingest_session.js +99 -0
- package/dist/chat/ingest_session.js.map +1 -0
- package/dist/chat/panel.d.ts +15 -0
- package/dist/chat/panel.d.ts.map +1 -0
- package/dist/chat/panel.js +1526 -0
- package/dist/chat/panel.js.map +1 -0
- package/dist/chat/persistence.d.ts +37 -0
- package/dist/chat/persistence.d.ts.map +1 -0
- package/dist/chat/persistence.js +91 -0
- package/dist/chat/persistence.js.map +1 -0
- package/dist/chat/server.d.ts +34 -0
- package/dist/chat/server.d.ts.map +1 -0
- package/dist/chat/server.js +1540 -0
- package/dist/chat/server.js.map +1 -0
- package/dist/chat/spec_extract.d.ts +35 -0
- package/dist/chat/spec_extract.d.ts.map +1 -0
- package/dist/chat/spec_extract.js +152 -0
- package/dist/chat/spec_extract.js.map +1 -0
- package/dist/chat/spec_plan.d.ts +65 -0
- package/dist/chat/spec_plan.d.ts.map +1 -0
- package/dist/chat/spec_plan.js +160 -0
- package/dist/chat/spec_plan.js.map +1 -0
- package/dist/chat/spec_scaffold.d.ts +95 -0
- package/dist/chat/spec_scaffold.d.ts.map +1 -0
- package/dist/chat/spec_scaffold.js +220 -0
- package/dist/chat/spec_scaffold.js.map +1 -0
- package/dist/chat/tools/git.d.ts +59 -0
- package/dist/chat/tools/git.d.ts.map +1 -0
- package/dist/chat/tools/git.js +313 -0
- package/dist/chat/tools/git.js.map +1 -0
- package/dist/chat/tools/github.d.ts +59 -0
- package/dist/chat/tools/github.d.ts.map +1 -0
- package/dist/chat/tools/github.js +310 -0
- package/dist/chat/tools/github.js.map +1 -0
- package/dist/chat/tools/lifecycle.d.ts +82 -0
- package/dist/chat/tools/lifecycle.d.ts.map +1 -0
- package/dist/chat/tools/lifecycle.js +295 -0
- package/dist/chat/tools/lifecycle.js.map +1 -0
- package/dist/chat/tools/manual.d.ts +26 -0
- package/dist/chat/tools/manual.d.ts.map +1 -0
- package/dist/chat/tools/manual.js +164 -0
- package/dist/chat/tools/manual.js.map +1 -0
- package/dist/chat/tools/reader.d.ts +80 -0
- package/dist/chat/tools/reader.d.ts.map +1 -0
- package/dist/chat/tools/reader.js +471 -0
- package/dist/chat/tools/reader.js.map +1 -0
- package/dist/chat/tools.d.ts +106 -0
- package/dist/chat/tools.d.ts.map +1 -0
- package/dist/chat/tools.js +587 -0
- package/dist/chat/tools.js.map +1 -0
- package/dist/codegen/e2e.d.ts +106 -0
- package/dist/codegen/e2e.d.ts.map +1 -0
- package/dist/codegen/e2e.js +931 -0
- package/dist/codegen/e2e.js.map +1 -0
- package/dist/codegen/v3_flow_emit.d.ts +70 -0
- package/dist/codegen/v3_flow_emit.d.ts.map +1 -0
- package/dist/codegen/v3_flow_emit.js +225 -0
- package/dist/codegen/v3_flow_emit.js.map +1 -0
- package/dist/commands/_stub.d.ts +2 -0
- package/dist/commands/_stub.d.ts.map +1 -0
- package/dist/commands/_stub.js +21 -0
- package/dist/commands/_stub.js.map +1 -0
- package/dist/commands/app.d.ts +31 -0
- package/dist/commands/app.d.ts.map +1 -0
- package/dist/commands/app.js +331 -0
- package/dist/commands/app.js.map +1 -0
- package/dist/commands/chat.d.ts +18 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +76 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/deploy.d.ts +21 -0
- package/dist/commands/deploy.d.ts.map +1 -0
- package/dist/commands/deploy.js +121 -0
- package/dist/commands/deploy.js.map +1 -0
- package/dist/commands/doctor.d.ts +14 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +280 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/figma.d.ts +32 -0
- package/dist/commands/figma.d.ts.map +1 -0
- package/dist/commands/figma.js +141 -0
- package/dist/commands/figma.js.map +1 -0
- package/dist/commands/gen-flow-tests.d.ts +8 -0
- package/dist/commands/gen-flow-tests.d.ts.map +1 -0
- package/dist/commands/gen-flow-tests.js +78 -0
- package/dist/commands/gen-flow-tests.js.map +1 -0
- package/dist/commands/gen-tests.d.ts +9 -0
- package/dist/commands/gen-tests.d.ts.map +1 -0
- package/dist/commands/gen-tests.js +118 -0
- package/dist/commands/gen-tests.js.map +1 -0
- package/dist/commands/license.d.ts +14 -0
- package/dist/commands/license.d.ts.map +1 -0
- package/dist/commands/license.js +182 -0
- package/dist/commands/license.js.map +1 -0
- package/dist/commands/log.d.ts +19 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +101 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/migrate.d.ts +118 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +1410 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/mobile.d.ts +27 -0
- package/dist/commands/mobile.d.ts.map +1 -0
- package/dist/commands/mobile.js +90 -0
- package/dist/commands/mobile.js.map +1 -0
- package/dist/commands/new.d.ts +32 -0
- package/dist/commands/new.d.ts.map +1 -0
- package/dist/commands/new.js +107 -0
- package/dist/commands/new.js.map +1 -0
- package/dist/commands/pilot.d.ts +8 -0
- package/dist/commands/pilot.d.ts.map +1 -0
- package/dist/commands/pilot.js +104 -0
- package/dist/commands/pilot.js.map +1 -0
- package/dist/commands/projects.d.ts +21 -0
- package/dist/commands/projects.d.ts.map +1 -0
- package/dist/commands/projects.js +238 -0
- package/dist/commands/projects.js.map +1 -0
- package/dist/commands/publish.d.ts +35 -0
- package/dist/commands/publish.d.ts.map +1 -0
- package/dist/commands/publish.js +194 -0
- package/dist/commands/publish.js.map +1 -0
- package/dist/commands/repo.d.ts +59 -0
- package/dist/commands/repo.d.ts.map +1 -0
- package/dist/commands/repo.js +178 -0
- package/dist/commands/repo.js.map +1 -0
- package/dist/commands/review-screens.d.ts +28 -0
- package/dist/commands/review-screens.d.ts.map +1 -0
- package/dist/commands/review-screens.js +345 -0
- package/dist/commands/review-screens.js.map +1 -0
- package/dist/commands/scenarios.d.ts +23 -0
- package/dist/commands/scenarios.d.ts.map +1 -0
- package/dist/commands/scenarios.js +304 -0
- package/dist/commands/scenarios.js.map +1 -0
- package/dist/commands/ship.d.ts +18 -0
- package/dist/commands/ship.d.ts.map +1 -0
- package/dist/commands/ship.js +41 -0
- package/dist/commands/ship.js.map +1 -0
- package/dist/commands/test.d.ts +29 -0
- package/dist/commands/test.d.ts.map +1 -0
- package/dist/commands/test.js +62 -0
- package/dist/commands/test.js.map +1 -0
- package/dist/commands/tunnel.d.ts +22 -0
- package/dist/commands/tunnel.d.ts.map +1 -0
- package/dist/commands/tunnel.js +77 -0
- package/dist/commands/tunnel.js.map +1 -0
- package/dist/commands/validate.d.ts +14 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +51 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/commands/vault.d.ts +32 -0
- package/dist/commands/vault.d.ts.map +1 -0
- package/dist/commands/vault.js +489 -0
- package/dist/commands/vault.js.map +1 -0
- package/dist/commands/voice.d.ts +16 -0
- package/dist/commands/voice.d.ts.map +1 -0
- package/dist/commands/voice.js +69 -0
- package/dist/commands/voice.js.map +1 -0
- package/dist/core/cascade_router.d.ts +90 -0
- package/dist/core/cascade_router.d.ts.map +1 -0
- package/dist/core/cascade_router.js +131 -0
- package/dist/core/cascade_router.js.map +1 -0
- package/dist/core/cf_tunnel.d.ts +52 -0
- package/dist/core/cf_tunnel.d.ts.map +1 -0
- package/dist/core/cf_tunnel.js +134 -0
- package/dist/core/cf_tunnel.js.map +1 -0
- package/dist/core/gha_dispatcher.d.ts +48 -0
- package/dist/core/gha_dispatcher.d.ts.map +1 -0
- package/dist/core/gha_dispatcher.js +198 -0
- package/dist/core/gha_dispatcher.js.map +1 -0
- package/dist/core/logger.d.ts +89 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +245 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/mode.d.ts +26 -0
- package/dist/core/mode.d.ts.map +1 -0
- package/dist/core/mode.js +122 -0
- package/dist/core/mode.js.map +1 -0
- package/dist/core/pairing.d.ts +40 -0
- package/dist/core/pairing.d.ts.map +1 -0
- package/dist/core/pairing.js +145 -0
- package/dist/core/pairing.js.map +1 -0
- package/dist/core/pilot_setup.d.ts +29 -0
- package/dist/core/pilot_setup.d.ts.map +1 -0
- package/dist/core/pilot_setup.js +119 -0
- package/dist/core/pilot_setup.js.map +1 -0
- package/dist/core/polar.d.ts +81 -0
- package/dist/core/polar.d.ts.map +1 -0
- package/dist/core/polar.js +175 -0
- package/dist/core/polar.js.map +1 -0
- package/dist/core/project_picker.d.ts +56 -0
- package/dist/core/project_picker.d.ts.map +1 -0
- package/dist/core/project_picker.js +86 -0
- package/dist/core/project_picker.js.map +1 -0
- package/dist/core/projects.d.ts +58 -0
- package/dist/core/projects.d.ts.map +1 -0
- package/dist/core/projects.js +146 -0
- package/dist/core/projects.js.map +1 -0
- package/dist/core/projects_sync.d.ts +80 -0
- package/dist/core/projects_sync.d.ts.map +1 -0
- package/dist/core/projects_sync.js +278 -0
- package/dist/core/projects_sync.js.map +1 -0
- package/dist/core/remote_runner.d.ts +70 -0
- package/dist/core/remote_runner.d.ts.map +1 -0
- package/dist/core/remote_runner.js +133 -0
- package/dist/core/remote_runner.js.map +1 -0
- package/dist/core/repo_state.d.ts +24 -0
- package/dist/core/repo_state.d.ts.map +1 -0
- package/dist/core/repo_state.js +109 -0
- package/dist/core/repo_state.js.map +1 -0
- package/dist/core/target.d.ts +31 -0
- package/dist/core/target.d.ts.map +1 -0
- package/dist/core/target.js +121 -0
- package/dist/core/target.js.map +1 -0
- package/dist/deploy/aws.d.ts +43 -0
- package/dist/deploy/aws.d.ts.map +1 -0
- package/dist/deploy/aws.js +173 -0
- package/dist/deploy/aws.js.map +1 -0
- package/dist/figma/api.d.ts +35 -0
- package/dist/figma/api.d.ts.map +1 -0
- package/dist/figma/api.js +40 -0
- package/dist/figma/api.js.map +1 -0
- package/dist/figma/decorator.d.ts +74 -0
- package/dist/figma/decorator.d.ts.map +1 -0
- package/dist/figma/decorator.js +210 -0
- package/dist/figma/decorator.js.map +1 -0
- package/dist/figma/heuristics.d.ts +29 -0
- package/dist/figma/heuristics.d.ts.map +1 -0
- package/dist/figma/heuristics.js +110 -0
- package/dist/figma/heuristics.js.map +1 -0
- package/dist/figma/normalize.d.ts +33 -0
- package/dist/figma/normalize.d.ts.map +1 -0
- package/dist/figma/normalize.js +101 -0
- package/dist/figma/normalize.js.map +1 -0
- package/dist/figma/tokens.d.ts +23 -0
- package/dist/figma/tokens.d.ts.map +1 -0
- package/dist/figma/tokens.js +111 -0
- package/dist/figma/tokens.js.map +1 -0
- package/dist/figma/types.d.ts +118 -0
- package/dist/figma/types.d.ts.map +1 -0
- package/dist/figma/types.js +12 -0
- package/dist/figma/types.js.map +1 -0
- package/dist/i18n/index.d.ts +48 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +135 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +52 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +85 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/lan/mdns_packet.d.ts +74 -0
- package/dist/lan/mdns_packet.d.ts.map +1 -0
- package/dist/lan/mdns_packet.js +247 -0
- package/dist/lan/mdns_packet.js.map +1 -0
- package/dist/lan/mdns_service.d.ts +102 -0
- package/dist/lan/mdns_service.d.ts.map +1 -0
- package/dist/lan/mdns_service.js +206 -0
- package/dist/lan/mdns_service.js.map +1 -0
- package/dist/license/activate.d.ts +33 -0
- package/dist/license/activate.d.ts.map +1 -0
- package/dist/license/activate.js +135 -0
- package/dist/license/activate.js.map +1 -0
- package/dist/license/fingerprint.d.ts +2 -0
- package/dist/license/fingerprint.d.ts.map +1 -0
- package/dist/license/fingerprint.js +29 -0
- package/dist/license/fingerprint.js.map +1 -0
- package/dist/license/hito4_client.d.ts +24 -0
- package/dist/license/hito4_client.d.ts.map +1 -0
- package/dist/license/hito4_client.js +103 -0
- package/dist/license/hito4_client.js.map +1 -0
- package/dist/license/index.d.ts +22 -0
- package/dist/license/index.d.ts.map +1 -0
- package/dist/license/index.js +125 -0
- package/dist/license/index.js.map +1 -0
- package/dist/license/types.d.ts +38 -0
- package/dist/license/types.d.ts.map +1 -0
- package/dist/license/types.js +9 -0
- package/dist/license/types.js.map +1 -0
- package/dist/migrate/ai-apply.d.ts +198 -0
- package/dist/migrate/ai-apply.d.ts.map +1 -0
- package/dist/migrate/ai-apply.js +833 -0
- package/dist/migrate/ai-apply.js.map +1 -0
- package/dist/migrate/ai-decorator.d.ts +87 -0
- package/dist/migrate/ai-decorator.d.ts.map +1 -0
- package/dist/migrate/ai-decorator.js +203 -0
- package/dist/migrate/ai-decorator.js.map +1 -0
- package/dist/migrate/apply.d.ts +28 -0
- package/dist/migrate/apply.d.ts.map +1 -0
- package/dist/migrate/apply.js +119 -0
- package/dist/migrate/apply.js.map +1 -0
- package/dist/migrate/audit.d.ts +9 -0
- package/dist/migrate/audit.d.ts.map +1 -0
- package/dist/migrate/audit.js +197 -0
- package/dist/migrate/audit.js.map +1 -0
- package/dist/migrate/diff.d.ts +28 -0
- package/dist/migrate/diff.d.ts.map +1 -0
- package/dist/migrate/diff.js +154 -0
- package/dist/migrate/diff.js.map +1 -0
- package/dist/migrate/html-orchestrator.d.ts +81 -0
- package/dist/migrate/html-orchestrator.d.ts.map +1 -0
- package/dist/migrate/html-orchestrator.js +233 -0
- package/dist/migrate/html-orchestrator.js.map +1 -0
- package/dist/migrate/html-walker.d.ts +93 -0
- package/dist/migrate/html-walker.d.ts.map +1 -0
- package/dist/migrate/html-walker.js +288 -0
- package/dist/migrate/html-walker.js.map +1 -0
- package/dist/migrate/js-template-walker.d.ts +118 -0
- package/dist/migrate/js-template-walker.d.ts.map +1 -0
- package/dist/migrate/js-template-walker.js +644 -0
- package/dist/migrate/js-template-walker.js.map +1 -0
- package/dist/migrate/manifest-validator.d.ts +30 -0
- package/dist/migrate/manifest-validator.d.ts.map +1 -0
- package/dist/migrate/manifest-validator.js +261 -0
- package/dist/migrate/manifest-validator.js.map +1 -0
- package/dist/migrate/overrides.d.ts +58 -0
- package/dist/migrate/overrides.d.ts.map +1 -0
- package/dist/migrate/overrides.js +193 -0
- package/dist/migrate/overrides.js.map +1 -0
- package/dist/migrate/plugin-scope.d.ts +42 -0
- package/dist/migrate/plugin-scope.d.ts.map +1 -0
- package/dist/migrate/plugin-scope.js +94 -0
- package/dist/migrate/plugin-scope.js.map +1 -0
- package/dist/migrate/types.d.ts +45 -0
- package/dist/migrate/types.d.ts.map +1 -0
- package/dist/migrate/types.js +9 -0
- package/dist/migrate/types.js.map +1 -0
- package/dist/migrate/verb-inference.d.ts +37 -0
- package/dist/migrate/verb-inference.d.ts.map +1 -0
- package/dist/migrate/verb-inference.js +274 -0
- package/dist/migrate/verb-inference.js.map +1 -0
- package/dist/nac3/attrs.d.ts +87 -0
- package/dist/nac3/attrs.d.ts.map +1 -0
- package/dist/nac3/attrs.js +134 -0
- package/dist/nac3/attrs.js.map +1 -0
- package/dist/nac3/scenario_dsl.d.ts +71 -0
- package/dist/nac3/scenario_dsl.d.ts.map +1 -0
- package/dist/nac3/scenario_dsl.js +191 -0
- package/dist/nac3/scenario_dsl.js.map +1 -0
- package/dist/nac3/tokens.d.ts +126 -0
- package/dist/nac3/tokens.d.ts.map +1 -0
- package/dist/nac3/tokens.js +138 -0
- package/dist/nac3/tokens.js.map +1 -0
- package/dist/reader/parsers/csv.d.ts +42 -0
- package/dist/reader/parsers/csv.d.ts.map +1 -0
- package/dist/reader/parsers/csv.js +221 -0
- package/dist/reader/parsers/csv.js.map +1 -0
- package/dist/reader/parsers/docx.d.ts +31 -0
- package/dist/reader/parsers/docx.d.ts.map +1 -0
- package/dist/reader/parsers/docx.js +51 -0
- package/dist/reader/parsers/docx.js.map +1 -0
- package/dist/reader/parsers/epub.d.ts +39 -0
- package/dist/reader/parsers/epub.d.ts.map +1 -0
- package/dist/reader/parsers/epub.js +265 -0
- package/dist/reader/parsers/epub.js.map +1 -0
- package/dist/reader/parsers/html.d.ts +40 -0
- package/dist/reader/parsers/html.d.ts.map +1 -0
- package/dist/reader/parsers/html.js +386 -0
- package/dist/reader/parsers/html.js.map +1 -0
- package/dist/reader/parsers/md.d.ts +30 -0
- package/dist/reader/parsers/md.d.ts.map +1 -0
- package/dist/reader/parsers/md.js +199 -0
- package/dist/reader/parsers/md.js.map +1 -0
- package/dist/reader/parsers/pdf.d.ts +39 -0
- package/dist/reader/parsers/pdf.d.ts.map +1 -0
- package/dist/reader/parsers/pdf.js +220 -0
- package/dist/reader/parsers/pdf.js.map +1 -0
- package/dist/reader/parsers/rtf.d.ts +37 -0
- package/dist/reader/parsers/rtf.d.ts.map +1 -0
- package/dist/reader/parsers/rtf.js +347 -0
- package/dist/reader/parsers/rtf.js.map +1 -0
- package/dist/reader/parsers/source.d.ts +32 -0
- package/dist/reader/parsers/source.d.ts.map +1 -0
- package/dist/reader/parsers/source.js +122 -0
- package/dist/reader/parsers/source.js.map +1 -0
- package/dist/reader/parsers/txt.d.ts +25 -0
- package/dist/reader/parsers/txt.d.ts.map +1 -0
- package/dist/reader/parsers/txt.js +56 -0
- package/dist/reader/parsers/txt.js.map +1 -0
- package/dist/reader/parsers/xlsx.d.ts +33 -0
- package/dist/reader/parsers/xlsx.d.ts.map +1 -0
- package/dist/reader/parsers/xlsx.js +143 -0
- package/dist/reader/parsers/xlsx.js.map +1 -0
- package/dist/reader/registry.d.ts +39 -0
- package/dist/reader/registry.d.ts.map +1 -0
- package/dist/reader/registry.js +172 -0
- package/dist/reader/registry.js.map +1 -0
- package/dist/reader/search.d.ts +27 -0
- package/dist/reader/search.d.ts.map +1 -0
- package/dist/reader/search.js +77 -0
- package/dist/reader/search.js.map +1 -0
- package/dist/reader/state.d.ts +56 -0
- package/dist/reader/state.d.ts.map +1 -0
- package/dist/reader/state.js +179 -0
- package/dist/reader/state.js.map +1 -0
- package/dist/reader/types.d.ts +119 -0
- package/dist/reader/types.d.ts.map +1 -0
- package/dist/reader/types.js +23 -0
- package/dist/reader/types.js.map +1 -0
- package/dist/ship/run.d.ts +26 -0
- package/dist/ship/run.d.ts.map +1 -0
- package/dist/ship/run.js +123 -0
- package/dist/ship/run.js.map +1 -0
- package/dist/template/index.d.ts +50 -0
- package/dist/template/index.d.ts.map +1 -0
- package/dist/template/index.js +140 -0
- package/dist/template/index.js.map +1 -0
- package/dist/ui/colors.d.ts +13 -0
- package/dist/ui/colors.d.ts.map +1 -0
- package/dist/ui/colors.js +26 -0
- package/dist/ui/colors.js.map +1 -0
- package/dist/validate/index.d.ts +19 -0
- package/dist/validate/index.d.ts.map +1 -0
- package/dist/validate/index.js +181 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/vault/catalog.d.ts +55 -0
- package/dist/vault/catalog.d.ts.map +1 -0
- package/dist/vault/catalog.js +424 -0
- package/dist/vault/catalog.js.map +1 -0
- package/dist/vault/crypto.d.ts +82 -0
- package/dist/vault/crypto.d.ts.map +1 -0
- package/dist/vault/crypto.js +173 -0
- package/dist/vault/crypto.js.map +1 -0
- package/dist/vault/git_askpass.d.ts +26 -0
- package/dist/vault/git_askpass.d.ts.map +1 -0
- package/dist/vault/git_askpass.js +104 -0
- package/dist/vault/git_askpass.js.map +1 -0
- package/dist/vault/migrator.d.ts +57 -0
- package/dist/vault/migrator.d.ts.map +1 -0
- package/dist/vault/migrator.js +204 -0
- package/dist/vault/migrator.js.map +1 -0
- package/dist/vault/redactor.d.ts +73 -0
- package/dist/vault/redactor.d.ts.map +1 -0
- package/dist/vault/redactor.js +182 -0
- package/dist/vault/redactor.js.map +1 -0
- package/dist/vault/store.d.ts +132 -0
- package/dist/vault/store.d.ts.map +1 -0
- package/dist/vault/store.js +335 -0
- package/dist/vault/store.js.map +1 -0
- package/dist/version.d.ts +8 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +8 -0
- package/dist/version.js.map +1 -0
- package/dist/voice/chunker.d.ts +43 -0
- package/dist/voice/chunker.d.ts.map +1 -0
- package/dist/voice/chunker.js +133 -0
- package/dist/voice/chunker.js.map +1 -0
- package/dist/voice/config.d.ts +14 -0
- package/dist/voice/config.d.ts.map +1 -0
- package/dist/voice/config.js +51 -0
- package/dist/voice/config.js.map +1 -0
- package/dist/voice/intents.d.ts +71 -0
- package/dist/voice/intents.d.ts.map +1 -0
- package/dist/voice/intents.js +0 -0
- package/dist/voice/intents.js.map +1 -0
- package/dist/voice/providers/elevenlabs.d.ts +53 -0
- package/dist/voice/providers/elevenlabs.d.ts.map +1 -0
- package/dist/voice/providers/elevenlabs.js +159 -0
- package/dist/voice/providers/elevenlabs.js.map +1 -0
- package/dist/voice/providers/google.d.ts +56 -0
- package/dist/voice/providers/google.d.ts.map +1 -0
- package/dist/voice/providers/google.js +253 -0
- package/dist/voice/providers/google.js.map +1 -0
- package/dist/voice/providers/whisper.d.ts +44 -0
- package/dist/voice/providers/whisper.d.ts.map +1 -0
- package/dist/voice/providers/whisper.js +179 -0
- package/dist/voice/providers/whisper.js.map +1 -0
- package/dist/voice/registry.d.ts +35 -0
- package/dist/voice/registry.d.ts.map +1 -0
- package/dist/voice/registry.js +48 -0
- package/dist/voice/registry.js.map +1 -0
- package/dist/voice/router.d.ts +62 -0
- package/dist/voice/router.d.ts.map +1 -0
- package/dist/voice/router.js +175 -0
- package/dist/voice/router.js.map +1 -0
- package/dist/voice/types.d.ts +116 -0
- package/dist/voice/types.d.ts.map +1 -0
- package/dist/voice/types.js +22 -0
- package/dist/voice/types.js.map +1 -0
- package/dist/voice/voiceprint/enrollment.d.ts +36 -0
- package/dist/voice/voiceprint/enrollment.d.ts.map +1 -0
- package/dist/voice/voiceprint/enrollment.js +71 -0
- package/dist/voice/voiceprint/enrollment.js.map +1 -0
- package/dist/voice/voiceprint/identify.d.ts +16 -0
- package/dist/voice/voiceprint/identify.d.ts.map +1 -0
- package/dist/voice/voiceprint/identify.js +20 -0
- package/dist/voice/voiceprint/identify.js.map +1 -0
- package/dist/voice/voiceprint/liveness.d.ts +90 -0
- package/dist/voice/voiceprint/liveness.d.ts.map +1 -0
- package/dist/voice/voiceprint/liveness.js +251 -0
- package/dist/voice/voiceprint/liveness.js.map +1 -0
- package/dist/voice/voiceprint/match.d.ts +54 -0
- package/dist/voice/voiceprint/match.d.ts.map +1 -0
- package/dist/voice/voiceprint/match.js +88 -0
- package/dist/voice/voiceprint/match.js.map +1 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts +44 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.d.ts.map +1 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.js +92 -0
- package/dist/voice/voiceprint/providers/local-mfcc-stub.js.map +1 -0
- package/dist/voice/voiceprint/store.d.ts +60 -0
- package/dist/voice/voiceprint/store.d.ts.map +1 -0
- package/dist/voice/voiceprint/store.js +155 -0
- package/dist/voice/voiceprint/store.js.map +1 -0
- package/dist/voice/voiceprint/trust.d.ts +90 -0
- package/dist/voice/voiceprint/trust.d.ts.map +1 -0
- package/dist/voice/voiceprint/trust.js +150 -0
- package/dist/voice/voiceprint/trust.js.map +1 -0
- package/dist/voice/voiceprint/types.d.ts +100 -0
- package/dist/voice/voiceprint/types.d.ts.map +1 -0
- package/dist/voice/voiceprint/types.js +23 -0
- package/dist/voice/voiceprint/types.js.map +1 -0
- package/dist/voice/wake.d.ts +64 -0
- package/dist/voice/wake.d.ts.map +1 -0
- package/dist/voice/wake.js +143 -0
- package/dist/voice/wake.js.map +1 -0
- package/docs/manuals/manual.ar.html +91 -0
- package/docs/manuals/manual.de.html +100 -0
- package/docs/manuals/manual.en.html +118 -0
- package/docs/manuals/manual.es.html +120 -0
- package/docs/manuals/manual.fr.html +102 -0
- package/docs/manuals/manual.hi.html +93 -0
- package/docs/manuals/manual.it.html +93 -0
- package/docs/manuals/manual.ja.html +97 -0
- package/docs/manuals/manual.pt.html +103 -0
- package/docs/manuals/manual.zh.html +89 -0
- package/package.json +94 -0
- package/src/i18n/catalogs/ar.json +86 -0
- package/src/i18n/catalogs/de.json +86 -0
- package/src/i18n/catalogs/en.json +86 -0
- package/src/i18n/catalogs/es.json +86 -0
- package/src/i18n/catalogs/fr.json +86 -0
- package/src/i18n/catalogs/hi.json +86 -0
- package/src/i18n/catalogs/it.json +86 -0
- package/src/i18n/catalogs/ja.json +86 -0
- package/src/i18n/catalogs/pt.json +86 -0
- package/src/i18n/catalogs/zh.json +86 -0
- package/templates/react-app/README.md +43 -0
- package/templates/react-app/index.html +12 -0
- package/templates/react-app/package.json +35 -0
- package/templates/react-app/src/App.tsx +106 -0
- package/templates/react-app/src/main.tsx +21 -0
- package/templates/react-app/src/nac/manifest.ts +46 -0
- package/templates/react-app/src/styles.css +68 -0
- package/templates/react-app/tsconfig.json +19 -0
- package/templates/react-app/vite.config.ts +12 -0
- package/templates/react-app/yujin.forge.json +15 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NAC-3 cross-target a11y / E2E attribute helper (PLAN sec
|
|
3
|
+
* D2, NAC3.2).
|
|
4
|
+
*
|
|
5
|
+
* Single namespace `yujin.<scenario>.<element>` that maps to
|
|
6
|
+
* either web HTML `data-nac-id` (+ aria-* mirrors) or RN
|
|
7
|
+
* `testID` (+ accessibility* mirrors). The same scenario YAML
|
|
8
|
+
* (NAC3.4) can drive both Playwright and Maestro because the
|
|
9
|
+
* selectors are identical.
|
|
10
|
+
*
|
|
11
|
+
* Public API:
|
|
12
|
+
* nacId('login.submit') -> 'yujin.login.submit'
|
|
13
|
+
* webAttrs(nacId, role?, action?) -> object with data-nac-*
|
|
14
|
+
* rnAttrs(nacId, role?, action?) -> object with testID +
|
|
15
|
+
* accessibility* mirrors
|
|
16
|
+
*
|
|
17
|
+
* On the web side, `webAttrs` returns an object Hugo / React /
|
|
18
|
+
* vanilla can spread into a JSX/HTML element. The helper does
|
|
19
|
+
* NOT emit raw HTML attributes; the caller decides how to
|
|
20
|
+
* apply (e.g. via a string template `data-nac-id="${id}"`).
|
|
21
|
+
*
|
|
22
|
+
* Roles are aligned with WAI-ARIA roles where possible
|
|
23
|
+
* (button, link, navigation, dialog, etc). Actions are
|
|
24
|
+
* verbs that NAC-3 dispatch can interpret (submit, open,
|
|
25
|
+
* close, toggle, navigate, etc).
|
|
26
|
+
*
|
|
27
|
+
* ASCII-only.
|
|
28
|
+
*/
|
|
29
|
+
/* The set of stable NAC-3 attribute names. */
|
|
30
|
+
export const NAC_ATTR_ID = 'data-nac-id';
|
|
31
|
+
export const NAC_ATTR_ROLE = 'data-nac-role';
|
|
32
|
+
export const NAC_ATTR_ACTION = 'data-nac-action';
|
|
33
|
+
/** NAC-3 IDs follow the shape `yujin.<scenario>.<element>`.
|
|
34
|
+
* Scenarios + elements are lowercase tokens, with hyphens
|
|
35
|
+
* allowed. Dots delimit. The prefix `yujin.` is reserved. */
|
|
36
|
+
const ID_RE = /^[a-z][a-z0-9-]*(\.[a-z0-9][a-z0-9-]*)*$/;
|
|
37
|
+
/**
|
|
38
|
+
* Normalise a NAC ID. Accepts the long form
|
|
39
|
+
* `yujin.scenario.element` or the short `scenario.element`;
|
|
40
|
+
* always returns the long form with the `yujin.` prefix.
|
|
41
|
+
*
|
|
42
|
+
* Validates the shape loudly so callers see typos early.
|
|
43
|
+
*/
|
|
44
|
+
export function nacId(id) {
|
|
45
|
+
if (typeof id !== 'string' || id.length === 0) {
|
|
46
|
+
throw new Error('nacId: id must be a non-empty string');
|
|
47
|
+
}
|
|
48
|
+
let canonical = id;
|
|
49
|
+
if (!canonical.startsWith('yujin.'))
|
|
50
|
+
canonical = 'yujin.' + canonical;
|
|
51
|
+
if (!ID_RE.test(canonical)) {
|
|
52
|
+
throw new Error('nacId: invalid id "' + id + '". '
|
|
53
|
+
+ 'Must match `yujin.<scenario>.<element>` with lowercase tokens, '
|
|
54
|
+
+ 'digits, and hyphens (dot-separated).');
|
|
55
|
+
}
|
|
56
|
+
return canonical;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build a web attribute object that can be flattened into an
|
|
60
|
+
* HTML element. Example:
|
|
61
|
+
*
|
|
62
|
+
* const a = webAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
|
|
63
|
+
* => {
|
|
64
|
+
* 'data-nac-id': 'yujin.login.submit',
|
|
65
|
+
* 'data-nac-role': 'button',
|
|
66
|
+
* 'data-nac-action': 'submit',
|
|
67
|
+
* 'aria-label': 'Sign in',
|
|
68
|
+
* }
|
|
69
|
+
*/
|
|
70
|
+
export function webAttrs(id, opts = {}) {
|
|
71
|
+
const out = {
|
|
72
|
+
[NAC_ATTR_ID]: nacId(id),
|
|
73
|
+
};
|
|
74
|
+
if (opts.role)
|
|
75
|
+
out[NAC_ATTR_ROLE] = opts.role;
|
|
76
|
+
if (opts.action)
|
|
77
|
+
out[NAC_ATTR_ACTION] = opts.action;
|
|
78
|
+
if (opts.label)
|
|
79
|
+
out['aria-label'] = opts.label;
|
|
80
|
+
if (opts.hint)
|
|
81
|
+
out['aria-describedby'] = opts.hint;
|
|
82
|
+
return out;
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* Render a web attribute object as an HTML attribute string,
|
|
86
|
+
* ready to interpolate into a template. Each value is
|
|
87
|
+
* HTML-escaped (the same escapeHtml the panel uses).
|
|
88
|
+
*
|
|
89
|
+
* `<button ${webAttrsHtml('login.submit', {role:'button'})}>`
|
|
90
|
+
* => '<button data-nac-id="yujin.login.submit" data-nac-role="button">'
|
|
91
|
+
*/
|
|
92
|
+
export function webAttrsHtml(id, opts = {}) {
|
|
93
|
+
const obj = webAttrs(id, opts);
|
|
94
|
+
return Object.entries(obj)
|
|
95
|
+
.map(([k, v]) => k + '="' + escapeAttr(v) + '"')
|
|
96
|
+
.join(' ');
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Build an RN attribute object. RN uses different prop names
|
|
100
|
+
* for the same concepts:
|
|
101
|
+
*
|
|
102
|
+
* const a = rnAttrs('login.submit', { role: 'button', action: 'submit', label: 'Sign in' });
|
|
103
|
+
* => {
|
|
104
|
+
* testID: 'yujin.login.submit',
|
|
105
|
+
* accessibilityRole: 'button',
|
|
106
|
+
* accessibilityHint: 'submit',
|
|
107
|
+
* accessibilityLabel: 'Sign in',
|
|
108
|
+
* }
|
|
109
|
+
*
|
|
110
|
+
* Spread into the JSX of a `<Pressable>`, `<TextInput>`, etc.
|
|
111
|
+
*/
|
|
112
|
+
export function rnAttrs(id, opts = {}) {
|
|
113
|
+
const out = {
|
|
114
|
+
testID: nacId(id),
|
|
115
|
+
};
|
|
116
|
+
if (opts.role)
|
|
117
|
+
out.accessibilityRole = opts.role;
|
|
118
|
+
if (opts.action)
|
|
119
|
+
out.accessibilityHint = opts.action;
|
|
120
|
+
if (opts.label)
|
|
121
|
+
out.accessibilityLabel = opts.label;
|
|
122
|
+
return out;
|
|
123
|
+
}
|
|
124
|
+
/** Tight HTML attribute escape (covers " and & + < > for
|
|
125
|
+
* defence-in-depth). Mirrors the escapeHtml used by panel.ts
|
|
126
|
+
* but is local so this module is self-contained. */
|
|
127
|
+
function escapeAttr(s) {
|
|
128
|
+
return String(s)
|
|
129
|
+
.replace(/&/g, '&')
|
|
130
|
+
.replace(/"/g, '"')
|
|
131
|
+
.replace(/</g, '<')
|
|
132
|
+
.replace(/>/g, '>');
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=attrs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attrs.js","sourceRoot":"","sources":["../../src/nac3/attrs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,8CAA8C;AAC9C,MAAM,CAAC,MAAM,WAAW,GAAO,aAAa,CAAC;AAC7C,MAAM,CAAC,MAAM,aAAa,GAAK,eAAe,CAAC;AAC/C,MAAM,CAAC,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAEjD;;8DAE8D;AAC9D,MAAM,KAAK,GAAG,0CAA0C,CAAC;AAEzD;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,EAAU;IAC9B,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9C,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;IAC1D,CAAC;IACD,IAAI,SAAS,GAAG,EAAE,CAAC;IACnB,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACtE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,qBAAqB,GAAG,EAAE,GAAG,KAAK;cAChC,iEAAiE;cACjE,sCAAsC,CACzC,CAAC;IACJ,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAaD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,QAAQ,CAAC,EAAU,EAAE,OAAmB,EAAE;IACxD,MAAM,GAAG,GAA2B;QAClC,CAAC,WAAW,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;KACzB,CAAC;IACF,IAAI,IAAI,CAAC,IAAI;QAAI,GAAG,CAAC,aAAa,CAAC,GAAK,IAAI,CAAC,IAAI,CAAC;IAClD,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC;IACpD,IAAI,IAAI,CAAC,KAAK;QAAG,GAAG,CAAC,YAAY,CAAC,GAAM,IAAI,CAAC,KAAK,CAAC;IACnD,IAAI,IAAI,CAAC,IAAI;QAAI,GAAG,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,YAAY,CAAC,EAAU,EAAE,OAAmB,EAAE;IAC5D,MAAM,GAAG,GAAG,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC/B,OAAO,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;SACvB,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;SAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,MAAM,UAAU,OAAO,CAAC,EAAU,EAAE,OAAmB,EAAE;IACvD,MAAM,GAAG,GAA2B;QAClC,MAAM,EAAE,KAAK,CAAC,EAAE,CAAC;KAClB,CAAC;IACF,IAAI,IAAI,CAAC,IAAI;QAAI,GAAG,CAAC,iBAAiB,GAAI,IAAI,CAAC,IAAI,CAAC;IACpD,IAAI,IAAI,CAAC,MAAM;QAAE,GAAG,CAAC,iBAAiB,GAAI,IAAI,CAAC,MAAM,CAAC;IACtD,IAAI,IAAI,CAAC,KAAK;QAAG,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAC,KAAK,CAAC;IACrD,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;qDAEqD;AACrD,SAAS,UAAU,CAAC,CAAS;IAC3B,OAAO,MAAM,CAAC,CAAC,CAAC;SACb,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NAC-3 cross-runner scenario DSL (PLAN sec D3, NAC3.4).
|
|
3
|
+
*
|
|
4
|
+
* Authored once in `tests/scenarios/*.yujin.yaml`; emitted as
|
|
5
|
+
* 1. Playwright TS specs (web target)
|
|
6
|
+
* 2. Maestro YAML flow files (RN target)
|
|
7
|
+
*
|
|
8
|
+
* The same scenario thus runs against the web panel AND the
|
|
9
|
+
* Forge-generated RN app -- paridad estricta (D11).
|
|
10
|
+
*
|
|
11
|
+
* DSL shape (a Scenario):
|
|
12
|
+
*
|
|
13
|
+
* name: string -- human-readable scenario title
|
|
14
|
+
* url: string? -- web base URL (defaults to env)
|
|
15
|
+
* tags: string[]? -- categories (smoke, regression, ...)
|
|
16
|
+
* stubs: Stub[]? -- network mocks
|
|
17
|
+
* flow: Step[] -- sequential actions
|
|
18
|
+
*
|
|
19
|
+
* Step shapes:
|
|
20
|
+
* { tap: '<nacId>' }
|
|
21
|
+
* { typeText: '...', into: '<nacId>' }
|
|
22
|
+
* { assertVisible: '<nacId>' }
|
|
23
|
+
* { assertHidden: '<nacId>' }
|
|
24
|
+
* { assertText: '...', in: '<nacId>' }
|
|
25
|
+
* { waitMs: 250 }
|
|
26
|
+
* { screenshot: 'scenario-step-name' }
|
|
27
|
+
*
|
|
28
|
+
* Both emitters honour the SAME selector convention:
|
|
29
|
+
* Playwright: page.getByTestId('yujin.<scenario>.<el>') --
|
|
30
|
+
* applies to both data-nac-id and testID
|
|
31
|
+
* without runtime cost (Playwright reads
|
|
32
|
+
* testIdAttribute config which we set to
|
|
33
|
+
* 'data-nac-id' at the spec generator level).
|
|
34
|
+
* Maestro: id: 'yujin.<scenario>.<el>'
|
|
35
|
+
*
|
|
36
|
+
* ASCII-only on the source.
|
|
37
|
+
*/
|
|
38
|
+
export interface Stub {
|
|
39
|
+
url: string;
|
|
40
|
+
method?: 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH';
|
|
41
|
+
status?: number;
|
|
42
|
+
contentType?: string;
|
|
43
|
+
response: unknown;
|
|
44
|
+
}
|
|
45
|
+
export type Step = {
|
|
46
|
+
tap: string;
|
|
47
|
+
} | {
|
|
48
|
+
typeText: string;
|
|
49
|
+
into: string;
|
|
50
|
+
} | {
|
|
51
|
+
assertVisible: string;
|
|
52
|
+
} | {
|
|
53
|
+
assertHidden: string;
|
|
54
|
+
} | {
|
|
55
|
+
assertText: string;
|
|
56
|
+
in: string;
|
|
57
|
+
} | {
|
|
58
|
+
waitMs: number;
|
|
59
|
+
} | {
|
|
60
|
+
screenshot: string;
|
|
61
|
+
};
|
|
62
|
+
export interface Scenario {
|
|
63
|
+
name: string;
|
|
64
|
+
url?: string;
|
|
65
|
+
tags?: readonly string[];
|
|
66
|
+
stubs?: readonly Stub[];
|
|
67
|
+
flow: readonly Step[];
|
|
68
|
+
}
|
|
69
|
+
export declare function emitPlaywright(scenario: Scenario): string;
|
|
70
|
+
export declare function emitMaestro(scenario: Scenario): string;
|
|
71
|
+
//# sourceMappingURL=scenario_dsl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario_dsl.d.ts","sourceRoot":"","sources":["../../src/nac3/scenario_dsl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,MAAM,WAAW,IAAI;IACnB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,QAAQ,GAAG,OAAO,CAAC;IACrD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,MAAM,IAAI,GACZ;IAAE,GAAG,EAAY,MAAM,CAAA;CAAE,GACzB;IAAE,QAAQ,EAAO,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GACvC;IAAE,aAAa,EAAE,MAAM,CAAA;CAAE,GACzB;IAAE,YAAY,EAAG,MAAM,CAAA;CAAE,GACzB;IAAE,UAAU,EAAK,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,MAAM,EAAS,MAAM,CAAA;CAAE,GACzB;IAAE,UAAU,EAAK,MAAM,CAAA;CAAE,CAAC;AAE9B,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAK,MAAM,CAAC;IAChB,GAAG,CAAC,EAAK,MAAM,CAAC;IAChB,IAAI,CAAC,EAAI,SAAS,MAAM,EAAE,CAAC;IAC3B,KAAK,CAAC,EAAG,SAAS,IAAI,EAAE,CAAC;IACzB,IAAI,EAAK,SAAS,IAAI,EAAE,CAAC;CAC1B;AAMD,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAqCzD;AAuCD,wBAAgB,WAAW,CAAC,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAuBtD"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NAC-3 cross-runner scenario DSL (PLAN sec D3, NAC3.4).
|
|
3
|
+
*
|
|
4
|
+
* Authored once in `tests/scenarios/*.yujin.yaml`; emitted as
|
|
5
|
+
* 1. Playwright TS specs (web target)
|
|
6
|
+
* 2. Maestro YAML flow files (RN target)
|
|
7
|
+
*
|
|
8
|
+
* The same scenario thus runs against the web panel AND the
|
|
9
|
+
* Forge-generated RN app -- paridad estricta (D11).
|
|
10
|
+
*
|
|
11
|
+
* DSL shape (a Scenario):
|
|
12
|
+
*
|
|
13
|
+
* name: string -- human-readable scenario title
|
|
14
|
+
* url: string? -- web base URL (defaults to env)
|
|
15
|
+
* tags: string[]? -- categories (smoke, regression, ...)
|
|
16
|
+
* stubs: Stub[]? -- network mocks
|
|
17
|
+
* flow: Step[] -- sequential actions
|
|
18
|
+
*
|
|
19
|
+
* Step shapes:
|
|
20
|
+
* { tap: '<nacId>' }
|
|
21
|
+
* { typeText: '...', into: '<nacId>' }
|
|
22
|
+
* { assertVisible: '<nacId>' }
|
|
23
|
+
* { assertHidden: '<nacId>' }
|
|
24
|
+
* { assertText: '...', in: '<nacId>' }
|
|
25
|
+
* { waitMs: 250 }
|
|
26
|
+
* { screenshot: 'scenario-step-name' }
|
|
27
|
+
*
|
|
28
|
+
* Both emitters honour the SAME selector convention:
|
|
29
|
+
* Playwright: page.getByTestId('yujin.<scenario>.<el>') --
|
|
30
|
+
* applies to both data-nac-id and testID
|
|
31
|
+
* without runtime cost (Playwright reads
|
|
32
|
+
* testIdAttribute config which we set to
|
|
33
|
+
* 'data-nac-id' at the spec generator level).
|
|
34
|
+
* Maestro: id: 'yujin.<scenario>.<el>'
|
|
35
|
+
*
|
|
36
|
+
* ASCII-only on the source.
|
|
37
|
+
*/
|
|
38
|
+
/* ============================================================
|
|
39
|
+
* Playwright emitter (web target)
|
|
40
|
+
* ============================================================ */
|
|
41
|
+
export function emitPlaywright(scenario) {
|
|
42
|
+
const lines = [];
|
|
43
|
+
lines.push("/* AUTOGENERATED from tests/scenarios/" + slugify(scenario.name) + ".yujin.yaml. DO NOT EDIT BY HAND. */");
|
|
44
|
+
lines.push("import { test, expect } from '@playwright/test';");
|
|
45
|
+
lines.push("");
|
|
46
|
+
lines.push("test.describe.configure({ mode: 'serial' });");
|
|
47
|
+
lines.push("");
|
|
48
|
+
lines.push("test(" + jsString(scenario.name) + ", async ({ page }) => {");
|
|
49
|
+
/* Network stubs first (so they apply to the goto). */
|
|
50
|
+
if (scenario.stubs) {
|
|
51
|
+
for (const stub of scenario.stubs) {
|
|
52
|
+
const status = stub.status ?? 200;
|
|
53
|
+
const contentType = stub.contentType ?? 'application/json';
|
|
54
|
+
const body = typeof stub.response === 'string'
|
|
55
|
+
? jsString(stub.response)
|
|
56
|
+
: 'JSON.stringify(' + JSON.stringify(stub.response) + ')';
|
|
57
|
+
lines.push(' await page.route(' + jsString(stub.url) + ', (route) => route.fulfill({');
|
|
58
|
+
lines.push(' status: ' + status + ',');
|
|
59
|
+
lines.push(' headers: { "content-type": ' + jsString(contentType) + ' },');
|
|
60
|
+
lines.push(' body: ' + body + ',');
|
|
61
|
+
lines.push(' }));');
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/* Navigate. */
|
|
65
|
+
const baseUrl = scenario.url ?? 'http://127.0.0.1:4849/';
|
|
66
|
+
lines.push(' await page.goto(' + jsString(baseUrl) + ', { waitUntil: "networkidle" });');
|
|
67
|
+
/* Steps. */
|
|
68
|
+
for (const step of scenario.flow) {
|
|
69
|
+
lines.push(' ' + emitPlaywrightStep(step, scenario.name));
|
|
70
|
+
}
|
|
71
|
+
lines.push('});');
|
|
72
|
+
lines.push('');
|
|
73
|
+
return lines.join('\n');
|
|
74
|
+
}
|
|
75
|
+
function emitPlaywrightStep(step, scenarioName) {
|
|
76
|
+
if ('tap' in step) {
|
|
77
|
+
return 'await page.getByTestId(' + jsString(canonicaliseId(step.tap)) + ').click();';
|
|
78
|
+
}
|
|
79
|
+
if ('typeText' in step) {
|
|
80
|
+
return 'await page.getByTestId(' + jsString(canonicaliseId(step.into))
|
|
81
|
+
+ ').fill(' + jsString(step.typeText) + ');';
|
|
82
|
+
}
|
|
83
|
+
if ('assertVisible' in step) {
|
|
84
|
+
return 'await expect(page.getByTestId(' + jsString(canonicaliseId(step.assertVisible))
|
|
85
|
+
+ ')).toBeVisible();';
|
|
86
|
+
}
|
|
87
|
+
if ('assertHidden' in step) {
|
|
88
|
+
return 'await expect(page.getByTestId(' + jsString(canonicaliseId(step.assertHidden))
|
|
89
|
+
+ ')).toBeHidden();';
|
|
90
|
+
}
|
|
91
|
+
if ('assertText' in step) {
|
|
92
|
+
return 'await expect(page.getByTestId(' + jsString(canonicaliseId(step.in))
|
|
93
|
+
+ ')).toContainText(' + jsString(step.assertText) + ');';
|
|
94
|
+
}
|
|
95
|
+
if ('waitMs' in step) {
|
|
96
|
+
return 'await page.waitForTimeout(' + step.waitMs + ');';
|
|
97
|
+
}
|
|
98
|
+
if ('screenshot' in step) {
|
|
99
|
+
const safe = step.screenshot.replace(/[^a-zA-Z0-9-_]/g, '-');
|
|
100
|
+
return 'await page.screenshot({ path: '
|
|
101
|
+
+ jsString('tests/visual/evidence/' + slugify(scenarioName) + '/' + safe + '.png')
|
|
102
|
+
+ ', fullPage: true });';
|
|
103
|
+
}
|
|
104
|
+
/* Should be unreachable -- TypeScript narrows the union. */
|
|
105
|
+
throw new Error('emitPlaywrightStep: unknown step shape: ' + JSON.stringify(step));
|
|
106
|
+
}
|
|
107
|
+
/* ============================================================
|
|
108
|
+
* Maestro emitter (RN target)
|
|
109
|
+
* ============================================================ */
|
|
110
|
+
export function emitMaestro(scenario) {
|
|
111
|
+
const lines = [];
|
|
112
|
+
lines.push("# AUTOGENERATED from tests/scenarios/" + slugify(scenario.name) + ".yujin.yaml. DO NOT EDIT BY HAND.");
|
|
113
|
+
lines.push("# " + scenario.name);
|
|
114
|
+
lines.push("appId: app.yujin.forge");
|
|
115
|
+
/* Maestro does not support generic HTTP stubs natively;
|
|
116
|
+
* we emit a marker comment so the dev knows to wire a
|
|
117
|
+
* MockableHttpClient handler (NAC3.4 deliverable D4). */
|
|
118
|
+
if (scenario.stubs && scenario.stubs.length > 0) {
|
|
119
|
+
lines.push('# Stubs declared (consumed by MockableHttpClient):');
|
|
120
|
+
for (const stub of scenario.stubs) {
|
|
121
|
+
lines.push('# ' + (stub.method ?? 'GET') + ' ' + stub.url + ' -> ' + (stub.status ?? 200));
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
lines.push('---');
|
|
125
|
+
/* Launch the app. */
|
|
126
|
+
lines.push('- launchApp');
|
|
127
|
+
for (const step of scenario.flow) {
|
|
128
|
+
const block = emitMaestroStep(step, scenario.name);
|
|
129
|
+
for (const line of block)
|
|
130
|
+
lines.push(line);
|
|
131
|
+
}
|
|
132
|
+
return lines.join('\n') + '\n';
|
|
133
|
+
}
|
|
134
|
+
function emitMaestroStep(step, scenarioName) {
|
|
135
|
+
if ('tap' in step) {
|
|
136
|
+
return ['- tapOn:', ' id: ' + canonicaliseId(step.tap)];
|
|
137
|
+
}
|
|
138
|
+
if ('typeText' in step) {
|
|
139
|
+
return [
|
|
140
|
+
'- tapOn:', ' id: ' + canonicaliseId(step.into),
|
|
141
|
+
'- inputText: ' + maestroString(step.typeText),
|
|
142
|
+
];
|
|
143
|
+
}
|
|
144
|
+
if ('assertVisible' in step) {
|
|
145
|
+
return ['- assertVisible:', ' id: ' + canonicaliseId(step.assertVisible)];
|
|
146
|
+
}
|
|
147
|
+
if ('assertHidden' in step) {
|
|
148
|
+
return ['- assertNotVisible:', ' id: ' + canonicaliseId(step.assertHidden)];
|
|
149
|
+
}
|
|
150
|
+
if ('assertText' in step) {
|
|
151
|
+
return [
|
|
152
|
+
'- assertVisible:', ' id: ' + canonicaliseId(step.in),
|
|
153
|
+
'- assertVisible:', ' text: ' + maestroString(step.assertText),
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
if ('waitMs' in step) {
|
|
157
|
+
/* Maestro takes seconds, with sub-second precision. */
|
|
158
|
+
return ['- waitForAnimationToEnd', '- extendedWaitUntil:', ' visible: ""', ' timeout: ' + Math.max(1, Math.ceil(step.waitMs / 1000))];
|
|
159
|
+
}
|
|
160
|
+
if ('screenshot' in step) {
|
|
161
|
+
const safe = step.screenshot.replace(/[^a-zA-Z0-9-_]/g, '-');
|
|
162
|
+
return ['- takeScreenshot: ' + safe];
|
|
163
|
+
}
|
|
164
|
+
throw new Error('emitMaestroStep: unknown step shape: ' + JSON.stringify(step));
|
|
165
|
+
}
|
|
166
|
+
/* ============================================================
|
|
167
|
+
* Shared helpers
|
|
168
|
+
* ============================================================ */
|
|
169
|
+
function canonicaliseId(id) {
|
|
170
|
+
/* Mirror of nacId() but inlined to avoid a circular import.
|
|
171
|
+
* The shape is `yujin.<scenario>.<element>`. */
|
|
172
|
+
if (typeof id !== 'string' || id.length === 0) {
|
|
173
|
+
throw new Error('canonicaliseId: empty id');
|
|
174
|
+
}
|
|
175
|
+
return id.startsWith('yujin.') ? id : 'yujin.' + id;
|
|
176
|
+
}
|
|
177
|
+
function slugify(s) {
|
|
178
|
+
return s.toLowerCase().replace(/[^a-z0-9-]+/g, '-').replace(/^-+|-+$/g, '');
|
|
179
|
+
}
|
|
180
|
+
/** Defensive single-quoted TS string literal that survives
|
|
181
|
+
* apostrophes + back-slashes inside scenario names + arg
|
|
182
|
+
* values. */
|
|
183
|
+
function jsString(s) {
|
|
184
|
+
return "'" + s.replace(/\\/g, '\\\\').replace(/'/g, "\\'") + "'";
|
|
185
|
+
}
|
|
186
|
+
/** Maestro YAML quoting: use double quotes + escape inner
|
|
187
|
+
* doubles. */
|
|
188
|
+
function maestroString(s) {
|
|
189
|
+
return '"' + s.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=scenario_dsl.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scenario_dsl.js","sourceRoot":"","sources":["../../src/nac3/scenario_dsl.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NAC-3 design tokens (PLAN sec D1, NAC3.1).
|
|
3
|
+
*
|
|
4
|
+
* Single source of truth for colors, fonts, spacing, radii,
|
|
5
|
+
* and shadows used by the Forge panel (web) and -- after the
|
|
6
|
+
* NAC3.3 slice -- the RN mirror.
|
|
7
|
+
*
|
|
8
|
+
* The TS export is the canonical shape. A side-effect helper
|
|
9
|
+
* (`tokensToCssVars`) emits the same values as CSS variable
|
|
10
|
+
* declarations so the existing `panel.ts` CSS can consume
|
|
11
|
+
* them without further changes.
|
|
12
|
+
*
|
|
13
|
+
* Pablo's decision (D7): two packages emparejados. This file
|
|
14
|
+
* is the embryo of `@yujin/nac3-tokens` -- when the monorepo
|
|
15
|
+
* lands, it moves under `packages/nac3-tokens/`. The shape
|
|
16
|
+
* stays identical to avoid a churn refactor in callers.
|
|
17
|
+
*
|
|
18
|
+
* ASCII-only on the source. Values are CSS hex / numeric.
|
|
19
|
+
*/
|
|
20
|
+
export interface ColorTokens {
|
|
21
|
+
bg1: string;
|
|
22
|
+
bg2: string;
|
|
23
|
+
ink: string;
|
|
24
|
+
inkMuted: string;
|
|
25
|
+
inkSubtle: string;
|
|
26
|
+
indigo: string;
|
|
27
|
+
amber: string;
|
|
28
|
+
border: string;
|
|
29
|
+
borderSubtle: string;
|
|
30
|
+
ok: string;
|
|
31
|
+
err: string;
|
|
32
|
+
warn: string;
|
|
33
|
+
bubbleUser: string;
|
|
34
|
+
bubbleAsst: string;
|
|
35
|
+
}
|
|
36
|
+
export interface FontTokens {
|
|
37
|
+
sans: string;
|
|
38
|
+
kanji: string;
|
|
39
|
+
display: string;
|
|
40
|
+
mono: string;
|
|
41
|
+
}
|
|
42
|
+
export interface ShadowTokens {
|
|
43
|
+
card: {
|
|
44
|
+
offsetX: number;
|
|
45
|
+
offsetY: number;
|
|
46
|
+
blur: number;
|
|
47
|
+
spread: number;
|
|
48
|
+
color: string;
|
|
49
|
+
};
|
|
50
|
+
modal: {
|
|
51
|
+
offsetX: number;
|
|
52
|
+
offsetY: number;
|
|
53
|
+
blur: number;
|
|
54
|
+
spread: number;
|
|
55
|
+
color: string;
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
export interface RadiusTokens {
|
|
59
|
+
sm: number;
|
|
60
|
+
md: number;
|
|
61
|
+
lg: number;
|
|
62
|
+
pill: number;
|
|
63
|
+
}
|
|
64
|
+
export interface Nac3Tokens {
|
|
65
|
+
color: ColorTokens;
|
|
66
|
+
font: FontTokens;
|
|
67
|
+
space: readonly number[];
|
|
68
|
+
radius: RadiusTokens;
|
|
69
|
+
shadow: ShadowTokens;
|
|
70
|
+
}
|
|
71
|
+
/** The canonical NAC-3 token set. */
|
|
72
|
+
export declare const TOKENS: Nac3Tokens;
|
|
73
|
+
/**
|
|
74
|
+
* Emit the color + font + radius tokens as a CSS variable
|
|
75
|
+
* declaration block, scoped under `:root` by default. The
|
|
76
|
+
* existing panel CSS consumes these same names; rendering
|
|
77
|
+
* the block at HTML render time replaces the previous
|
|
78
|
+
* hardcoded `:root { --bg-1: ... }` block.
|
|
79
|
+
*
|
|
80
|
+
* Caller pattern (in `renderPanelHtml`):
|
|
81
|
+
*
|
|
82
|
+
* <style>
|
|
83
|
+
* :root { ${tokensToCssVars()} }
|
|
84
|
+
* ...rest of the panel CSS...
|
|
85
|
+
* </style>
|
|
86
|
+
*/
|
|
87
|
+
export declare function tokensToCssVars(scope?: string): string;
|
|
88
|
+
/**
|
|
89
|
+
* RN style object equivalent. NB: shadows are RN-specific
|
|
90
|
+
* (elevation + shadowOffset for iOS, elevation only on
|
|
91
|
+
* Android). React Native callers should use this object,
|
|
92
|
+
* not the CSS string.
|
|
93
|
+
*
|
|
94
|
+
* Exported here so a future `@nac3/forge-rn` consumer
|
|
95
|
+
* doesn't need to re-translate the tokens; same numbers,
|
|
96
|
+
* same names.
|
|
97
|
+
*/
|
|
98
|
+
export declare function tokensToRnTheme(): {
|
|
99
|
+
color: ColorTokens;
|
|
100
|
+
font: FontTokens;
|
|
101
|
+
space: readonly number[];
|
|
102
|
+
radius: RadiusTokens;
|
|
103
|
+
shadow: {
|
|
104
|
+
card: {
|
|
105
|
+
elevation: number;
|
|
106
|
+
shadowOffset: {
|
|
107
|
+
width: number;
|
|
108
|
+
height: number;
|
|
109
|
+
};
|
|
110
|
+
shadowOpacity: number;
|
|
111
|
+
shadowRadius: number;
|
|
112
|
+
shadowColor: string;
|
|
113
|
+
};
|
|
114
|
+
modal: {
|
|
115
|
+
elevation: number;
|
|
116
|
+
shadowOffset: {
|
|
117
|
+
width: number;
|
|
118
|
+
height: number;
|
|
119
|
+
};
|
|
120
|
+
shadowOpacity: number;
|
|
121
|
+
shadowRadius: number;
|
|
122
|
+
shadowColor: string;
|
|
123
|
+
};
|
|
124
|
+
};
|
|
125
|
+
};
|
|
126
|
+
//# sourceMappingURL=tokens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tokens.d.ts","sourceRoot":"","sources":["../../src/nac3/tokens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACxF,KAAK,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1F;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IAEjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB;AAED,qCAAqC;AACrC,eAAO,MAAM,MAAM,EAAE,UA6BpB,CAAC;AAEF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAgB,GAAG,MAAM,CAsC/D;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,IAAI;IACjC,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,UAAU,CAAC;IACjB,KAAK,EAAE,SAAS,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE;QACN,IAAI,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;QAC/I,KAAK,EAAE;YAAE,SAAS,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE;gBAAE,KAAK,EAAE,MAAM,CAAC;gBAAC,MAAM,EAAE,MAAM,CAAA;aAAE,CAAC;YAAC,aAAa,EAAE,MAAM,CAAC;YAAC,YAAY,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC;KACjJ,CAAC;CACH,CAuBA"}
|