@flextudio/scenario 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +202 -0
- package/README.md +260 -0
- package/bin/flex-scenario.mjs +895 -0
- package/commands/flex-spec.md +28 -0
- package/contract-data/README.md +267 -0
- package/contract-data/examples/README.md +147 -0
- package/contract-data/examples/basic/basic-list-detail.json +2521 -0
- package/contract-data/examples/basic/delivery-address-popup.json +2175 -0
- package/contract-data/examples/basic/fixedtop-floating-form.json +1524 -0
- package/contract-data/examples/basic/search-period-popup.json +1524 -0
- package/contract-data/examples/design/booking-wizard-3step.json +1335 -0
- package/contract-data/examples/design/list-detail-form-3step.json +1516 -0
- package/contract-data/examples/design/list-filter-2step.json +1365 -0
- package/contract-data/examples/design/list-filter-detail-3step.json +1570 -0
- package/contract-data/examples/design/result-entry-wizard-4step.json +1861 -0
- package/contract-data/examples/intent/mock-employee-list.json +54 -0
- package/contract-data/examples/intent/script-cart-flow.json +96 -0
- package/contract-data/examples/intent/script-dialog-confirm.json +61 -0
- package/contract-data/runtime/v1/collection/README.md +119 -0
- package/contract-data/runtime/v1/collection/_c.md +205 -0
- package/contract-data/runtime/v1/collection/category.md +165 -0
- package/contract-data/runtime/v1/collection/collection.md +135 -0
- package/contract-data/runtime/v1/collection/lifecycle.md +140 -0
- package/contract-data/runtime/v1/collection/naming.md +174 -0
- package/contract-data/runtime/v1/collection/sector.md +176 -0
- package/contract-data/runtime/v1/collection/status.md +114 -0
- package/contract-data/runtime/v1/intent-system/INTENT.md +552 -0
- package/contract-data/runtime/v1/intent-system/README.md +118 -0
- package/contract-data/runtime/v1/intent-system/intent.schema.json +164 -0
- package/contract-data/runtime/v1/intent-system/kinds/_base.mjs +137 -0
- package/contract-data/runtime/v1/intent-system/kinds/clearCategory.mjs +35 -0
- package/contract-data/runtime/v1/intent-system/kinds/copyStepValues.mjs +100 -0
- package/contract-data/runtime/v1/intent-system/kinds/deleteActive.mjs +45 -0
- package/contract-data/runtime/v1/intent-system/kinds/dialog.mjs +127 -0
- package/contract-data/runtime/v1/intent-system/kinds/reloadGroup.mjs +28 -0
- package/contract-data/runtime/v1/intent-system/kinds/updateActive.mjs +74 -0
- package/contract-data/runtime/v1/intent-system/materialize.mjs +495 -0
- package/contract-data/runtime/v1/script/README.md +37 -0
- package/contract-data/runtime/v1/script/current_step.md +112 -0
- package/contract-data/runtime/v1/script/f_collection.md +142 -0
- package/contract-data/runtime/v1/script/f_content.md +133 -0
- package/contract-data/runtime/v1/script/f_messagebox.md +132 -0
- package/contract-data/runtime/v1/script/scenario-gen-rules.md +264 -0
- package/contract-data/schema/v1/SKELETON-SHELL.md +120 -0
- package/contract-data/schema/v1/bottom-buttons.md +155 -0
- package/contract-data/schema/v1/bottom-buttons.schema.json +134 -0
- package/contract-data/schema/v1/control/_base.schema.json +1296 -0
- package/contract-data/schema/v1/control/button.md +147 -0
- package/contract-data/schema/v1/control/button.schema.json +55 -0
- package/contract-data/schema/v1/control/calendar-navigator.md +143 -0
- package/contract-data/schema/v1/control/calendar-navigator.schema.json +164 -0
- package/contract-data/schema/v1/control/calendar.md +128 -0
- package/contract-data/schema/v1/control/calendar.schema.json +18 -0
- package/contract-data/schema/v1/control/check-box.md +117 -0
- package/contract-data/schema/v1/control/check-box.schema.json +41 -0
- package/contract-data/schema/v1/control/combo.md +293 -0
- package/contract-data/schema/v1/control/combo.schema.json +23 -0
- package/contract-data/schema/v1/control/embed.md +211 -0
- package/contract-data/schema/v1/control/embed.schema.json +30 -0
- package/contract-data/schema/v1/control/image-box.md +237 -0
- package/contract-data/schema/v1/control/image-box.schema.json +49 -0
- package/contract-data/schema/v1/control/input-date.md +175 -0
- package/contract-data/schema/v1/control/input-date.schema.json +27 -0
- package/contract-data/schema/v1/control/input-file.md +192 -0
- package/contract-data/schema/v1/control/input-file.schema.json +139 -0
- package/contract-data/schema/v1/control/input-mask.md +89 -0
- package/contract-data/schema/v1/control/input-mask.schema.json +45 -0
- package/contract-data/schema/v1/control/input-number.md +55 -0
- package/contract-data/schema/v1/control/input-number.schema.json +24 -0
- package/contract-data/schema/v1/control/input-text.md +73 -0
- package/contract-data/schema/v1/control/input-text.schema.json +24 -0
- package/contract-data/schema/v1/control/label.md +127 -0
- package/contract-data/schema/v1/control/label.schema.json +113 -0
- package/contract-data/schema/v1/control/multi-input-box.md +51 -0
- package/contract-data/schema/v1/control/multi-input-box.schema.json +19 -0
- package/contract-data/schema/v1/control/other.schema.json +24 -0
- package/contract-data/schema/v1/control/radio-box.md +150 -0
- package/contract-data/schema/v1/control/radio-box.schema.json +87 -0
- package/contract-data/schema/v1/control/search.md +163 -0
- package/contract-data/schema/v1/control/search.schema.json +23 -0
- package/contract-data/schema/v1/control/tab.md +240 -0
- package/contract-data/schema/v1/control/tab.schema.json +112 -0
- package/contract-data/schema/v1/control/tree.md +278 -0
- package/contract-data/schema/v1/control/tree.schema.json +83 -0
- package/contract-data/schema/v1/control.md +264 -0
- package/contract-data/schema/v1/control.schema.json +30 -0
- package/contract-data/schema/v1/data-objects.md +278 -0
- package/contract-data/schema/v1/data-objects.schema.json +161 -0
- package/contract-data/schema/v1/data-sources.md +215 -0
- package/contract-data/schema/v1/data-sources.schema.json +184 -0
- package/contract-data/schema/v1/design-system/DESIGN.md +282 -0
- package/contract-data/schema/v1/design-system/README.md +235 -0
- package/contract-data/schema/v1/design-system/design.schema.json +496 -0
- package/contract-data/schema/v1/design-system/error-mapping.mjs +132 -0
- package/contract-data/schema/v1/design-system/materialize.mjs +1435 -0
- package/contract-data/schema/v1/design-system/tests/_base.additional-meta.test.mjs +98 -0
- package/contract-data/schema/v1/design-system/tests/_base.materialize.test.mjs +596 -0
- package/contract-data/schema/v1/design-system/tests/checklist.test.mjs +135 -0
- package/contract-data/schema/v1/design-system/tests/design.schema.test.mjs +487 -0
- package/contract-data/schema/v1/design-system/tests/error-mapping.test.mjs +244 -0
- package/contract-data/schema/v1/design-system/tests/materialize.test.mjs +1093 -0
- package/contract-data/schema/v1/design-system/tests/move-step.test.mjs +119 -0
- package/contract-data/schema/v1/design-system/tests/override.integration.test.mjs +116 -0
- package/contract-data/schema/v1/design-system/tokens.json +76 -0
- package/contract-data/schema/v1/events.md +467 -0
- package/contract-data/schema/v1/events.schema.json +272 -0
- package/contract-data/schema/v1/group.md +146 -0
- package/contract-data/schema/v1/group.schema.json +133 -0
- package/contract-data/schema/v1/mockup-data.md +186 -0
- package/contract-data/schema/v1/naming-objects.schema.json +133 -0
- package/contract-data/schema/v1/node.md +32 -0
- package/contract-data/schema/v1/node.schema.json +24 -0
- package/contract-data/schema/v1/patterns/_base.additional-meta.mjs +135 -0
- package/contract-data/schema/v1/patterns/_base.controls.mjs +759 -0
- package/contract-data/schema/v1/patterns/_base.icon.mjs +61 -0
- package/contract-data/schema/v1/patterns/_base.id.mjs +15 -0
- package/contract-data/schema/v1/patterns/_base.materialize.mjs +1181 -0
- package/contract-data/schema/v1/patterns/_base.style.mjs +312 -0
- package/contract-data/schema/v1/patterns/atom/badge.materialize.mjs +68 -0
- package/contract-data/schema/v1/patterns/atom/badge.schema.json +44 -0
- package/contract-data/schema/v1/patterns/atom/button.materialize.mjs +91 -0
- package/contract-data/schema/v1/patterns/atom/button.schema.json +70 -0
- package/contract-data/schema/v1/patterns/atom/checkbox.materialize.mjs +40 -0
- package/contract-data/schema/v1/patterns/atom/checkbox.schema.json +39 -0
- package/contract-data/schema/v1/patterns/atom/segmented-radio.materialize.mjs +67 -0
- package/contract-data/schema/v1/patterns/atom/segmented-radio.schema.json +49 -0
- package/contract-data/schema/v1/patterns/atom/switch.materialize.mjs +58 -0
- package/contract-data/schema/v1/patterns/atom/switch.schema.json +27 -0
- package/contract-data/schema/v1/patterns/molecule/checklist.materialize.mjs +130 -0
- package/contract-data/schema/v1/patterns/molecule/checklist.schema.json +63 -0
- package/contract-data/schema/v1/patterns/molecule/input-action.materialize.mjs +356 -0
- package/contract-data/schema/v1/patterns/molecule/input-action.schema.json +251 -0
- package/contract-data/schema/v1/patterns/molecule/input-button.materialize.mjs +183 -0
- package/contract-data/schema/v1/patterns/molecule/input-button.schema.json +141 -0
- package/contract-data/schema/v1/patterns/molecule/input-pair.materialize.mjs +254 -0
- package/contract-data/schema/v1/patterns/molecule/input-pair.schema.json +210 -0
- package/contract-data/schema/v1/scenario.md +112 -0
- package/contract-data/schema/v1/scenario.schema.json +161 -0
- package/contract-data/schema/v1/service/CustomSystem.md +139 -0
- package/contract-data/schema/v1/service/CustomSystem.schema.json +41 -0
- package/contract-data/schema/v1/service/Firestore.md +125 -0
- package/contract-data/schema/v1/service/Firestore.schema.json +28 -0
- package/contract-data/schema/v1/service/FlexAutoQuery.md +128 -0
- package/contract-data/schema/v1/service/FlexAutoQuery.schema.json +35 -0
- package/contract-data/schema/v1/service/FlexSQL.md +96 -0
- package/contract-data/schema/v1/service/FlexSQL.schema.json +33 -0
- package/contract-data/schema/v1/service/Flextudio API.md +161 -0
- package/contract-data/schema/v1/service/Flextudio API.schema.json +115 -0
- package/contract-data/schema/v1/service/Flextudio.md +87 -0
- package/contract-data/schema/v1/service/Flextudio.schema.json +26 -0
- package/contract-data/schema/v1/service/GoogleSheet.md +71 -0
- package/contract-data/schema/v1/service/GoogleSheet.schema.json +31 -0
- package/contract-data/schema/v1/service/README.md +127 -0
- package/contract-data/schema/v1/service/_base.schema.json +31 -0
- package/contract-data/schema/v1/service/ksystem.md +76 -0
- package/contract-data/schema/v1/service/ksystem.schema.json +36 -0
- package/contract-data/schema/v1/service-binding.md +228 -0
- package/contract-data/schema/v1/service-binding.schema.json +51 -0
- package/contract-data/schema/v1/step.md +546 -0
- package/contract-data/schema/v1/step.schema.json +258 -0
- package/contract-data/schema/v1/style-objects.md +183 -0
- package/contract-data/schema/v1/style-objects.schema.json +155 -0
- package/contract-data/spec/catalog.json +406 -0
- package/contract-data/spec/rules.md +400 -0
- package/node_modules/@flextudio/contract-core/contract.mjs +367 -0
- package/node_modules/@flextudio/contract-core/index.mjs +16 -0
- package/node_modules/@flextudio/contract-core/package.json +21 -0
- package/node_modules/@flextudio/contract-core/paths.mjs +72 -0
- package/node_modules/@flextudio/contract-core/schemas.mjs +474 -0
- package/node_modules/@flextudio/contract-core/validators.mjs +2471 -0
- package/node_modules/ajv/.runkit_example.js +23 -0
- package/node_modules/ajv/LICENSE +22 -0
- package/node_modules/ajv/README.md +207 -0
- package/node_modules/ajv/dist/2019.d.ts +19 -0
- package/node_modules/ajv/dist/2019.js +61 -0
- package/node_modules/ajv/dist/2019.js.map +1 -0
- package/node_modules/ajv/dist/2020.d.ts +19 -0
- package/node_modules/ajv/dist/2020.js +55 -0
- package/node_modules/ajv/dist/2020.js.map +1 -0
- package/node_modules/ajv/dist/ajv.d.ts +18 -0
- package/node_modules/ajv/dist/ajv.js +50 -0
- package/node_modules/ajv/dist/ajv.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/code.d.ts +40 -0
- package/node_modules/ajv/dist/compile/codegen/code.js +156 -0
- package/node_modules/ajv/dist/compile/codegen/code.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/index.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/index.js +697 -0
- package/node_modules/ajv/dist/compile/codegen/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/codegen/scope.d.ts +79 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js +143 -0
- package/node_modules/ajv/dist/compile/codegen/scope.js.map +1 -0
- package/node_modules/ajv/dist/compile/errors.d.ts +13 -0
- package/node_modules/ajv/dist/compile/errors.js +123 -0
- package/node_modules/ajv/dist/compile/errors.js.map +1 -0
- package/node_modules/ajv/dist/compile/index.d.ts +80 -0
- package/node_modules/ajv/dist/compile/index.js +242 -0
- package/node_modules/ajv/dist/compile/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/parse.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js +350 -0
- package/node_modules/ajv/dist/compile/jtd/parse.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.d.ts +4 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js +236 -0
- package/node_modules/ajv/dist/compile/jtd/serialize.js.map +1 -0
- package/node_modules/ajv/dist/compile/jtd/types.d.ts +6 -0
- package/node_modules/ajv/dist/compile/jtd/types.js +14 -0
- package/node_modules/ajv/dist/compile/jtd/types.js.map +1 -0
- package/node_modules/ajv/dist/compile/names.d.ts +20 -0
- package/node_modules/ajv/dist/compile/names.js +28 -0
- package/node_modules/ajv/dist/compile/names.js.map +1 -0
- package/node_modules/ajv/dist/compile/ref_error.d.ts +6 -0
- package/node_modules/ajv/dist/compile/ref_error.js +12 -0
- package/node_modules/ajv/dist/compile/ref_error.js.map +1 -0
- package/node_modules/ajv/dist/compile/resolve.d.ts +12 -0
- package/node_modules/ajv/dist/compile/resolve.js +155 -0
- package/node_modules/ajv/dist/compile/resolve.js.map +1 -0
- package/node_modules/ajv/dist/compile/rules.d.ts +28 -0
- package/node_modules/ajv/dist/compile/rules.js +26 -0
- package/node_modules/ajv/dist/compile/rules.js.map +1 -0
- package/node_modules/ajv/dist/compile/util.d.ts +40 -0
- package/node_modules/ajv/dist/compile/util.js +178 -0
- package/node_modules/ajv/dist/compile/util.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/applicability.d.ts +6 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js +19 -0
- package/node_modules/ajv/dist/compile/validate/applicability.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.d.ts +4 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js +50 -0
- package/node_modules/ajv/dist/compile/validate/boolSchema.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/dataType.d.ts +17 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js +203 -0
- package/node_modules/ajv/dist/compile/validate/dataType.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/defaults.d.ts +2 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js +35 -0
- package/node_modules/ajv/dist/compile/validate/defaults.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/index.d.ts +42 -0
- package/node_modules/ajv/dist/compile/validate/index.js +520 -0
- package/node_modules/ajv/dist/compile/validate/index.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/keyword.d.ts +8 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js +124 -0
- package/node_modules/ajv/dist/compile/validate/keyword.js.map +1 -0
- package/node_modules/ajv/dist/compile/validate/subschema.d.ts +47 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js +81 -0
- package/node_modules/ajv/dist/compile/validate/subschema.js.map +1 -0
- package/node_modules/ajv/dist/core.d.ts +174 -0
- package/node_modules/ajv/dist/core.js +618 -0
- package/node_modules/ajv/dist/core.js.map +1 -0
- package/node_modules/ajv/dist/jtd.d.ts +47 -0
- package/node_modules/ajv/dist/jtd.js +72 -0
- package/node_modules/ajv/dist/jtd.js.map +1 -0
- package/node_modules/ajv/dist/refs/data.json +13 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js +28 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.d.ts +2 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js +30 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/index.js.map +1 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/dist/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/dist/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/dist/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/dist/refs/jtd-schema.d.ts +3 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js +118 -0
- package/node_modules/ajv/dist/refs/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/runtime/equal.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/equal.js +7 -0
- package/node_modules/ajv/dist/runtime/equal.js.map +1 -0
- package/node_modules/ajv/dist/runtime/parseJson.d.ts +18 -0
- package/node_modules/ajv/dist/runtime/parseJson.js +185 -0
- package/node_modules/ajv/dist/runtime/parseJson.js.map +1 -0
- package/node_modules/ajv/dist/runtime/quote.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/quote.js +30 -0
- package/node_modules/ajv/dist/runtime/quote.js.map +1 -0
- package/node_modules/ajv/dist/runtime/re2.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/re2.js +6 -0
- package/node_modules/ajv/dist/runtime/re2.js.map +1 -0
- package/node_modules/ajv/dist/runtime/timestamp.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/timestamp.js +42 -0
- package/node_modules/ajv/dist/runtime/timestamp.js.map +1 -0
- package/node_modules/ajv/dist/runtime/ucs2length.d.ts +5 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js +24 -0
- package/node_modules/ajv/dist/runtime/ucs2length.js.map +1 -0
- package/node_modules/ajv/dist/runtime/uri.d.ts +6 -0
- package/node_modules/ajv/dist/runtime/uri.js +6 -0
- package/node_modules/ajv/dist/runtime/uri.js.map +1 -0
- package/node_modules/ajv/dist/runtime/validation_error.d.ts +7 -0
- package/node_modules/ajv/dist/runtime/validation_error.js +11 -0
- package/node_modules/ajv/dist/runtime/validation_error.js.map +1 -0
- package/node_modules/ajv/dist/standalone/index.d.ts +6 -0
- package/node_modules/ajv/dist/standalone/index.js +90 -0
- package/node_modules/ajv/dist/standalone/index.js.map +1 -0
- package/node_modules/ajv/dist/standalone/instance.d.ts +12 -0
- package/node_modules/ajv/dist/standalone/instance.js +35 -0
- package/node_modules/ajv/dist/standalone/instance.js.map +1 -0
- package/node_modules/ajv/dist/types/index.d.ts +183 -0
- package/node_modules/ajv/dist/types/index.js +3 -0
- package/node_modules/ajv/dist/types/index.js.map +1 -0
- package/node_modules/ajv/dist/types/json-schema.d.ts +125 -0
- package/node_modules/ajv/dist/types/json-schema.js +3 -0
- package/node_modules/ajv/dist/types/json-schema.js.map +1 -0
- package/node_modules/ajv/dist/types/jtd-schema.d.ts +174 -0
- package/node_modules/ajv/dist/types/jtd-schema.js +3 -0
- package/node_modules/ajv/dist/types/jtd-schema.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js +49 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js +106 -0
- package/node_modules/ajv/dist/vocabularies/applicator/additionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js +23 -0
- package/node_modules/ajv/dist/vocabularies/applicator/allOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/anyOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.d.ts +7 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js +95 -0
- package/node_modules/ajv/dist/vocabularies/applicator/contains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.d.ts +21 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js +85 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependencies.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js +11 -0
- package/node_modules/ajv/dist/vocabularies/applicator/dependentSchemas.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js +66 -0
- package/node_modules/ajv/dist/vocabularies/applicator/if.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.d.ts +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js +44 -0
- package/node_modules/ajv/dist/vocabularies/applicator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js +52 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js +30 -0
- package/node_modules/ajv/dist/vocabularies/applicator/items2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js +26 -0
- package/node_modules/ajv/dist/vocabularies/applicator/not.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js +60 -0
- package/node_modules/ajv/dist/vocabularies/applicator/oneOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js +75 -0
- package/node_modules/ajv/dist/vocabularies/applicator/patternProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js +12 -0
- package/node_modules/ajv/dist/vocabularies/applicator/prefixItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js +54 -0
- package/node_modules/ajv/dist/vocabularies/applicator/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js +38 -0
- package/node_modules/ajv/dist/vocabularies/applicator/propertyNames.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js +13 -0
- package/node_modules/ajv/dist/vocabularies/applicator/thenElse.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/code.d.ts +17 -0
- package/node_modules/ajv/dist/vocabularies/code.js +131 -0
- package/node_modules/ajv/dist/vocabularies/code.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/id.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js +10 -0
- package/node_modules/ajv/dist/vocabularies/core/id.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js +16 -0
- package/node_modules/ajv/dist/vocabularies/core/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js +122 -0
- package/node_modules/ajv/dist/vocabularies/core/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js +104 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js +9 -0
- package/node_modules/ajv/dist/vocabularies/discriminator/types.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js +23 -0
- package/node_modules/ajv/dist/vocabularies/draft2020.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/draft7.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js +17 -0
- package/node_modules/ajv/dist/vocabularies/draft7.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js +30 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js +51 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/dynamicRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js +9 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js +16 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveAnchor.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js +10 -0
- package/node_modules/ajv/dist/vocabularies/dynamic/recursiveRef.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/errors.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/errors.js +3 -0
- package/node_modules/ajv/dist/vocabularies/errors.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/format.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js +92 -0
- package/node_modules/ajv/dist/vocabularies/format/format.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/format/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js +6 -0
- package/node_modules/ajv/dist/vocabularies/format/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js +71 -0
- package/node_modules/ajv/dist/vocabularies/jtd/discriminator.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js +24 -0
- package/node_modules/ajv/dist/vocabularies/jtd/elements.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js +43 -0
- package/node_modules/ajv/dist/vocabularies/jtd/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js +20 -0
- package/node_modules/ajv/dist/vocabularies/jtd/error.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js +29 -0
- package/node_modules/ajv/dist/vocabularies/jtd/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js +25 -0
- package/node_modules/ajv/dist/vocabularies/jtd/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/nullable.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js +15 -0
- package/node_modules/ajv/dist/vocabularies/jtd/optionalProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.d.ts +22 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js +149 -0
- package/node_modules/ajv/dist/vocabularies/jtd/properties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.d.ts +4 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js +67 -0
- package/node_modules/ajv/dist/vocabularies/jtd/ref.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.d.ts +10 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js +69 -0
- package/node_modules/ajv/dist/vocabularies/jtd/type.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js +12 -0
- package/node_modules/ajv/dist/vocabularies/jtd/union.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js +51 -0
- package/node_modules/ajv/dist/vocabularies/jtd/values.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/metadata.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js +18 -0
- package/node_modules/ajv/dist/vocabularies/metadata.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/next.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/next.js +8 -0
- package/node_modules/ajv/dist/vocabularies/next.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js +7 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js +40 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js +65 -0
- package/node_modules/ajv/dist/vocabularies/unevaluated/unevaluatedProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.d.ts +6 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js +25 -0
- package/node_modules/ajv/dist/vocabularies/validation/const.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.d.ts +5 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js +12 -0
- package/node_modules/ajv/dist/vocabularies/validation/dependentRequired.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js +48 -0
- package/node_modules/ajv/dist/vocabularies/validation/enum.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.d.ts +16 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/index.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js +15 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitContains.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitItems.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitLength.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.d.ts +11 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js +27 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitNumber.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.d.ts +3 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js +24 -0
- package/node_modules/ajv/dist/vocabularies/validation/limitProperties.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js +26 -0
- package/node_modules/ajv/dist/vocabularies/validation/multipleOf.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js +33 -0
- package/node_modules/ajv/dist/vocabularies/validation/pattern.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.d.ts +8 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js +79 -0
- package/node_modules/ajv/dist/vocabularies/validation/required.js.map +1 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.d.ts +9 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js +64 -0
- package/node_modules/ajv/dist/vocabularies/validation/uniqueItems.js.map +1 -0
- package/node_modules/ajv/lib/2019.ts +81 -0
- package/node_modules/ajv/lib/2020.ts +75 -0
- package/node_modules/ajv/lib/ajv.ts +70 -0
- package/node_modules/ajv/lib/compile/codegen/code.ts +169 -0
- package/node_modules/ajv/lib/compile/codegen/index.ts +852 -0
- package/node_modules/ajv/lib/compile/codegen/scope.ts +215 -0
- package/node_modules/ajv/lib/compile/errors.ts +184 -0
- package/node_modules/ajv/lib/compile/index.ts +324 -0
- package/node_modules/ajv/lib/compile/jtd/parse.ts +411 -0
- package/node_modules/ajv/lib/compile/jtd/serialize.ts +277 -0
- package/node_modules/ajv/lib/compile/jtd/types.ts +16 -0
- package/node_modules/ajv/lib/compile/names.ts +27 -0
- package/node_modules/ajv/lib/compile/ref_error.ts +13 -0
- package/node_modules/ajv/lib/compile/resolve.ts +149 -0
- package/node_modules/ajv/lib/compile/rules.ts +50 -0
- package/node_modules/ajv/lib/compile/util.ts +213 -0
- package/node_modules/ajv/lib/compile/validate/applicability.ts +22 -0
- package/node_modules/ajv/lib/compile/validate/boolSchema.ts +47 -0
- package/node_modules/ajv/lib/compile/validate/dataType.ts +230 -0
- package/node_modules/ajv/lib/compile/validate/defaults.ts +32 -0
- package/node_modules/ajv/lib/compile/validate/index.ts +582 -0
- package/node_modules/ajv/lib/compile/validate/keyword.ts +171 -0
- package/node_modules/ajv/lib/compile/validate/subschema.ts +135 -0
- package/node_modules/ajv/lib/core.ts +892 -0
- package/node_modules/ajv/lib/jtd.ts +132 -0
- package/node_modules/ajv/lib/refs/data.json +13 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/index.ts +28 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/applicator.json +53 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/core.json +57 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/format.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2019-09/schema.json +39 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/index.ts +30 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/applicator.json +48 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/content.json +17 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/core.json +51 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/format-annotation.json +14 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/meta-data.json +37 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/unevaluated.json +15 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/meta/validation.json +90 -0
- package/node_modules/ajv/lib/refs/json-schema-2020-12/schema.json +55 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-06.json +137 -0
- package/node_modules/ajv/lib/refs/json-schema-draft-07.json +151 -0
- package/node_modules/ajv/lib/refs/json-schema-secure.json +88 -0
- package/node_modules/ajv/lib/refs/jtd-schema.ts +130 -0
- package/node_modules/ajv/lib/runtime/equal.ts +7 -0
- package/node_modules/ajv/lib/runtime/parseJson.ts +177 -0
- package/node_modules/ajv/lib/runtime/quote.ts +31 -0
- package/node_modules/ajv/lib/runtime/re2.ts +6 -0
- package/node_modules/ajv/lib/runtime/timestamp.ts +46 -0
- package/node_modules/ajv/lib/runtime/ucs2length.ts +20 -0
- package/node_modules/ajv/lib/runtime/uri.ts +6 -0
- package/node_modules/ajv/lib/runtime/validation_error.ts +13 -0
- package/node_modules/ajv/lib/standalone/index.ts +100 -0
- package/node_modules/ajv/lib/standalone/instance.ts +36 -0
- package/node_modules/ajv/lib/types/index.ts +244 -0
- package/node_modules/ajv/lib/types/json-schema.ts +187 -0
- package/node_modules/ajv/lib/types/jtd-schema.ts +273 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalItems.ts +56 -0
- package/node_modules/ajv/lib/vocabularies/applicator/additionalProperties.ts +118 -0
- package/node_modules/ajv/lib/vocabularies/applicator/allOf.ts +22 -0
- package/node_modules/ajv/lib/vocabularies/applicator/anyOf.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/applicator/contains.ts +109 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependencies.ts +112 -0
- package/node_modules/ajv/lib/vocabularies/applicator/dependentSchemas.ts +11 -0
- package/node_modules/ajv/lib/vocabularies/applicator/if.ts +80 -0
- package/node_modules/ajv/lib/vocabularies/applicator/index.ts +53 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items.ts +59 -0
- package/node_modules/ajv/lib/vocabularies/applicator/items2020.ts +36 -0
- package/node_modules/ajv/lib/vocabularies/applicator/not.ts +38 -0
- package/node_modules/ajv/lib/vocabularies/applicator/oneOf.ts +82 -0
- package/node_modules/ajv/lib/vocabularies/applicator/patternProperties.ts +91 -0
- package/node_modules/ajv/lib/vocabularies/applicator/prefixItems.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/applicator/properties.ts +57 -0
- package/node_modules/ajv/lib/vocabularies/applicator/propertyNames.ts +50 -0
- package/node_modules/ajv/lib/vocabularies/applicator/thenElse.ts +13 -0
- package/node_modules/ajv/lib/vocabularies/code.ts +168 -0
- package/node_modules/ajv/lib/vocabularies/core/id.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/core/index.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/core/ref.ts +129 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/index.ts +113 -0
- package/node_modules/ajv/lib/vocabularies/discriminator/types.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/draft2020.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/draft7.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicAnchor.ts +31 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/dynamicRef.ts +51 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/index.ts +9 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveAnchor.ts +14 -0
- package/node_modules/ajv/lib/vocabularies/dynamic/recursiveRef.ts +10 -0
- package/node_modules/ajv/lib/vocabularies/errors.ts +18 -0
- package/node_modules/ajv/lib/vocabularies/format/format.ts +120 -0
- package/node_modules/ajv/lib/vocabularies/format/index.ts +6 -0
- package/node_modules/ajv/lib/vocabularies/jtd/discriminator.ts +89 -0
- package/node_modules/ajv/lib/vocabularies/jtd/elements.ts +32 -0
- package/node_modules/ajv/lib/vocabularies/jtd/enum.ts +45 -0
- package/node_modules/ajv/lib/vocabularies/jtd/error.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/jtd/index.ts +37 -0
- package/node_modules/ajv/lib/vocabularies/jtd/metadata.ts +24 -0
- package/node_modules/ajv/lib/vocabularies/jtd/nullable.ts +21 -0
- package/node_modules/ajv/lib/vocabularies/jtd/optionalProperties.ts +15 -0
- package/node_modules/ajv/lib/vocabularies/jtd/properties.ts +184 -0
- package/node_modules/ajv/lib/vocabularies/jtd/ref.ts +76 -0
- package/node_modules/ajv/lib/vocabularies/jtd/type.ts +75 -0
- package/node_modules/ajv/lib/vocabularies/jtd/union.ts +12 -0
- package/node_modules/ajv/lib/vocabularies/jtd/values.ts +58 -0
- package/node_modules/ajv/lib/vocabularies/metadata.ts +17 -0
- package/node_modules/ajv/lib/vocabularies/next.ts +8 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/index.ts +7 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedItems.ts +47 -0
- package/node_modules/ajv/lib/vocabularies/unevaluated/unevaluatedProperties.ts +85 -0
- package/node_modules/ajv/lib/vocabularies/validation/const.ts +28 -0
- package/node_modules/ajv/lib/vocabularies/validation/dependentRequired.ts +23 -0
- package/node_modules/ajv/lib/vocabularies/validation/enum.ts +54 -0
- package/node_modules/ajv/lib/vocabularies/validation/index.ts +49 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitContains.ts +16 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitItems.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitLength.ts +30 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitNumber.ts +42 -0
- package/node_modules/ajv/lib/vocabularies/validation/limitProperties.ts +26 -0
- package/node_modules/ajv/lib/vocabularies/validation/multipleOf.ts +34 -0
- package/node_modules/ajv/lib/vocabularies/validation/pattern.ts +39 -0
- package/node_modules/ajv/lib/vocabularies/validation/required.ts +98 -0
- package/node_modules/ajv/lib/vocabularies/validation/uniqueItems.ts +79 -0
- package/node_modules/ajv/package.json +126 -0
- package/node_modules/fast-deep-equal/LICENSE +21 -0
- package/node_modules/fast-deep-equal/README.md +96 -0
- package/node_modules/fast-deep-equal/es6/index.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/index.js +72 -0
- package/node_modules/fast-deep-equal/es6/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/es6/react.js +79 -0
- package/node_modules/fast-deep-equal/index.d.ts +4 -0
- package/node_modules/fast-deep-equal/index.js +46 -0
- package/node_modules/fast-deep-equal/package.json +61 -0
- package/node_modules/fast-deep-equal/react.d.ts +2 -0
- package/node_modules/fast-deep-equal/react.js +53 -0
- package/node_modules/fast-uri/.gitattributes +2 -0
- package/node_modules/fast-uri/.github/dependabot.yml +13 -0
- package/node_modules/fast-uri/.github/workflows/ci.yml +106 -0
- package/node_modules/fast-uri/.github/workflows/lock-threads.yml +19 -0
- package/node_modules/fast-uri/.github/workflows/package-manager-ci.yml +24 -0
- package/node_modules/fast-uri/LICENSE +30 -0
- package/node_modules/fast-uri/README.md +152 -0
- package/node_modules/fast-uri/benchmark/benchmark.mjs +159 -0
- package/node_modules/fast-uri/benchmark/equal.mjs +51 -0
- package/node_modules/fast-uri/benchmark/non-simple-domain.mjs +22 -0
- package/node_modules/fast-uri/benchmark/package.json +17 -0
- package/node_modules/fast-uri/benchmark/string-array-to-hex-stripped.mjs +24 -0
- package/node_modules/fast-uri/benchmark/ws-is-secure.mjs +65 -0
- package/node_modules/fast-uri/eslint.config.js +6 -0
- package/node_modules/fast-uri/index.js +406 -0
- package/node_modules/fast-uri/lib/schemes.js +267 -0
- package/node_modules/fast-uri/lib/utils.js +443 -0
- package/node_modules/fast-uri/package.json +68 -0
- package/node_modules/fast-uri/test/ajv.test.js +43 -0
- package/node_modules/fast-uri/test/equal.test.js +117 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-parse.json +501 -0
- package/node_modules/fast-uri/test/fixtures/uri-js-serialize.json +120 -0
- package/node_modules/fast-uri/test/parse.test.js +323 -0
- package/node_modules/fast-uri/test/resolve.test.js +87 -0
- package/node_modules/fast-uri/test/rfc-3986.test.js +90 -0
- package/node_modules/fast-uri/test/security-normalization.test.js +39 -0
- package/node_modules/fast-uri/test/security.test.js +133 -0
- package/node_modules/fast-uri/test/serialize.test.js +151 -0
- package/node_modules/fast-uri/test/uri-js-compatibility.test.js +33 -0
- package/node_modules/fast-uri/test/uri-js.test.js +912 -0
- package/node_modules/fast-uri/test/util.test.js +38 -0
- package/node_modules/fast-uri/tsconfig.json +9 -0
- package/node_modules/fast-uri/types/index.d.ts +60 -0
- package/node_modules/fast-uri/types/index.test-d.ts +17 -0
- package/node_modules/json-schema-traverse/.eslintrc.yml +27 -0
- package/node_modules/json-schema-traverse/.github/FUNDING.yml +2 -0
- package/node_modules/json-schema-traverse/.github/workflows/build.yml +28 -0
- package/node_modules/json-schema-traverse/.github/workflows/publish.yml +27 -0
- package/node_modules/json-schema-traverse/LICENSE +21 -0
- package/node_modules/json-schema-traverse/README.md +95 -0
- package/node_modules/json-schema-traverse/index.d.ts +40 -0
- package/node_modules/json-schema-traverse/index.js +93 -0
- package/node_modules/json-schema-traverse/package.json +43 -0
- package/node_modules/json-schema-traverse/spec/.eslintrc.yml +6 -0
- package/node_modules/json-schema-traverse/spec/fixtures/schema.js +125 -0
- package/node_modules/json-schema-traverse/spec/index.spec.js +171 -0
- package/node_modules/require-from-string/index.js +34 -0
- package/node_modules/require-from-string/license +21 -0
- package/node_modules/require-from-string/package.json +28 -0
- package/node_modules/require-from-string/readme.md +56 -0
- package/package.json +51 -0
- package/scripts/api-call.mjs +59 -0
- package/scripts/auth.mjs +262 -0
- package/scripts/build-skill-payload.mjs +338 -0
- package/scripts/cleanup.mjs +166 -0
- package/scripts/install-paths.mjs +146 -0
- package/scripts/postinstall.mjs +218 -0
- package/scripts/postpack.mjs +43 -0
- package/scripts/prepack.mjs +222 -0
- package/scripts/tty-menu.mjs +100 -0
- package/skill/README.md +55 -0
- package/skill/SKILL.md +138 -0
- package/skill/catalog.json +406 -0
- package/skill/design-rules.md +282 -0
- package/skill/design-system.md +235 -0
- package/skill/docs/SKELETON-SHELL.md +120 -0
- package/skill/docs/bottom-buttons.md +155 -0
- package/skill/docs/control/button.md +147 -0
- package/skill/docs/control/calendar-navigator.md +143 -0
- package/skill/docs/control/calendar.md +128 -0
- package/skill/docs/control/check-box.md +117 -0
- package/skill/docs/control/combo.md +293 -0
- package/skill/docs/control/embed.md +211 -0
- package/skill/docs/control/image-box.md +237 -0
- package/skill/docs/control/input-date.md +175 -0
- package/skill/docs/control/input-file.md +192 -0
- package/skill/docs/control/input-mask.md +89 -0
- package/skill/docs/control/input-number.md +55 -0
- package/skill/docs/control/input-text.md +73 -0
- package/skill/docs/control/label.md +127 -0
- package/skill/docs/control/multi-input-box.md +51 -0
- package/skill/docs/control/radio-box.md +150 -0
- package/skill/docs/control/search.md +163 -0
- package/skill/docs/control/tab.md +240 -0
- package/skill/docs/control/tree.md +278 -0
- package/skill/docs/control.md +264 -0
- package/skill/docs/data-objects.md +278 -0
- package/skill/docs/data-sources.md +215 -0
- package/skill/docs/events.md +467 -0
- package/skill/docs/group.md +146 -0
- package/skill/docs/index.json +125 -0
- package/skill/docs/mockup-data.md +186 -0
- package/skill/docs/node.md +32 -0
- package/skill/docs/scenario.md +112 -0
- package/skill/docs/service/CustomSystem.md +139 -0
- package/skill/docs/service/Firestore.md +125 -0
- package/skill/docs/service/FlexAutoQuery.md +128 -0
- package/skill/docs/service/FlexSQL.md +96 -0
- package/skill/docs/service/Flextudio API.md +161 -0
- package/skill/docs/service/Flextudio.md +87 -0
- package/skill/docs/service/GoogleSheet.md +71 -0
- package/skill/docs/service/README.md +127 -0
- package/skill/docs/service/ksystem.md +76 -0
- package/skill/docs/service-binding.md +228 -0
- package/skill/docs/step.md +546 -0
- package/skill/docs/style-objects.md +183 -0
- package/skill/examples/README.md +147 -0
- package/skill/examples/basic/basic-list-detail.json +2521 -0
- package/skill/examples/basic/delivery-address-popup.json +2175 -0
- package/skill/examples/basic/fixedtop-floating-form.json +1524 -0
- package/skill/examples/basic/search-period-popup.json +1524 -0
- package/skill/examples/design/booking-wizard-3step.json +1335 -0
- package/skill/examples/design/list-detail-form-3step.json +1516 -0
- package/skill/examples/design/list-filter-2step.json +1365 -0
- package/skill/examples/design/list-filter-detail-3step.json +1570 -0
- package/skill/examples/design/result-entry-wizard-4step.json +1861 -0
- package/skill/examples/index.json +150 -0
- package/skill/examples/intent/mock-employee-list.json +54 -0
- package/skill/examples/intent/script-cart-flow.json +96 -0
- package/skill/examples/intent/script-dialog-confirm.json +61 -0
- package/skill/intent-rules.md +552 -0
- package/skill/intent-system.md +118 -0
- package/skill/patterns/atom/badge.json +103 -0
- package/skill/patterns/atom/button.json +111 -0
- package/skill/patterns/atom/checkbox.json +70 -0
- package/skill/patterns/atom/segmented-radio.json +92 -0
- package/skill/patterns/atom/switch.json +57 -0
- package/skill/patterns/index.json +471 -0
- package/skill/patterns/molecule/checklist.json +107 -0
- package/skill/patterns/molecule/input-action.json +355 -0
- package/skill/patterns/molecule/input-button.json +212 -0
- package/skill/patterns/molecule/input-pair.json +284 -0
- package/skill/references/build-sequence.md +55 -0
- package/skill/references/patterns-cheatsheet.md +87 -0
- package/skill/references/spec-evolve/README.md +43 -0
- package/skill/references/spec-evolve/conventions.md +92 -0
- package/skill/references/spec-evolve/data-connection.md +102 -0
- package/skill/references/spec-evolve/intake.md +41 -0
- package/skill/references/spec-evolve/key-roles.md +44 -0
- package/skill/references/spec-evolve/lint.md +27 -0
- package/skill/references/spec-evolve/mockup.md +50 -0
- package/skill/references/spec-evolve/query-screens.md +66 -0
- package/skill/references/spec-evolve/routing.md +43 -0
- package/skill/references/spec-evolve/spec-format.md +76 -0
- package/skill/references/spec-evolve/templates/master-detail.spec.md +97 -0
- package/skill/references/spec-evolve/templates/query-screen.spec.md +96 -0
- package/skill/references/spec-evolve/templates/static-prototype.spec.md +54 -0
- package/skill/references/spec-evolve/templates-index.json +26 -0
- package/skill/rules.md +400 -0
- package/skill/schemas/bottom-buttons.schema.json +134 -0
- package/skill/schemas/control/_base.schema.json +1296 -0
- package/skill/schemas/control/button.schema.json +55 -0
- package/skill/schemas/control/calendar-navigator.schema.json +164 -0
- package/skill/schemas/control/calendar.schema.json +18 -0
- package/skill/schemas/control/check-box.schema.json +41 -0
- package/skill/schemas/control/combo.schema.json +23 -0
- package/skill/schemas/control/embed.schema.json +30 -0
- package/skill/schemas/control/image-box.schema.json +49 -0
- package/skill/schemas/control/input-date.schema.json +27 -0
- package/skill/schemas/control/input-file.schema.json +139 -0
- package/skill/schemas/control/input-mask.schema.json +45 -0
- package/skill/schemas/control/input-number.schema.json +24 -0
- package/skill/schemas/control/input-text.schema.json +24 -0
- package/skill/schemas/control/label.schema.json +113 -0
- package/skill/schemas/control/multi-input-box.schema.json +19 -0
- package/skill/schemas/control/other.schema.json +24 -0
- package/skill/schemas/control/radio-box.schema.json +87 -0
- package/skill/schemas/control/search.schema.json +23 -0
- package/skill/schemas/control/tab.schema.json +112 -0
- package/skill/schemas/control/tree.schema.json +83 -0
- package/skill/schemas/control.schema.json +30 -0
- package/skill/schemas/data-objects.schema.json +161 -0
- package/skill/schemas/data-sources.schema.json +184 -0
- package/skill/schemas/design-system/design.schema.json +496 -0
- package/skill/schemas/events.schema.json +272 -0
- package/skill/schemas/group.schema.json +133 -0
- package/skill/schemas/index.json +362 -0
- package/skill/schemas/naming-objects.schema.json +133 -0
- package/skill/schemas/node.schema.json +24 -0
- package/skill/schemas/patterns/atom/badge.schema.json +44 -0
- package/skill/schemas/patterns/atom/button.schema.json +70 -0
- package/skill/schemas/patterns/atom/checkbox.schema.json +39 -0
- package/skill/schemas/patterns/atom/segmented-radio.schema.json +49 -0
- package/skill/schemas/patterns/atom/switch.schema.json +27 -0
- package/skill/schemas/patterns/molecule/checklist.schema.json +63 -0
- package/skill/schemas/patterns/molecule/input-action.schema.json +251 -0
- package/skill/schemas/patterns/molecule/input-button.schema.json +141 -0
- package/skill/schemas/patterns/molecule/input-pair.schema.json +210 -0
- package/skill/schemas/scenario.schema.json +161 -0
- package/skill/schemas/service/CustomSystem.schema.json +41 -0
- package/skill/schemas/service/Firestore.schema.json +28 -0
- package/skill/schemas/service/FlexAutoQuery.schema.json +35 -0
- package/skill/schemas/service/FlexSQL.schema.json +33 -0
- package/skill/schemas/service/Flextudio API.schema.json +115 -0
- package/skill/schemas/service/Flextudio.schema.json +26 -0
- package/skill/schemas/service/GoogleSheet.schema.json +31 -0
- package/skill/schemas/service/_base.schema.json +31 -0
- package/skill/schemas/service/ksystem.schema.json +36 -0
- package/skill/schemas/service-binding.schema.json +51 -0
- package/skill/schemas/step.schema.json +258 -0
- package/skill/schemas/style-objects.schema.json +155 -0
- package/skill/skill-guides/README.md +50 -0
- package/skill/skill-guides/control-options.md +126 -0
- package/skill/skill-guides/events.md +61 -0
- package/skill/skill-guides/failure-discipline.md +95 -0
- package/skill/skill-guides/index.json +40 -0
- package/skill/skill-guides/prompt-interview.md +92 -0
- package/skill/skill-guides/scripts.md +169 -0
- package/skill/skill-guides/step-navigation.md +98 -0
|
@@ -0,0 +1,264 @@
|
|
|
1
|
+
# 시나리오 생성 단계 — 스크립트 작성 규칙
|
|
2
|
+
|
|
3
|
+
AI 가 시나리오 메타를 자동 생성할 때 이벤트 스크립트 / Init / After Script 본문에 출력해도 되는 패턴과 그렇지 않은 패턴.
|
|
4
|
+
|
|
5
|
+
## 1. 핵심 원칙 (한 줄)
|
|
6
|
+
|
|
7
|
+
> 시나리오 생성 결과물의 스크립트 본문에서 사용 가능한 진입점은 **컬렉션 변형 + 리로드 두 영역뿐**. 그 외의 `f.*` / `_c.*` / `Current.*` / `f.Content().*` 멤버는 출력 금지 — 검증에서 차단.
|
|
8
|
+
|
|
9
|
+
| 영역 | 허용 멤버 |
|
|
10
|
+
|---|---|
|
|
11
|
+
| 컬렉션 변형 | `f.Collection.addSector(obj, '카테고리')`, `f.Collection.removeSector(status, '카테고리')` (특히 `'all'` 은 카테고리 비우기 표준 idiom) |
|
|
12
|
+
| 컬렉션 직접 접근 | `_c.카테고리[n].키`, `_c.카테고리.activeSector`, `_c.카테고리.set/setValue/remove/add/activate/getSUIDsOfStatus/getSectorsOfStatus`, `sector.set/setValue/delete/setStatus/select/unSelect`, `_c.mapper[suid]` |
|
|
13
|
+
| 리로드 (스텝 전체) | `Current.step.reload(isPositionReset?)`, `Current.step.reloadWithAnimation()` |
|
|
14
|
+
| 리로드 (부분 그룹) | `f.Content(fid).reload()`, `f.Content(fid, sector).reload()`, `f.Content(fid).reloadWithAnimation()` |
|
|
15
|
+
|
|
16
|
+
그 외에는 모두 **선언적 메타**로 표현. 자세한 매핑은 §3 참조.
|
|
17
|
+
|
|
18
|
+
## 2. 영역별 규칙
|
|
19
|
+
|
|
20
|
+
### 2-1. 컬렉션 — `f.Collection.*` vs `_c.*`
|
|
21
|
+
|
|
22
|
+
> 자세히는 [f_collection.md](./f_collection.md), [../collection/_c.md](../collection/_c.md), [../collection/sector.md](../collection/sector.md).
|
|
23
|
+
|
|
24
|
+
- **`f.Collection.addSector` + `f.Collection.removeSector` 허용**. 그 외 `f.Collection.{updateSector | moveCategory | removeCategory | createCategory | filter}` 출력 금지.
|
|
25
|
+
- `removeSector(status, '카테고리')` 의 `status` 는 `'all'` (카테고리 비우기 표준 idiom — 카테고리 자체는 유지) / `'added'` / `'updated'` / `'deleted'` / `'selected'` / `'active'`.
|
|
26
|
+
- 값 변경/제거/활성화/카테고리 멤버십은 모두 `_c.카테고리.*` 또는 `sector.*` 메서드를 사용.
|
|
27
|
+
|
|
28
|
+
### 2-1.1. 스크립트 종류별 섹터 접근 — 위치마다 다른 진입점
|
|
29
|
+
|
|
30
|
+
스크립트 본문에서 "그 행의 섹터" 를 가져오는 방법은 **스크립트가 어디 박혀있느냐** 에 따라 셋으로 갈린다. 절대 섞이지 않는다 — 정본은 [../collection/_c.md §6.5](../collection/_c.md).
|
|
31
|
+
|
|
32
|
+
| 스크립트 위치 | 섹터 접근 표준 | 금지 |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| 이벤트 Script (`Events.<name>` 의 `Action:'Script'` — `Init`/`Loaded`/`Click`/`change` 등) | `_c.카테고리[n].키` / `_c.카테고리.activeSector.키` | `_c.Sector`, bare `sector.X`, `Load.sector.X` |
|
|
35
|
+
| LoadScript (`{% ... %}` 본문 — 컨트롤 표시 단계) | `Load.sector.<field>` | `_c.Sector`, bare `sector.X`, `_c.<카테고리>...` |
|
|
36
|
+
| Filter Custom Script (`ParamBlock.Filters` 의 `FilterType:'Custom'`) | bare `sector.X` (필터링 대상 섹터가 변수로 주입) | `_c.Sector`, `Load.sector.X` |
|
|
37
|
+
|
|
38
|
+
**핵심 안티패턴** — `_c.Sector` / `_c.sector` 는 _카테고리 이름이 실제로 "Sector" 가 아닌 한_ 존재하지 않는 가짜 핸들. 어느 스크립트 위치에서도 출력 금지. "현재 섹터" 의도라면 위 매트릭스의 위치별 표준으로 교정한다.
|
|
39
|
+
|
|
40
|
+
```js
|
|
41
|
+
// ✗ 이벤트 스크립트
|
|
42
|
+
var routine = _c.Sector;
|
|
43
|
+
if (routine.WorkMon === 'Full') { ... }
|
|
44
|
+
|
|
45
|
+
// ✓ 카테고리 이름을 정확히 + activeSector 가드
|
|
46
|
+
if (!_c.CtgRoutine) return;
|
|
47
|
+
const routine = _c.CtgRoutine.activeSector;
|
|
48
|
+
if (!routine) return;
|
|
49
|
+
if (routine.WorkMon === 'Full') { ... }
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
```jinja
|
|
53
|
+
{# ✗ LoadScript 안에서 bare sector 또는 _c #}
|
|
54
|
+
{% return sector.WorkMon === 'Full' ? '월\n풀일' : '...' %}
|
|
55
|
+
|
|
56
|
+
{# ✓ Load.sector — 그 행의 섹터는 LoadScript 가 주입 #}
|
|
57
|
+
{% return Load.sector.WorkMon === 'Full' ? '월\n풀일'
|
|
58
|
+
: (Load.sector.WorkMon === 'Half' ? '월\n반일' : '월\n끔') %}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### 2-2. 리로드 — `Current.step` / `f.Content`
|
|
62
|
+
|
|
63
|
+
> 자세히는 [current_step.md](./current_step.md), [f_content.md](./f_content.md).
|
|
64
|
+
|
|
65
|
+
| 멤버 | 출력 허용 |
|
|
66
|
+
|---|---|
|
|
67
|
+
| `Current.step.reload(isPositionReset?)` | ✅ |
|
|
68
|
+
| `Current.step.reloadWithAnimation()` | ✅ |
|
|
69
|
+
| `f.Content(fid).reload()` | ✅ |
|
|
70
|
+
| `f.Content(fid, sector).reload()` | ✅ |
|
|
71
|
+
| `f.Content(fid).reloadWithAnimation()` | ✅ |
|
|
72
|
+
| `Current.step.{moveToNext, moveToPrev, moveToFirst, moveToParent, restart, id, prev, from}` | ❌ |
|
|
73
|
+
| `f.Content(fid).{show, hide, addRow, delRow, selectAll, deselectAll, clickPositionFixed, Scroll}` | ❌ |
|
|
74
|
+
|
|
75
|
+
### 2-3. 그 외 `f.*` 진입점
|
|
76
|
+
|
|
77
|
+
| 진입점 | 출력 허용 | 비고 |
|
|
78
|
+
|---|---|---|
|
|
79
|
+
| `f.Collection.addSector` | ✅ | 컬렉션 §2-1 |
|
|
80
|
+
| `f.Date()` | ✅ | 날짜 포맷팅 (하드코딩 대체) |
|
|
81
|
+
| `f.Script.load(...)` | ✅ | 동적 URL 등 부득이한 경우 한정 — **외부 라이브러리는 `Scenario.StyleURLs` 등록을 우선**(정적 URL) |
|
|
82
|
+
| `f.MessageBox(type).setTitle().setDescription().addButton(MOVETYPE_*, label, executeM).show()` | ✅ | 모달 다이얼로그 — 종결자는 `.show()` ([f_messagebox.md](./f_messagebox.md)) |
|
|
83
|
+
| `f.Event(name).runNext()` / `.break()` | ✅ | 다음 이벤트 호출/중단 |
|
|
84
|
+
| `f.Frame.popUp(...)` | ❌ | **다른 시나리오** 호출용. 같은 시나리오 PopUp/SlideUp 은 메타 (`StepDialogType`) 로 표현 |
|
|
85
|
+
| `f.Notification` | ❌ | 전체 사용자 대상 — 사용 금지 |
|
|
86
|
+
| `f.History.*` 조회 | ❌ | 분기 로직은 메타 옵션으로 |
|
|
87
|
+
|
|
88
|
+
> 공식 문서에 등장하지 않는 멤버 / 본 컨트랙트가 명시하지 않은 멤버는 **모두 금지**. AI 가 임의로 만들어 박지 않도록 strict 검증.
|
|
89
|
+
|
|
90
|
+
## 3. 작업 ↔ 권장 표현 (총괄)
|
|
91
|
+
|
|
92
|
+
> **AI 생성 시 intent short-form 우선** — 아래 표의 "intent 표기" 열이 있으면 그 형태로 작성. raw 표기는 intent 가 미지원하는 분기/조건이 있을 때만. intent 카탈로그: [runtime/v1/intent-system/INTENT.md](../intent-system/INTENT.md).
|
|
93
|
+
|
|
94
|
+
| 하고 싶은 일 | intent 표기 (1순위) | raw 표기 (intent 미지원 / fallback) | 금지 |
|
|
95
|
+
|---|---|---|---|
|
|
96
|
+
| Init 단계 mock 데이터 박기 | `intent.mock: { CtgX: [{...}, ...] }` | `f.Collection.addSector({...}, 'CtgX')` | (대안 없음) |
|
|
97
|
+
| 런타임 단건 섹터 추가 (Init 외) | (intent 미지원) | `f.Collection.addSector(obj, '카테고리')` | (대안 없음) |
|
|
98
|
+
| 활성 섹터 일괄 갱신 | `intent.script: { kind:'updateActive', cat, set:{...}, reload? }` | 가드 2단 + `cur.<k> = <v>;` + reload | `f.Collection.updateSector(...)` (가짜), set 매번 reload |
|
|
99
|
+
| 활성 섹터 완전삭제 | `intent.script: { kind:'deleteActive', cat, reload? }` | 가드 2단 + `cur.release();` + reload | `_c.<Cat>.deleteActiveSector()` (가짜), `.delete()` (deleted 잔존 — `[script-allow]` 차단) |
|
|
100
|
+
| 카테고리 비우기 | `intent.script: { kind:'clearCategory', cat, reload? }` | `f.Collection.removeSector('all', '카테고리')` + reload | `removeCategory + createCategory`, `_c.<Cat>.clear()` (가짜) |
|
|
101
|
+
| 그룹 부분 재렌더 | `intent.script: { kind:'reloadGroup', fid }` | `f.Content(fid).reload()` | 컨트롤 단위 reload (정적 분석 한계) |
|
|
102
|
+
| 모달 다이얼로그 | `intent.script: { kind:'dialog', type, title, body?, buttons:[...] }` | `f.MessageBox(type).setTitle()...show()` | `f.MessageBox().send(...)` (가짜 종결자), `f.Message(...)`, inline function 콜백 |
|
|
103
|
+
| Categories 정의 (Collections type) | `intent.categories: { CtgX: { ckey:'string'\|'int' } }` | (raw 직접 박는 건 권장 X — Panel.* 은 스튜디오 자동 재생성) | size 옵션 / decimal/bool/date 타입 |
|
|
104
|
+
| 특정 상태 섹터 일괄 제거 | (intent 미지원) | `f.Collection.removeSector('deleted', '카테고리')` | (해당 카테고리에 해당 상태가 없을 때만 빈 호출) |
|
|
105
|
+
| 카테고리 비우기/생성 | (생성 시 발생 없음 — 메타로 정적 정의) | `removeCategory + createCategory` |
|
|
106
|
+
| 필터링 표시 | 메타의 `TargetSector.Filters` 로 선언 | `f.Content(fid).hide()` / `f.Collection.filter(...)` |
|
|
107
|
+
| 항목 표시/숨김 | `TargetSector.Filters` 또는 그룹 분기 + 데이터로 구분 | `f.Content(fid).show()`/`hide()` |
|
|
108
|
+
| 행 추가 | `f.Collection.addSector(obj, '카테고리')` + 필요 시 `f.Content(fid).reload()` | `f.Content(fid).addRow(...)` |
|
|
109
|
+
| 행 삭제 | `_c.카테고리.activeSector.release()` (완전삭제) 또는 `_c.카테고리.removeSector(...suids)` + 필요 시 reload | `f.Content(fid).delRow(...)`, `.delete()` (deleted 잔존) |
|
|
110
|
+
| 화면 갱신 (부분) | `f.Content(fid).reload()` (또는 `reloadWithAnimation`) | (대안 없음 — 이게 표준) |
|
|
111
|
+
| 화면 갱신 (스텝 전체) | `Current.step.reload()` (또는 `reloadWithAnimation`) | (대안 없음 — 이게 표준) |
|
|
112
|
+
| **다음 Step 이동** | 메타: `BottomButton.MoveTo:"Next"` + `Next.MoveStepOrder:[...]` 또는 `UseMove:true` + `MoveSteps.MoveStepOrder:[...]` | `Current.step.moveToNext(...)` |
|
|
113
|
+
| **이전 Step 이동** | 메타: `BackButton.Next:"None"` 또는 `BottomButton.MoveTo:"Prev"`/`"Prev_ReStart"` | `Current.step.moveToPrev(...)` |
|
|
114
|
+
| Step 재시작 | 메타: `BottomButton.MoveTo:"Prev_ReStart"` | `Current.step.restart()` |
|
|
115
|
+
| 스텝 ID 분기 | 메타에서 분기 — 별도 Step / Event 로 분리 | `Current.step.id` 조회 분기 |
|
|
116
|
+
| 스크롤 제어 | 메타: `ScrollType` | `f.Content(fid).Scroll.*` |
|
|
117
|
+
|
|
118
|
+
## 4. 결정 트리
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
값을 변경하려고 한다
|
|
122
|
+
├─ 클릭/선택된 항목이 대상? → _c.카테고리.activeSector.{key} = 값
|
|
123
|
+
└─ 인덱스 특정 가능? → _c.카테고리[n].{key} = 값
|
|
124
|
+
아니면 순회: _c.카테고리.forEach(s => s.{key} = 값)
|
|
125
|
+
|
|
126
|
+
새 섹터 추가
|
|
127
|
+
└─ f.Collection.addSector(obj, '카테고리')
|
|
128
|
+
(added 표시 필요 시 sector.setStatus('added'))
|
|
129
|
+
|
|
130
|
+
섹터 삭제
|
|
131
|
+
└─ sector.release() (완전삭제 — 생성 시나리오 정본)
|
|
132
|
+
또는 _c.카테고리.removeSector(...suids)
|
|
133
|
+
※ sector.delete() 금지 — added 가 아니면 deleted 잔존 ([script-allow] 차단)
|
|
134
|
+
|
|
135
|
+
활성 섹터 변경
|
|
136
|
+
└─ _c.카테고리.activate(suid)
|
|
137
|
+
|
|
138
|
+
화면을 다시 그리고 싶다
|
|
139
|
+
├─ 한 그룹/카드만 → f.Content('fid').reload() (또는 reloadWithAnimation)
|
|
140
|
+
└─ 스텝 전체 → Current.step.reload() (또는 reloadWithAnimation)
|
|
141
|
+
|
|
142
|
+
다음/이전 Step 으로 이동하고 싶다
|
|
143
|
+
└─ 스크립트 출력 금지. 메타의 BottomButton / UseMove 채널로 선언적 표현.
|
|
144
|
+
|
|
145
|
+
Step 의 ID/이전 Step 정보가 필요하다
|
|
146
|
+
└─ 스크립트 분기 금지. 메타에서 별도 Event / Step 으로 분리.
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
## 5. 가드와 안전 패턴
|
|
150
|
+
|
|
151
|
+
### 5-1. 카테고리 존재 가드 (필수)
|
|
152
|
+
|
|
153
|
+
```js
|
|
154
|
+
if (!_c.카테고리) return;
|
|
155
|
+
const cur = _c.카테고리.activeSector;
|
|
156
|
+
if (!cur) return;
|
|
157
|
+
cur.fStatus = '확정';
|
|
158
|
+
f.Content('f_listGroup').reload();
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
`_c.카테고리` 가 `undefined` 인 시점이 있다 (`removeCategory` 후, 서브시나리오 클론, restoreCollection 직후). 항상 가드.
|
|
162
|
+
|
|
163
|
+
### 5-2. activeSector 가드
|
|
164
|
+
|
|
165
|
+
`Block.activeSector` getter 는 fallback 으로 첫 섹터를 반환하지만 카테고리가 비어있으면 `undefined`.
|
|
166
|
+
|
|
167
|
+
### 5-3. SUID 사용 시 mapper 검증
|
|
168
|
+
|
|
169
|
+
```js
|
|
170
|
+
const s = _c.mapper[suid];
|
|
171
|
+
if (!s) return;
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
## 6. 절대 금지 (validator 가 차단하는 패턴)
|
|
175
|
+
|
|
176
|
+
- `_c.Sector` / `_c.sector` — 가짜 핸들 (§2-1.1, [../collection/_c.md §6.5](../collection/_c.md)). 이벤트 스크립트는 `_c.<실제카테고리>.activeSector` / `_c.<실제카테고리>[n]`, LoadScript 는 `Load.sector.<field>` 로 교정.
|
|
177
|
+
- 이벤트 Script 본문에서 `Load.sector.X` — LoadScript 전용.
|
|
178
|
+
- LoadScript(`{% %}`) 본문에서 bare `sector.X` 또는 `_c.<카테고리>...` — `Load.sector.X` 로 교정.
|
|
179
|
+
- `f.Collection.{updateSector | moveCategory | removeCategory | createCategory | filter}` 호출 — 모두 차단 (`removeSector` 는 허용)
|
|
180
|
+
- `Current.step.{moveToNext | moveToPrev | moveToFirst | moveToParent | restart}` 호출
|
|
181
|
+
- `Current.step.{id | prev | from}` 조회 (이벤트 스크립트 본문에서)
|
|
182
|
+
- `f.Content(fid).{show | hide | addRow | delRow | selectAll | deselectAll | Scroll}` 호출
|
|
183
|
+
- `f.Content(fid).clickPositionFixed.*`
|
|
184
|
+
- `f.Frame.popUp(...)` (다른 시나리오 호출용 — 같은 시나리오 PopUp/SlideUp 은 메타로 표현)
|
|
185
|
+
- `f.Notification` (전체 발송)
|
|
186
|
+
- `f.History.*` 분기 로직
|
|
187
|
+
- `_c[0].set(...)` 을 `createCategory` 없이 — TypeError 직결
|
|
188
|
+
- `f.MessageBox()` 안에 inline function (`addBtn` / `addButton` 콜백) — `scenario.Events` 의 키 문자열만
|
|
189
|
+
- 컨트롤 단위 `reload()` — 그룹 ID 만 허용
|
|
190
|
+
- 본 컨트랙트가 명시하지 않은 멤버 — strict 차단
|
|
191
|
+
|
|
192
|
+
### 6-1. 자주 박히는 가짜 핸들 — 명시적 차단 (validator 정규식 박힘)
|
|
193
|
+
|
|
194
|
+
| 가짜 | 진짜 | 정본 |
|
|
195
|
+
|---|---|---|
|
|
196
|
+
| `_c.<Cat>.clear()` | 카테고리 비우기 표준 idiom 은 `f.Collection.removeSector('all', '<Cat>')` (카테고리 자체는 유지, 섹터만 제거). 활성 섹터만 비우려면 `_c.<Cat>.activeSector.release()` | [f_collection.md §3-1](./f_collection.md), [../collection/sector.md §4-4](../collection/sector.md) |
|
|
197
|
+
| `_c.<Cat>.deleteActiveSector()` | `_c.<Cat>.activeSector.release()` (완전삭제). `.delete()` 는 deleted 잔존(백엔드 동기화용) — 생성 시나리오 금지 (`[script-allow]` 차단) | [../collection/sector.md §4-4](../collection/sector.md) |
|
|
198
|
+
| `_c.<Cat>.activeSector(...)` | `activeSector` 는 프로퍼티. 괄호 없이 `_c.<Cat>.activeSector.<필드>`. 메서드 호출은 `.activeSector.set(...)` / `.release()` / `.setStatus(...)` 로 sector 메서드 체인 | [../collection/category.md §3](../collection/category.md) |
|
|
199
|
+
| `_c.<Cat>.sectors(...)` | `sectors` 는 카테고리 자체(=this, `Category extends Array`). 괄호 없이 `_c.<Cat>.sectors` 또는 동등하게 `_c.<Cat>` / `_c.<Cat>.forEach(...)` | [../collection/category.md §3](../collection/category.md) |
|
|
200
|
+
| `_c.<Cat>.{suids\|active\|name\|status}(...)` | 모두 프로퍼티 — 괄호 없이 | [../collection/category.md §3](../collection/category.md) |
|
|
201
|
+
| `f.MessageBox().send(...)` / `.setBody(...)` / `.chain(...)` / `.addReceiver(...)` | `f.MessageBox(type).setTitle(...).setDescription(...).addButton(MOVETYPE_*, label, executeM).show()` — **종결자는 `.show()`**, 본문 setter 는 `setDescription`. 가짜 `f.Message()` (인스턴스) 도 동일하게 차단 | [f_messagebox.md](./f_messagebox.md) |
|
|
202
|
+
| `{=필드}` (event Script 본문에 박힘) | `{=필드}` 는 Label.labeltext / Button text / ConditionValue 같은 **display 컨텍스트 전용** 토큰. event Script 안에서는 `_c.<카테고리>.activeSector.<필드>` 또는 `_c.<카테고리>[n].<필드>` 로 명시적 참조. JS 문자열 안의 `'{=Name}'` 도 동일 — 그대로 박히면 치환 안 됨 | [../../schema/v1/data-objects.md](../../schema/v1/data-objects.md) `{=Field}` |
|
|
203
|
+
|
|
204
|
+
## 7. 검증 설계 (validator)
|
|
205
|
+
|
|
206
|
+
생성된 스크립트 본문(이벤트 스크립트 / Init / After Script / LoadScript) 을 정적으로 분석하여 위 정책을 강제한다.
|
|
207
|
+
|
|
208
|
+
### 7-1. 화이트리스트 — 허용된 호출 패턴
|
|
209
|
+
|
|
210
|
+
```
|
|
211
|
+
ALLOW_F_COLLECTION = /\bf\.Collection\.addSector\s*\(/
|
|
212
|
+
ALLOW_F_DATE = /\bf\.Date\s*\(/
|
|
213
|
+
ALLOW_F_SCRIPT_LOAD = /\bf\.Script\.load\s*\(/
|
|
214
|
+
ALLOW_F_MESSAGEBOX = /\bf\.MessageBox\s*\(/
|
|
215
|
+
ALLOW_F_EVENT = /\bf\.Event\s*\(/
|
|
216
|
+
ALLOW_CURRENT_RELOAD = /\bCurrent\.step\.reload(WithAnimation)?\s*\(/
|
|
217
|
+
ALLOW_F_CONTENT_RELOAD = /\bf\.Content\s*\([^)]*\)\s*\.reload(WithAnimation)?\s*\(/
|
|
218
|
+
ALLOW_C = /\b_c\b\.[A-Za-z_]/ // _c.* 은 모두 허용 (직접 대입/메서드)
|
|
219
|
+
ALLOW_SECTOR_METHODS = /\b\.(set|setValue|setStatus|delete|select|unSelect|activate|add|remove|removeSector|getSUIDsOfStatus|getSectorsOfStatus|forEach|filter)\s*\(/ // 어떤 객체 뒤든 OK (오탐 허용)
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
### 7-2. 블랙리스트 — 차단해야 하는 호출 패턴
|
|
223
|
+
|
|
224
|
+
```
|
|
225
|
+
DENY_F_COLLECTION_OTHER = /\bf\.Collection\.(updateSector|moveCategory|removeCategory|createCategory|filter)\s*\(/ // removeSector 는 허용 ('all' / status 필터)
|
|
226
|
+
DENY_F_FRAME_POPUP = /\bf\.Frame\.popUp\s*\(/
|
|
227
|
+
DENY_F_NOTIFICATION = /\bf\.Notification\b/
|
|
228
|
+
DENY_F_HISTORY = /\bf\.History\.[A-Za-z]/
|
|
229
|
+
DENY_CURRENT_NAV = /\bCurrent\.step\.(moveToNext|moveToPrev|moveToFirst|moveToParent|restart)\s*\(/
|
|
230
|
+
DENY_CURRENT_INFO = /\bCurrent\.step\.(id|prev|from)\b/
|
|
231
|
+
DENY_F_CONTENT_OTHER = /\bf\.Content\s*\([^)]*\)\s*\.(show|hide|addRow|delRow|selectAll|deselectAll|clickPositionFixed|Scroll)\b/
|
|
232
|
+
DENY_C_FAKE_SECTOR = /\b_c\.[Ss]ector\b/ // _c.Sector / _c.sector 가짜 핸들 (§2-1.1)
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### 7-2.1. 위치 의존 검사 — 스크립트 종류별 섹터 접근
|
|
236
|
+
|
|
237
|
+
스크립트 본문이 박힌 노드의 종류(이벤트 Script / LoadScript / Filter Custom)에 따라 다음을 분기 검사 — 매트릭스는 §2-1.1.
|
|
238
|
+
|
|
239
|
+
| 위치 | 추가 차단 패턴 | 사유 |
|
|
240
|
+
|---|---|---|
|
|
241
|
+
| 이벤트 Script 본문 | `\bLoad\.sector\b` | LoadScript 전용 진입점 |
|
|
242
|
+
| LoadScript(`{% %}`) 본문 | `(^|[^.])\bsector\b\s*\.`, `\b_c\.[A-Za-z_]` | 그 행의 섹터는 `Load.sector` 로 주입 — bare `sector` / `_c.<카테고리>` 금지 |
|
|
243
|
+
| Filter Custom `Script` | `\bLoad\.sector\b` | LoadScript 전용 진입점 |
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
### 7-3. unknown 멤버 검출
|
|
247
|
+
|
|
248
|
+
`f.X` / `_c.Y.Z` / `Current.W` 형태를 정규식으로 추출 → 화이트리스트에 없으면 경고.
|
|
249
|
+
오탐을 줄이기 위해 다음은 화이트리스트:
|
|
250
|
+
- `_c` 뒤의 모든 점/대괄호 접근 (카테고리/섹터 레퍼런스)
|
|
251
|
+
- `sector` / `s` / `cur` / `_c.카테고리[N]` 등 변수에 받은 뒤 점접근 (정적분석 한계)
|
|
252
|
+
|
|
253
|
+
### 7-4. validator 추가 항목 (`validator.ts` 신규 체크)
|
|
254
|
+
|
|
255
|
+
- `script_uses_disallowed_navigation` — `Current.step.move*` / `restart` 검출 시 fail
|
|
256
|
+
- `script_uses_disallowed_content_op` — `f.Content().show/hide/addRow/...` 검출 시 fail
|
|
257
|
+
- `script_uses_disallowed_collection_op` — `f.Collection.{updateSector|moveCategory|removeCategory|createCategory|filter}` 검출 시 fail (`removeSector` 는 허용)
|
|
258
|
+
- `script_uses_disallowed_frame_or_history` — `f.Frame.popUp` / `f.History.*` / `f.Notification` 검출 시 fail
|
|
259
|
+
- `script_uses_fake_sector_handle` — `_c.Sector` / `_c.sector` 검출 시 fail (§2-1.1)
|
|
260
|
+
- `script_uses_load_sector_outside_loadscript` — 이벤트/Filter Custom 본문에서 `Load.sector` 검출 시 fail
|
|
261
|
+
- `loadscript_uses_bare_sector_or_c` — LoadScript 본문에서 bare `sector.` 또는 `_c.<카테고리>...` 검출 시 fail
|
|
262
|
+
- 기존 `script_validation` (nested MessageBox 등) 은 유지
|
|
263
|
+
|
|
264
|
+
각 검출 시 위반 라인과 권장 대체 패턴(§3 매핑) 을 함께 출력.
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
# Scenario shell — outer wrap of every scenario JSON
|
|
2
|
+
|
|
3
|
+
> The outer wrap — ScenarioMeta + `Steps` map + each Step's metadata — is **always raw**. Use the skeleton below; schemas (`scenario.schema.json`, `step.schema.json`, `bottom-buttons.schema.json`) are the validation contract.
|
|
4
|
+
|
|
5
|
+
## 1. Canonical scenario skeleton (copy → fill `…`)
|
|
6
|
+
|
|
7
|
+
```jsonc
|
|
8
|
+
{
|
|
9
|
+
// ─── ScenarioMeta — top-level fixed slots (DO NOT vary const fields) ───
|
|
10
|
+
"modules": {}, // ★ const {}
|
|
11
|
+
"htmlkey": "stephtml", // ★ const "stephtml"
|
|
12
|
+
"ScenarioTitle": "", // ★ const "" — display name lives in fScenarioName
|
|
13
|
+
"fConverterVersion": 1, // ★ const number 1 (not string)
|
|
14
|
+
"fScenarioName": "…", // display name (free string)
|
|
15
|
+
"Collections": {}, // ★ const {} — engine fills at runtime
|
|
16
|
+
"FlexSQLService": {}, // ★ const {}
|
|
17
|
+
"ServiceBinding": {}, // ★ const {} — [no-service] strict
|
|
18
|
+
|
|
19
|
+
// ─── Steps routing ───
|
|
20
|
+
"StartSteps": ["Step1"], // ≥1 required when Steps non-empty
|
|
21
|
+
|
|
22
|
+
// ─── Steps map (keys: ^Step[1-9][0-9]*$) ───
|
|
23
|
+
"Steps": {
|
|
24
|
+
"Step1": {
|
|
25
|
+
"StepName": "…", // internal name
|
|
26
|
+
"StepType": "StepView", // "StepView" | "StepSub". Always author explicitly
|
|
27
|
+
"StepRow": 0,
|
|
28
|
+
"StepCol": 0,
|
|
29
|
+
"Contents": [ // pattern invocations + raw Groups
|
|
30
|
+
// { "<patternName>": { ...props } }
|
|
31
|
+
// { "ContentsType": "Group", "UseDataConnection": false, "Contents": [ … ] } // raw Group fallback — UseDataConnection 필수(생략 시 [group-dc])
|
|
32
|
+
],
|
|
33
|
+
"Next": ["Step2"], // forward-only StepIds. [] for terminal
|
|
34
|
+
"UseStepHeader": false, // true ⇒ author StepTitle
|
|
35
|
+
"UseBackButton": false, // StepSub forces false
|
|
36
|
+
"UseBottomButton": false, // StepSub forces false
|
|
37
|
+
"UseEvents": false, // true ⇒ Events is object (§3); false ⇒ Events is []
|
|
38
|
+
"Events": []
|
|
39
|
+
}
|
|
40
|
+
},
|
|
41
|
+
|
|
42
|
+
// ─── Optional top-level slots ───
|
|
43
|
+
"Language": {}, // i18n map for {{key}} substitution
|
|
44
|
+
"Events": {}, // scenario-level handlers — Script / LinkedEvent only (NO Service/API)
|
|
45
|
+
"DataSources": {}, // for Combo / RadioBox / Search / Tree
|
|
46
|
+
"Scenario": { "StyleURLs": [] }, // external JS lib URLs
|
|
47
|
+
"Panel": { // data model slot — AI emits empty shapes
|
|
48
|
+
"Collection": { "Ckeys": [] },
|
|
49
|
+
"Category": {},
|
|
50
|
+
"CategoryOrder": [],
|
|
51
|
+
"Table": [],
|
|
52
|
+
"ExternalTable": [],
|
|
53
|
+
"AuthKey": []
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
**Common rejections by `flex-scenario validate`:**
|
|
59
|
+
- ❌ Scenario name in `ScenarioTitle` → must be `""`; use `fScenarioName`
|
|
60
|
+
- ❌ `fConverterVersion: "1"` string → must be number `1`
|
|
61
|
+
- ❌ `ServiceBinding: { ... }` non-empty → must be `{}` ([no-service])
|
|
62
|
+
- ❌ Missing `StartSteps` when `Steps` non-empty
|
|
63
|
+
- ❌ `Collections` or `Panel.Collection.Ckeys` non-empty
|
|
64
|
+
- ❌ Authoring `EmbedScenarioPrefix` → schema forbids the key
|
|
65
|
+
|
|
66
|
+
## 2. Step shape
|
|
67
|
+
|
|
68
|
+
StepId pattern: `^Step[1-9][0-9]*$`. Always author `StepType: "StepView"` explicitly unless embedding a sub-scenario.
|
|
69
|
+
|
|
70
|
+
| Field | Type | Notes |
|
|
71
|
+
|---|---|---|
|
|
72
|
+
| `StepName` | `string` | Always author — internal display name |
|
|
73
|
+
| `StepType` | `"StepView"` \| `"StepSub"` | Omit ⇒ runtime treats as StepView |
|
|
74
|
+
| `Contents` | `Group[]` | Page body — patterns + raw Groups |
|
|
75
|
+
| `Next` | `string[]` | Forward-only StepIds. `[]` for terminal |
|
|
76
|
+
| `StepTitle` | `string` | Only with `UseStepHeader: true` |
|
|
77
|
+
| `UseStepHeader` | `boolean` | Top header toggle |
|
|
78
|
+
| `FixedContentsTop` | `Group[]` | Sticky top region (top-bar pattern) |
|
|
79
|
+
| `FixedContentsBottom` | `Group[]` | Sticky bottom — canonical place for primary `button` atom |
|
|
80
|
+
| `UseBackButton` | `boolean` | + author `BackButton` block. **StepSub forces false** |
|
|
81
|
+
| `UseBottomButton` | `boolean` | + author `BottomButtons[]` for fixed-bottom CTAs. **StepSub forces false**. For *inline body* buttons use the `button` pattern instead |
|
|
82
|
+
| `UseEvents` | `boolean` | See §3. **StepSub forces false** |
|
|
83
|
+
|
|
84
|
+
Step-level styling (`Padding` / `Margin` / `BgStyle`, plus dialog-only `Width` / `Height`) uses **raw** shapes. Engine defaults usually fit — author only when overriding. Read `step.schema.json` for shapes.
|
|
85
|
+
|
|
86
|
+
## 3. `Step.Events` shape
|
|
87
|
+
|
|
88
|
+
```jsonc
|
|
89
|
+
// UseEvents: true → Events is an OBJECT
|
|
90
|
+
{
|
|
91
|
+
"UseEvents": true,
|
|
92
|
+
"Events": {
|
|
93
|
+
"StepEventOrder": ["Init", "Loaded"], // enum the events that fire
|
|
94
|
+
"Init": "handlerName_a", // required for each entry in StepEventOrder (matching key)
|
|
95
|
+
"Loaded": "handlerName_b"
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
// UseEvents: false → Events MUST be an empty ARRAY (not {})
|
|
100
|
+
{ "UseEvents": false, "Events": [] }
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
Event enum (6): `Init` / `Loaded` / `OnBackLoaded` / `OnLeave` / `OnForeground` / `ScrollEnd`.
|
|
104
|
+
Each handler name must exist in scenario-level `Events` — else `[event-ref]` fails.
|
|
105
|
+
|
|
106
|
+
**Common mistakes:**
|
|
107
|
+
- ❌ `UseEvents: false, Events: {}` → must be `[]`
|
|
108
|
+
- ❌ Listing `"Init"` in `StepEventOrder` without the matching `"Init": "handler"` key
|
|
109
|
+
- ❌ Authoring `"Init"` handler key but omitting it from `StepEventOrder` (won't fire)
|
|
110
|
+
|
|
111
|
+
## 4. When to fetch full schemas
|
|
112
|
+
|
|
113
|
+
The §1 skeleton covers ~95%. Read the schema file directly for edge cases:
|
|
114
|
+
|
|
115
|
+
- `scenario.schema.json` — top-level scenarioMeta
|
|
116
|
+
- `step.schema.json` — single Step. Required for **StepSub** (`Protocol` block) and **Dialog variants** (`StepDialogType: "SlideUp"` / `"PopUp"` — unlocks `useDim` / `dimTransp` / `Width` / `Height` / `PopupPosition`)
|
|
117
|
+
- `bottom-buttons.schema.json` — BottomButtons[] item
|
|
118
|
+
- `group.schema.json` — raw Group
|
|
119
|
+
- `data-sources.schema.json` — DataSources map
|
|
120
|
+
- `events.schema.json` — Action shapes for scenario-level Events
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
# BottomButtons
|
|
2
|
+
|
|
3
|
+
Step 의 **하단 고정 버튼 채널**. `Step.BottomButtons` 배열의 각 항목 = 하나의 `BottomButton` 객체.
|
|
4
|
+
|
|
5
|
+
## 식별
|
|
6
|
+
|
|
7
|
+
- 위치: `Scenario.Steps[StepId].BottomButtons[*]`
|
|
8
|
+
- 토글: 같은 Step 의 `UseBottomButton: true` (false 면 빈 배열만 허용)
|
|
9
|
+
- 부모: **Step 의 직접 자식**. `Contents` / `FixedContentsTop` / `FixedContentsBottom` 의 자식 아님.
|
|
10
|
+
- StepSub 에서는 `UseBottomButton: false` 자동 강제 → BottomButtons 사용 불가.
|
|
11
|
+
|
|
12
|
+
## 스키마
|
|
13
|
+
|
|
14
|
+
`bottom-buttons.schema.json` — 단일 BottomButton 객체 정의. Step 스키마는 `BottomButtons: { type: "array", items: { $ref: "bottom-buttons.schema.json" } }` 로 합성.
|
|
15
|
+
|
|
16
|
+
## 핵심 필드
|
|
17
|
+
|
|
18
|
+
| 키 | 타입 | 비고 |
|
|
19
|
+
|---|---|---|
|
|
20
|
+
| `Id` | `f_숫자` | 🔴 필수, 시나리오 전체 유일 |
|
|
21
|
+
| `ButtonName` | string | 화면 표시 텍스트, 다국어 `{{}}` 권장 |
|
|
22
|
+
| `MoveTo` | enum | `Next` \| `None` \| `Prev` \| `Prev_ReStart` \| `Init` |
|
|
23
|
+
| `Next` | object | `MoveTo="Next"` 일 때 **필수**. `{ MoveStepOrder: ["StepN"], StepN: "" }` — **슬롯 값은 빈 문자열** |
|
|
24
|
+
| `Prev` | object | `MoveTo="Prev"` / `"Prev_ReStart"` 일 때 **필수**. `{ MoveStepOrder: [] }` |
|
|
25
|
+
| `Direction` | string | 네비게이션 방향 보조값. Next 버튼 canonical emit 은 `""` |
|
|
26
|
+
| `IsRestored` | bool / `""` | 콜렉션 이전 상태로 복원 (취소/Prev 흐름). Flextudio canonical emit 은 `""` |
|
|
27
|
+
| `IsIgnoreRequired` | bool | `MoveTo="Next"` 시 필수입력 검증 무시 여부. Flextudio Next 버튼 canonical emit |
|
|
28
|
+
| `IsRequired` | bool | `MoveTo="Prev"`/`"Prev_ReStart"` 시 필수입력 보존 여부 |
|
|
29
|
+
| `Events` | object | `{ "Click": "핸들러명" }`. UseEvents 토글 없이 직접 사용 |
|
|
30
|
+
| `LoadScript` | string | 동적 표시/숨김 (`f.bottom().style().display(...)`) |
|
|
31
|
+
| `Width`, `Height` | sizeObject | 버튼 크기 |
|
|
32
|
+
| `Padding`, `Margin` | spacing | 여백 |
|
|
33
|
+
| `BgStyle`, `FontStyle`, `BorderStyle` | style | 시각 스타일 |
|
|
34
|
+
| `ImageStyle` | object | ⚠️ **렌더링 시 적용 제외** (`bottombuttons.js`). 신규 생성 시 누락 권장 |
|
|
35
|
+
| `UseFixedSize` | bool | 고정 크기 사용 |
|
|
36
|
+
| `UseDesign` | bool | 디자인 묶음 적용 |
|
|
37
|
+
|
|
38
|
+
## MoveTo 분기 규칙 (상호배타)
|
|
39
|
+
|
|
40
|
+
| MoveTo | 동작 | top-level 키 (반드시) | top-level 키 (금지) |
|
|
41
|
+
|---|---|---|---|
|
|
42
|
+
| `Next` | 다음 Step 으로 이동 | `Next.MoveStepOrder` (1개 이상) + 각 StepN 슬롯 `""` | `Prev` |
|
|
43
|
+
| `Prev` | 이전 Step 으로 이동 | `Prev` (보통 `{ MoveStepOrder: [] }`) | `Next` |
|
|
44
|
+
| `Prev_ReStart` | 이전 Step 이동 + 재시작 | `Prev` | `Next` |
|
|
45
|
+
| `None` | 이동 없음, 이벤트만 실행 | (없음) — `Events.Click` 권장 | — |
|
|
46
|
+
| `Init` | 시나리오 처음 Step 이동 | (없음) | — |
|
|
47
|
+
|
|
48
|
+
> ⚠️ **Next 버튼에 placeholder Prev 박지 말 것**. 그 반대도 마찬가지. Flextudio 스튜디오는 한 쪽만 emit 한다.
|
|
49
|
+
|
|
50
|
+
## 핵심 함정 (LLM 생성 실패 사례)
|
|
51
|
+
|
|
52
|
+
1. **`Next.Step{N}` 슬롯 값이 빈 객체 `{}` 가 아니라 빈 문자열 `""`**:
|
|
53
|
+
```jsonc
|
|
54
|
+
// ❌ 잘못됨 — schema 거부
|
|
55
|
+
"Next": { "MoveStepOrder": ["Step2"], "Step2": {} }
|
|
56
|
+
|
|
57
|
+
// ✅ canonical
|
|
58
|
+
"Next": { "MoveStepOrder": ["Step2"], "Step2": "" }
|
|
59
|
+
```
|
|
60
|
+
문자열을 받는 이유는 조건/Direction 등 향후 슬롯 확장 여지가 있기 때문 (현재 엔진 emit 은 `""`).
|
|
61
|
+
|
|
62
|
+
2. **MoveTo=Next 인데 placeholder `Prev: { MoveStepOrder: [] }` 까지 emit** → schema 거부.
|
|
63
|
+
|
|
64
|
+
3. **MoveTo=Next 인데 `Direction` / `IsIgnoreRequired` 누락** — schema 가 강제하진 않지만 Flextudio canonical 형태에 맞추려면 함께 emit.
|
|
65
|
+
|
|
66
|
+
## Canonical 키 순서 (Flextudio emit 순서)
|
|
67
|
+
|
|
68
|
+
JSON 자체는 키 순서를 강제하지 않지만, 가능하면 Flextudio 스튜디오 emit 순서로 작성:
|
|
69
|
+
|
|
70
|
+
```
|
|
71
|
+
Id → ButtonName → MoveTo → (스타일 키: Width/Height/Padding/Margin/BgStyle/BorderStyle/FontStyle)
|
|
72
|
+
→ IsRestored → IsIgnoreRequired → Direction → Next | Prev
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## 예시
|
|
76
|
+
|
|
77
|
+
### 1) 다음 Step 으로 이동 (canonical)
|
|
78
|
+
|
|
79
|
+
```jsonc
|
|
80
|
+
{
|
|
81
|
+
"Id": "f_7",
|
|
82
|
+
"ButtonName": "{{등록}}",
|
|
83
|
+
"MoveTo": "Next",
|
|
84
|
+
"Width": { "SizeValue": 100, "SizeUnit": "%" },
|
|
85
|
+
"BgStyle": { "UseBackground": true, "BgColor": "var(--colorMain)" },
|
|
86
|
+
"IsRestored": "",
|
|
87
|
+
"IsIgnoreRequired": false,
|
|
88
|
+
"Direction": "",
|
|
89
|
+
"Next": {
|
|
90
|
+
"MoveStepOrder": ["Step2"],
|
|
91
|
+
"Step2": ""
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### 2) 이전 Step (저장 후 복귀)
|
|
97
|
+
|
|
98
|
+
```jsonc
|
|
99
|
+
{
|
|
100
|
+
"Id": "f_13",
|
|
101
|
+
"ButtonName": "{{취소}}",
|
|
102
|
+
"MoveTo": "Prev",
|
|
103
|
+
"Width": { "SizeValue": 100, "SizeUnit": "%" },
|
|
104
|
+
"IsRestored": "",
|
|
105
|
+
"Prev": { "MoveStepOrder": [] }
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### 3) 이벤트만 실행 (이동 없음)
|
|
110
|
+
|
|
111
|
+
```jsonc
|
|
112
|
+
{
|
|
113
|
+
"Id": "f_2",
|
|
114
|
+
"ButtonName": "{{승인}}",
|
|
115
|
+
"MoveTo": "None",
|
|
116
|
+
"Events": { "Click": "saveAndApprove" }
|
|
117
|
+
}
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
## Step 트리에서의 위치
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
Steps[StepN]
|
|
124
|
+
├── UseBottomButton: true ← 토글
|
|
125
|
+
├── StepButton: { ... } ← 영역(컨테이너) 스타일
|
|
126
|
+
├── BottomButtons: [ ← 본 스키마
|
|
127
|
+
│ { Id, ButtonName, MoveTo, ... },
|
|
128
|
+
│ ...
|
|
129
|
+
│ ]
|
|
130
|
+
├── Contents: [...] ← 별개 (메인 영역)
|
|
131
|
+
├── FixedContentsTop: [...]
|
|
132
|
+
└── FixedContentsBottom: [...]
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
`StepButton` 은 BottomButtons 영역 자체(컨테이너)의 스타일 묶음이며, 개별 버튼은 BottomButtons 배열의 각 항목이 본인 스타일(`BgStyle` 등)을 따로 가진다.
|
|
136
|
+
|
|
137
|
+
## 제약
|
|
138
|
+
|
|
139
|
+
1. **Id 유일성**: 시나리오의 모든 컨트롤/버튼과 충돌 금지 (`^f_[1-9][0-9]*$`).
|
|
140
|
+
2. **StepSub 금지**: StepSub Step 은 자체 화면이 없으므로 BottomButtons 비어있어야 함.
|
|
141
|
+
3. **MoveTo 별 키 상호배타**: `MoveTo="Next"` 이면 top-level `Next` 만, `MoveTo="Prev"/"Prev_ReStart"` 이면 top-level `Prev` 만 (반대편 키 emit 금지 — schema if/then 으로 강제).
|
|
142
|
+
4. **`MoveTo='Next'` + `Next.MoveStepOrder` 1개 이상**: 후보 Step 이 없으면 클릭 시 동작 없음.
|
|
143
|
+
5. **`Next.Step{N}` 슬롯 = 문자열**: canonical 빈 문자열 `""`. 빈 객체 `{}` 는 schema 가 거부.
|
|
144
|
+
6. **자기 자신 Step 참조**: BottomButton 의 `Next` 객체는 임의 Step 참조 가능 (`Step.Next` 의 forward-only 규칙과 별개). 단, 자기 자신 StepId 참조는 후검증에서 차단.
|
|
145
|
+
7. **ImageStyle 효과 없음**: 런타임(`bottombuttons.js`) 이 의도적으로 ImageStyle 적용을 건너뜀.
|
|
146
|
+
|
|
147
|
+
## 런타임 매핑
|
|
148
|
+
|
|
149
|
+
- 메타 키 ↔ 런타임 상수 (`public/engine/common/const.js`)
|
|
150
|
+
- `BottomButtons` ↔ `K_BOTTOMBUTTONS`
|
|
151
|
+
- `UseBottomButton` ↔ `K_USE_BTMBUTTON`
|
|
152
|
+
- `ButtonName` ↔ `K_BUTTONNAME`
|
|
153
|
+
- 컴포넌트 단위 ↔ `COMPONENT_UNIT.BOTTOMBUTTON = 'BottomButton'`
|
|
154
|
+
- 렌더러: `public/engine/runtime/bottombuttons.js` `renderBottomButtons()`
|
|
155
|
+
- fquery 컨트롤 함수: `fControlFuncs['bottom']` (`name()`, `style()` 등) + `fControlFuncs['common']`
|