@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,165 @@
|
|
|
1
|
+
# Category (카테고리)
|
|
2
|
+
|
|
3
|
+
> "하나의 시나리오에는 하나의 컬렉션만 존재한다. 컬렉션 안의 섹터들을 분리하고 화면에 별도로 연결하기 위해 카테고리를 사용한다." — 공식 가이드
|
|
4
|
+
|
|
5
|
+
## 1. 정의
|
|
6
|
+
|
|
7
|
+
- 코드: `class Category extends Array` (`collection.js:1121`)
|
|
8
|
+
- **컬렉션 안에 이미 존재하는 Sector 의 부분집합 인덱스**. Category 자체는 데이터를 소유하지 않으며, `Sector` 인스턴스를 push 해 두지만 그 Sector 의 본체는 Collection 에 있다.
|
|
9
|
+
- 카테고리는 자체 `_active` 를 가진다 (컬렉션의 active 와 별개). 카테고리 단위로 "지금 활성 섹터는 누구냐" 를 추적할 수 있다.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
Collection ─────── _category ───────┐
|
|
13
|
+
├─ Sector A ├─ "CtgItemList" → [ A, B, C ] _active = "B"
|
|
14
|
+
├─ Sector B ├─ "CtgFilter" → [ F ]
|
|
15
|
+
├─ Sector C └─ "CtgApprView" → [ V ]
|
|
16
|
+
├─ Sector F (필터)
|
|
17
|
+
└─ Sector V (결재 임시)
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 2. 메타 정의 ↔ 런타임
|
|
21
|
+
|
|
22
|
+
| 메타 | 런타임 |
|
|
23
|
+
|---|---|
|
|
24
|
+
| `Panel.Category.CtgItemList = { Ckeys: [...], ... }` | `Collection._category["CtgItemList"]` 인스턴스 생성 |
|
|
25
|
+
| `Panel.CategoryOrder = ["CtgItemList", "CtgFilter"]` | 카테고리 순서 — 디버거 표시·캡쳐 시 기준 |
|
|
26
|
+
| `DataConnection.CategoryName = "CtgItemList"` | 그룹이 어떤 카테고리에 바인딩될지 지정 |
|
|
27
|
+
|
|
28
|
+
> Validator 강제: `Panel.CategoryOrder` 는 `Panel.Category` 의 키 집합과 정확히 일치해야 한다 (`validator.ts:626`).
|
|
29
|
+
> Category 의 `Ckeys` 는 모두 `Panel.Collection.Ckeys` 의 부분집합이어야 한다 (`validator.ts:645`).
|
|
30
|
+
|
|
31
|
+
## 3. 구조
|
|
32
|
+
|
|
33
|
+
| 속성/메서드 | 설명 |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `name` | 카테고리 이름 (불변, `Object.defineProperty`) |
|
|
36
|
+
| `_active` | 카테고리 자체의 active SUID. writable |
|
|
37
|
+
| `_collections` | 소속 컬렉션 (서브시나리오 컬렉션 분리를 위해 보관) |
|
|
38
|
+
| `active` (getter) | `_active` 가 있으면 반환, 없고 길이가 1이면 `[0]._SUID` 자동 반환 |
|
|
39
|
+
| `activeSector` | `this._collections.mapper[this.active]` |
|
|
40
|
+
| `suids`, `sectors` (=this) | SUID 배열 / 섹터 배열 |
|
|
41
|
+
| `status` | 컬렉션의 status 를 그대로 위임 |
|
|
42
|
+
|
|
43
|
+
## 4. 메서드
|
|
44
|
+
|
|
45
|
+
### 4-1. 활성 섹터
|
|
46
|
+
|
|
47
|
+
```js
|
|
48
|
+
category.setActive(suid) // _active 변경 (mapper 검증 포함)
|
|
49
|
+
category.activate(suid) // setActive 별칭
|
|
50
|
+
category.unActivate() // setActive(undefined)
|
|
51
|
+
category.removeActive(suid) // 해당 suid 가 active 였으면 해제
|
|
52
|
+
category.isActive(suid) // boolean
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 4-2. 섹터 추가/제거
|
|
56
|
+
|
|
57
|
+
```js
|
|
58
|
+
category.addSector(obj, isForced=true)
|
|
59
|
+
→ this._collections.addSector(obj, undefined, isForced) // 컬렉션에 추가
|
|
60
|
+
→ this.add(sector._SUID) // 자기 자신에도 SUID 등록
|
|
61
|
+
|
|
62
|
+
category.removeSector(...suids)
|
|
63
|
+
→ 카테고리에 존재하는 SUID 만 추려서 컬렉션에서 remove (즉, **컬렉션에서도 함께 사라진다**)
|
|
64
|
+
|
|
65
|
+
category.add(...suids) // 이미 컬렉션에 있는 섹터들을 카테고리에 등록
|
|
66
|
+
category.addAtIndex(idx, ...suids) // 특정 인덱스에 삽입
|
|
67
|
+
category.remove(...suids) // 카테고리에서만 제거 (컬렉션은 유지)
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
> `addSector` 와 `add` 의 구분이 중요하다.
|
|
71
|
+
> - `addSector(obj)` — **새 데이터** 를 컬렉션과 카테고리에 동시 등록.
|
|
72
|
+
> - `add(suid)` — 이미 컬렉션에 있는 섹터를 카테고리 인덱스에 등록만 (다중 카테고리 가능).
|
|
73
|
+
> - `removeSector(...suids)` — **컬렉션 전체에서 삭제**. 다른 카테고리에서도 사라진다.
|
|
74
|
+
> - `remove(...suids)` — 이 카테고리 인덱스에서만 제거. (`collection.js:1236`)
|
|
75
|
+
|
|
76
|
+
### 4-3. 상태 기반 조회
|
|
77
|
+
|
|
78
|
+
```js
|
|
79
|
+
category.getSUIDsOfStatus('active'|'added'|'updated'|'deleted'|'selected'|'all')
|
|
80
|
+
category.getSectorsOfStatus(status)
|
|
81
|
+
category.getSUIDsOfTarget(targetMeta) // DataConnection.TargetSector.Filters 평가
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
`getSUIDsOfStatus` 는 컬렉션 단위 상태값과 카테고리 멤버십을 교집합 한다.
|
|
85
|
+
|
|
86
|
+
```js
|
|
87
|
+
// collection.js:1252
|
|
88
|
+
if (status == 'active') return [this.active];
|
|
89
|
+
return this._collections[status].filter(suid => this.isExist(suid));
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
→ 카테고리에 속한 섹터만, 그 카테고리에서의 active(`_active`) 또는 컬렉션 단위의 added/updated/deleted/selected 와 교차.
|
|
93
|
+
|
|
94
|
+
### 4-4. 캡쳐 / 복원
|
|
95
|
+
|
|
96
|
+
```js
|
|
97
|
+
_collections.captureCategory(deep=true) // { name: { suids:[...], active } } 형태로 직렬화
|
|
98
|
+
_collections.restoreCategory(json) // 카테고리 사전 재구성
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
`captureCollection` 의 `category` 필드로 함께 저장되어 뒤로가기 / 서브시나리오 진입 시 복원된다 (`collection.js:1408`).
|
|
102
|
+
|
|
103
|
+
## 5. 자주 쓰는 패턴
|
|
104
|
+
|
|
105
|
+
### 5-1. 검색 결과 필터링 (마스터 카테고리 패턴)
|
|
106
|
+
|
|
107
|
+
```js
|
|
108
|
+
// CtgDataListAll = 원본 (서버에서 받아온 전체)
|
|
109
|
+
// CtgDataList = 화면에 보여줄 필터 결과
|
|
110
|
+
f.Collection.removeCategory('CtgDataList');
|
|
111
|
+
f.Collection.createCategory('CtgDataList');
|
|
112
|
+
const all = _c.CtgDataListAll.sectors;
|
|
113
|
+
const filtered = all.filter(s => s.fName.includes(keyword));
|
|
114
|
+
filtered.forEach(s => _c.CtgDataList.add(s._SUID)); // 본체는 유지, 인덱스만 새로
|
|
115
|
+
group.reload();
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### 5-2. 결재 ViewMode (활성 섹터 임시 카테고리)
|
|
119
|
+
|
|
120
|
+
```js
|
|
121
|
+
// activeSector 만 표시하는 임시 카테고리
|
|
122
|
+
f.Collection.removeCategory('CtgApprView');
|
|
123
|
+
f.Collection.createCategory('CtgApprView');
|
|
124
|
+
const cur = _c.CtgList.activeSector; // 현재 보고 있는 섹터
|
|
125
|
+
_c.CtgApprView.add(cur._SUID);
|
|
126
|
+
_c.CtgApprView.activate(cur._SUID);
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
### 5-3. Init mock 데이터 패턴 (AI 생성)
|
|
130
|
+
|
|
131
|
+
AI 생성에서 Init 핸들러는 **`f.Collection.addSector` 만** 출력한다. `addSector` 는 카테고리가 없으면 자동 생성하므로 `removeCategory + createCategory + [0].set()` 3-step 패턴이 불필요.
|
|
132
|
+
|
|
133
|
+
```js
|
|
134
|
+
// ✅ 권장 — Init mock 섹터 (카테고리 자동 생성)
|
|
135
|
+
f.Collection.addSector({ keyword: '', fromDate: f.Date().format('YYYYMMDD') }, 'CtgFilter');
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
```js
|
|
139
|
+
// ❌ Init 에서 출력 금지
|
|
140
|
+
f.Collection.removeCategory('CtgFilter'); // validator 차단
|
|
141
|
+
f.Collection.createCategory('CtgFilter'); // validator 차단
|
|
142
|
+
_c.CtgFilter[0].set('keyword', '', ...); // addSector 로 대체
|
|
143
|
+
Current.step.reload(); // Init 은 재실행되지 않으므로 의미 없음
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
> `_c.카테고리[n].set()` 자체는 사용자 트리거 이벤트(Click 등)에서는 정상 사용. Init 에서는 mock seed 만 박으면 되므로 `addSector` 로 충분.
|
|
147
|
+
|
|
148
|
+
## 6. 명명 규칙 (요약)
|
|
149
|
+
|
|
150
|
+
> 상세는 [naming.md](./naming.md).
|
|
151
|
+
|
|
152
|
+
- 카테고리명: `Ctg` 접두 + PascalCase. 영문/숫자/`_` 만, 숫자 시작 금지, 한글/특수문자/콜론 금지.
|
|
153
|
+
- 안티패턴: `Ctg(New|Edit|Add|Insert)*` — 별도 카테고리 대신 `DataUsage:"new"`/`"update"` 사용.
|
|
154
|
+
- 카테고리 경로 표기 (`CtgA:CtgB:key`) 금지 — 일부 컨트롤이 인식 못 함.
|
|
155
|
+
- `Panel.CategoryOrder` 의 키 집합은 `Panel.Category` 의 키 집합과 정확히 일치해야 함.
|
|
156
|
+
- 카테고리의 `Ckeys` 는 `Panel.Collection.Ckeys` 의 부분집합.
|
|
157
|
+
|
|
158
|
+
## 7. 안티패턴
|
|
159
|
+
|
|
160
|
+
| 안티패턴 | 문제 | 권장 |
|
|
161
|
+
|---|---|---|
|
|
162
|
+
| `removeSector('all')` | 카테고리 전체 섹터를 컬렉션에서까지 날려 mapper 무결성 깨짐 | `removeCategory` + `createCategory` |
|
|
163
|
+
| `CtgNew*` / `CtgEdit*` 별도 카테고리 | 입력 폼마다 새 카테고리 + addSector + Init 복사 + Save 복사 → 사이드이펙트와 가비지 섹터 | 기존 리스트 카테고리 + `DataUsage:"new"` 또는 `"update"` |
|
|
164
|
+
| 카테고리 경로 표기 (`CtgSchedule:CtgSchedule:dayData`) | Scheduler 등 일부 컨트롤은 인식 못 함 | 단일 카테고리명 + InnerBlock Ckey 사용 |
|
|
165
|
+
| 문자열 카테고리명 오타 | 런타임에서 `_c.CtgXxx` 가 `undefined` → 실행 시점 에러 | validator 의 `category_references` 가 사전 검출 |
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# Collection (컬렉션)
|
|
2
|
+
|
|
3
|
+
> "시나리오가 시작해서 종료될 때까지 모든 데이터의 흐름을 관리하는 곳" — flextudio 공식 가이드
|
|
4
|
+
|
|
5
|
+
## 1. 정의
|
|
6
|
+
|
|
7
|
+
- **시나리오당 1개**의 컬렉션이 존재한다. 모든 화면(Step), 모든 입력 컨트롤, 모든 서비스 결과가 **하나의 Collection 인스턴스**를 공유한다.
|
|
8
|
+
- 코드 상으로는 `class Collection extends Block extends Array` (`collection.js:1076`). 즉 컬렉션 자체가 **Sector 를 원소로 갖는 배열** 이다.
|
|
9
|
+
- 컬렉션 인스턴스는 `_totalCollection[scenarioId]` 에 보관되며, 현재 실행 중인 시나리오의 컬렉션은 전역 게터 `_collections` (별칭 `_c`) 로 접근한다. `publicscript.js:413` 의 `f.Collection` 은 변형 API 만 노출하는 래퍼.
|
|
10
|
+
|
|
11
|
+
```js
|
|
12
|
+
// collection.js:1336~
|
|
13
|
+
window._totalCollection // { [scenarioId]: Collection }
|
|
14
|
+
window._collections ≡ _totalCollection[_scenarioID] // 현재 시나리오 컬렉션
|
|
15
|
+
window._c ≡ _collections // 스크립트 단축 별칭
|
|
16
|
+
window._totalStatus[scenarioId] // CollectionStatus (active/added/updated/... SUID 인덱스)
|
|
17
|
+
window._cStatus ≡ _totalStatus[_scenarioID]
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
## 2. 내부 구조
|
|
21
|
+
|
|
22
|
+
| 멤버 | 타입 | 설명 |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| `Collection` 자체 | `Array<Sector>` | 시나리오의 모든 (최상위) 섹터 평면 배열 |
|
|
25
|
+
| `mapper` | `{ [suid]: Sector }` | 컬렉션 내부의 **모든 섹터** (InnerBlock 포함) 를 SUID 로 평탄 인덱싱. `Object.defineProperty` 로 비열거형 |
|
|
26
|
+
| `_category` | `{ [name]: Category }` | 카테고리 사전. `Category` 는 SUID 의 부분집합 인덱스 |
|
|
27
|
+
| `status` | `CollectionStatus` (= `_cStatus`) | 5종 상태값(active/added/updated/deleted/selected) 의 SUID 목록과 step 별 binder |
|
|
28
|
+
| `passInit` | `boolean?` | 서브시나리오 클로닝 시 초기화 1회 스킵 플래그 (`collection.js:1369`) |
|
|
29
|
+
|
|
30
|
+
`Block` 베이스 클래스 (`collection.js:384`) 는 다음을 제공한다.
|
|
31
|
+
- `addSector(obj, categoryName?, isForced=true, targetIndex?)` — 새 Sector 생성 후 `push` + `mapper` 등록 + (옵션) 카테고리 등록
|
|
32
|
+
- `issueSUID(sector, isForced)` — 8자리 영숫자 SUID 발급 (`generateUID`, 충돌 시 자릿수 증가 / 강제생성 시 재발급)
|
|
33
|
+
- 내부 InnerBlock 의 `master SUID + masterKey` 로 `_cStatus.InnerStatus[msuid+mKey]` 에 별도 BlockStatus 보유 (`collection.js:425`)
|
|
34
|
+
|
|
35
|
+
## 3. 시나리오 라이프사이클과 컬렉션
|
|
36
|
+
|
|
37
|
+
### 3-1. init (시나리오 시작 시)
|
|
38
|
+
|
|
39
|
+
```js
|
|
40
|
+
// collection.js:1368
|
|
41
|
+
function initScenarioCollection(sectorsJson) {
|
|
42
|
+
if (_totalCollection[_scenarioID] && _totalCollection[_scenarioID].passInit) {
|
|
43
|
+
delete _totalCollection[_scenarioID].passInit; // 서브시나리오 클론본은 재초기화 스킵
|
|
44
|
+
} else {
|
|
45
|
+
_totalCollection[_scenarioID] = new Collection();
|
|
46
|
+
_totalStatus[_scenarioID] = new CollectionStatus();
|
|
47
|
+
}
|
|
48
|
+
// 알림 Action 으로 진입 시 sectorsJson 으로 초기 섹터 채움 + addStatus(C_ADDED, suid)
|
|
49
|
+
// 그 외에는 빈 Sector 1개를 자동 추가 + addStatus(C_ADDED) → start step 의 활성 섹터 보장
|
|
50
|
+
}
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
요점:
|
|
54
|
+
- 신규 진입 시 컬렉션은 **항상 1개 이상의 섹터를 갖는다** (스타트 스텝의 데이터 바인딩 누락 시에도 `_c.activeSector` 가 `undefined` 가 되지 않도록 보장).
|
|
55
|
+
- 알림에서 데이터를 들고 진입한 경우 그 데이터가 `added` 상태로 컬렉션에 박힌다.
|
|
56
|
+
|
|
57
|
+
### 3-2. step 진입 — bind
|
|
58
|
+
|
|
59
|
+
`StepBinder` (`status.js:103`) 가 step 별로 생성된다. 각 Layout/Group 은 자신의 `fId` 키로 `LayoutBinder` (= 섹터 SUID 배열) 를 갖는다.
|
|
60
|
+
|
|
61
|
+
```
|
|
62
|
+
_cStatus._stepBinders[stepId] = StepBinder
|
|
63
|
+
StepBinder.bind = { [fId]: LayoutBinder([suid, suid, ...]) }
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Step 이동 시 `beforeReload(step)` → 기존 step 의 binder 를 `bindBeforeReloaded` 로 임시 저장 → 새 step 렌더 → `afterReload()` 에서 정리 (`status.js:54~67`).
|
|
67
|
+
|
|
68
|
+
### 3-3. capture / restore
|
|
69
|
+
|
|
70
|
+
뒤로가기, undo 등에서 컬렉션 스냅샷을 만들고 되돌릴 수 있다.
|
|
71
|
+
|
|
72
|
+
```js
|
|
73
|
+
// collection.js:1405
|
|
74
|
+
captureCollection() = {
|
|
75
|
+
collection: JSON.stringify(_collections),
|
|
76
|
+
status: _cStatus.capture(), // JSON.stringify(this)
|
|
77
|
+
category: JSON.stringify(_collections.captureCategory(true))
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
restoreCollection(captured) // collection.js:1413
|
|
81
|
+
→ new Collection(parsed)
|
|
82
|
+
→ restoreCategory(parsedCategory)
|
|
83
|
+
→ _cStatus.restore(captured.status)
|
|
84
|
+
→ passChangeCollection() // 디버거 동기화
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
> 메타의 Step 옵션 `CopyCollection` (= `K_COPYCOLLECTION`) 이 `false` 인 경우, **뒤로가기 시 컬렉션을 복원하지 않는다**. 상세/조회 화면에서 PopUp/SlideUp 로 변경한 결과를 메인으로 가져갈 때 사용. (system-prompt-v2.md:288)
|
|
88
|
+
|
|
89
|
+
### 3-4. 서브시나리오 클로닝
|
|
90
|
+
|
|
91
|
+
```js
|
|
92
|
+
// collection.js:1421
|
|
93
|
+
cloneCurrentCollectionTo(scenarioId, status)
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
`status` 인자에 따라 일부 또는 전체 섹터를 새 시나리오 컬렉션에 복사. 지원 모드: `C_ALL | C_ACTIVE | C_SELECTED | C_LAST | C_ADDED | C_UPDATED | C_DELETED`.
|
|
97
|
+
|
|
98
|
+
복사된 컬렉션은 `passInit = true` 가 박혀, 서브시나리오 진입 시 `initScenarioCollection` 의 재초기화를 1회 건너뛴다.
|
|
99
|
+
|
|
100
|
+
## 4. Collection 클래스 메서드
|
|
101
|
+
|
|
102
|
+
| 메서드 | 설명 |
|
|
103
|
+
|---|---|
|
|
104
|
+
| `activate(suid)` | 기존 active 해제 후 해당 섹터 활성화. `Sector.activate()` 위임 |
|
|
105
|
+
| `unActivate()` | `_cStatus[C_ACTIVE]` 와 `InnerStatus[*][C_ACTIVE]` 모두 비움 |
|
|
106
|
+
| `select(suid)` / `unSelect(suid)` | 다중 선택 set/unset |
|
|
107
|
+
| `addSector(obj, categoryName?, isForced?, targetIndex?)` | 상속받은 Block 메서드. 카테고리 동시 등록 가능 |
|
|
108
|
+
| `removeCategory(name)` | 카테고리 인스턴스를 통째로 비움 (섹터는 컬렉션에 잔류) |
|
|
109
|
+
| `getSUIDsOfStatus(status)` / `getSectorsOfStatus(status)` | 'active' / 'added' / 'updated' / 'deleted' / 'selected' / 'all' 로 SUID·섹터 조회 |
|
|
110
|
+
| `captureCategory(deep)` / `restoreCategory(json)` | 카테고리 ↔ JSON 직렬화 |
|
|
111
|
+
| `validateMapper(suids)` | mapper 에 실재하는 suid 만 통과시키는 가드 |
|
|
112
|
+
|
|
113
|
+
## 5. 게터 — `active` / `last` / `displayed`
|
|
114
|
+
|
|
115
|
+
```js
|
|
116
|
+
// Block (collection.js:559)
|
|
117
|
+
get active() {
|
|
118
|
+
if (this.status[C_ACTIVE] && this.mapper[this.status[C_ACTIVE]])
|
|
119
|
+
return this.status[C_ACTIVE];
|
|
120
|
+
let firstSUID = this.displayed[0]; // 화면 바인딩된 첫 섹터로 fallback
|
|
121
|
+
if (firstSUID && this.mapper[firstSUID]) return firstSUID;
|
|
122
|
+
if (this[0]) return this[0][C_SUID]; // 그래도 없으면 배열 첫 섹터
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
get activeSector() { return this.mapper[this.active]; }
|
|
126
|
+
get last() { return this.getSUIDsOf(..._cStatus.lastReflected) } // 직전 reload 에 반영된 섹터들
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
요점: `_c.activeSector` 는 **명시적으로 active 가 없어도** "지금 화면에 보이는 첫 섹터" 또는 "컬렉션의 첫 섹터" 를 fallback 으로 반환한다. 따라서 `_c.activeSector` 는 거의 항상 truthy.
|
|
130
|
+
|
|
131
|
+
## 6. 디버거 동기화 (`passChangeCollection`)
|
|
132
|
+
|
|
133
|
+
`Sector.set` / `addSector` / `remove` / `activate` / `select` 등 모든 변형 연산은 마지막에 `passChangeCollection(suid?, changedKeys?)` 를 호출하여 디버거 패널의 Collection/Category 탭에 즉시 반영한다 (`collection.js:1511`).
|
|
134
|
+
|
|
135
|
+
스튜디오 디버거의 **상태값 필터(Status of)** (`flextudio-guide.md:508`) 는 이 데이터를 그대로 사용하여 added/updated/deleted/selected 만 골라 보여준다.
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# Collection · Lifecycle
|
|
2
|
+
|
|
3
|
+
시나리오 시작에서 종료까지 컬렉션이 거치는 전 과정. 메타·런타임·디버거 3자가 어떻게 상호작용하는지 정리.
|
|
4
|
+
|
|
5
|
+
## 1. 전체 흐름
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
┌────────────┐ 1. initScenarioCollection
|
|
9
|
+
│ 시나리오 │ ─────────────────→ new Collection() / new CollectionStatus()
|
|
10
|
+
│ Start │ + 빈 섹터 1개 (added) — 또는 알림 sectorsJson
|
|
11
|
+
└──────┬─────┘
|
|
12
|
+
│
|
|
13
|
+
▼
|
|
14
|
+
┌────────────┐ 2. Step 진입 — bindLayout(jsonMeta, outerSector)
|
|
15
|
+
│ Step N │ ─────────────────→ StepBinder.bind[fId] = LayoutBinder([suids])
|
|
16
|
+
│ render │ DataConnection 평가 → 섹터 매칭 → 컨트롤 채움
|
|
17
|
+
└──────┬─────┘
|
|
18
|
+
│
|
|
19
|
+
│ 사용자 입력 / 이벤트
|
|
20
|
+
▼
|
|
21
|
+
┌────────────┐ 3. mutation
|
|
22
|
+
│ 변형 호출 │ sector.set / addSector / removeSector / activate / select / delete
|
|
23
|
+
│ │ → status 변경 + reload + passChangeCollection
|
|
24
|
+
└──────┬─────┘
|
|
25
|
+
│
|
|
26
|
+
│ 다음 Step or 뒤로가기
|
|
27
|
+
▼
|
|
28
|
+
┌────────────┐ 4-A. 일반 이동 — captureCollection? 또는 그냥 진행
|
|
29
|
+
│ Step 이동 │ 4-B. 뒤로가기 — restoreCollection (CopyCollection != false)
|
|
30
|
+
│ │ 4-C. 서브시나리오 — cloneCurrentCollectionTo(subId, status)
|
|
31
|
+
└──────┬─────┘
|
|
32
|
+
│
|
|
33
|
+
▼
|
|
34
|
+
┌────────────┐ 5. 시나리오 종료 / 다른 시나리오 진입
|
|
35
|
+
│ End │ ─────────────────→ _totalCollection / _totalStatus 의 해당 시나리오 키 정리
|
|
36
|
+
└────────────┘
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
## 2. 단계별 상세
|
|
40
|
+
|
|
41
|
+
### 2-1. 초기화 — `initScenarioCollection(sectorsJson?)`
|
|
42
|
+
|
|
43
|
+
- `_totalCollection[scenarioID]` 가 비어있거나 `passInit !== true` 인 경우 새 인스턴스 생성.
|
|
44
|
+
- 알림(`f.Notification`) 으로 데이터 동반 진입 시:
|
|
45
|
+
- `sectorsJson` 이 배열 → 각 항목을 `addSector` 후 `addStatus(C_ADDED)`
|
|
46
|
+
- 객체 1개 → 동일 처리 + `activate()`
|
|
47
|
+
- 일반 진입 시:
|
|
48
|
+
- 컬렉션이 빈 상태면 빈 섹터 1개를 추가 + `addStatus(C_ADDED)` — start step 의 `_c.activeSector` 가 항상 truthy 가 되게 보장.
|
|
49
|
+
|
|
50
|
+
### 2-2. 메타 정의의 카테고리 인스턴스화
|
|
51
|
+
|
|
52
|
+
`Panel.Category` 의 키별로 Category 가 사전 생성되는 시점은 메타 로드 직후의 컬렉션 정의 평가에서 이뤄진다 (`CollectionStatus.define` 게터로 `K_COLLECTIONS` 메타 조회 — `status.js:68`). 이후 모든 `_c.CtgXxx` 접근은 이 인스턴스를 사용한다.
|
|
53
|
+
|
|
54
|
+
### 2-3. Step 렌더 — bindLayout
|
|
55
|
+
|
|
56
|
+
```js
|
|
57
|
+
// status.js:108
|
|
58
|
+
StepBinder.bindLayout(jsonMeta, outerSector)
|
|
59
|
+
→ fId = jsonMeta[K_FID]
|
|
60
|
+
→ this.bind[fId] = new LayoutBinder(jsonMeta, outerSector)
|
|
61
|
+
→ return _collections.allSectorsOf(...this.bind[fId])
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
`LayoutBinder` 는 그룹의 DataConnection 을 평가하여 어떤 SUID 가 화면에 드러날지를 배열로 가진다.
|
|
65
|
+
|
|
66
|
+
#### DataUsage → LayoutBinder 가 갖는 SUID 묶음
|
|
67
|
+
|
|
68
|
+
| DataUsage | 진입 시 자동 동작 | LayoutBinder 가 보유하는 SUID 묶음 |
|
|
69
|
+
|---|---|---|
|
|
70
|
+
| `default` | 카테고리에 섹터 0개면 빈 섹터 1개 자동 생성. 1개 이상 있으면 기존 사용 | 카테고리의 첫 섹터 1개 (단일 폼) |
|
|
71
|
+
| `new` | **항상 빈 섹터 1개 새로 생성** + `added` 자동 부여 | 새 섹터 1개 — 입력값이 자동으로 이 섹터에 저장 |
|
|
72
|
+
| `update` | 카테고리의 `activeSector` 만 바인딩 (읽기+쓰기) — 입력 시 active 섹터가 곧장 갱신 | activeSector 1개 |
|
|
73
|
+
| `detail` | 카테고리의 `activeSector` 만 바인딩 (읽기 전용) | activeSector 1개 |
|
|
74
|
+
| `query` | 카테고리 섹터 수만큼 그룹 자체가 복제 (DOM 단위) | 카테고리 전체 (또는 `TargetSector.Filters` 가 통과시킨 부분집합) |
|
|
75
|
+
|
|
76
|
+
> 메타 표면 카탈로그 (DataConnection 객체 키 enum, FilterType 4종, conditionOperators 10종 등) 는 본 문서에서 다루지 않는다 — [../../../schema/v1/data-objects.md](../../../schema/v1/data-objects.md) 가 SSOT.
|
|
77
|
+
|
|
78
|
+
#### Init mock 데이터 패턴 — `addSector` 만 사용
|
|
79
|
+
|
|
80
|
+
AI 시나리오 생성에서 Init 핸들러는 **`f.Collection.addSector(obj, '카테고리')` 호출만** 출력한다. `addSector` 는 카테고리가 없으면 자동 생성하므로 `removeCategory` / `createCategory` 선행 불필요. `_c.카테고리[0].set(...)` 도 `addSector` 로 대체 (인자 obj 에 초기값 포함).
|
|
81
|
+
|
|
82
|
+
```js
|
|
83
|
+
// ✅ 권장 — Init 에서 mock 섹터 1건 박기
|
|
84
|
+
f.Collection.addSector({ StatusFilter: '', StatusFilterName: '전체' }, 'CtgStatusFilter');
|
|
85
|
+
|
|
86
|
+
// ❌ 출력 금지 — removeCategory/createCategory 는 validator 가 차단,
|
|
87
|
+
// _c[0].set 도 addSector 로 대체 가능하므로 mock 생성 시 사용하지 않음.
|
|
88
|
+
// Current.step.reload / f.Content().reload 도 Init 에서는 의미 없음 (재실행 안 됨).
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
`DataUsage:"new"` 와 Init `addSector` 를 함께 쓰면 가비지 섹터 발생 — 한쪽만 사용.
|
|
92
|
+
|
|
93
|
+
### 2-4. 변형 — set / add / remove
|
|
94
|
+
|
|
95
|
+
- 모든 변형은 마지막에 `passChangeCollection(suid?, changedKeys?)` 호출 → 디버거 패널 실시간 반영.
|
|
96
|
+
- `set` 은 자동 reload, `setValue` 는 reload 생략 (배치 변경 시 사용).
|
|
97
|
+
- InnerBlock 안의 섹터를 `set` 하면 마스터 섹터의 reload 도 함께 트리거.
|
|
98
|
+
|
|
99
|
+
### 2-5. Step 전환 시 상태 처리
|
|
100
|
+
|
|
101
|
+
```
|
|
102
|
+
beforeReload(stepID)
|
|
103
|
+
→ _stepBinders[stepID].bind 가 있으면 bindBeforeReloaded 로 임시 저장
|
|
104
|
+
→ removeStepBinder(stepID) // step 이 다시 진입할 때 새 binder 로 시작
|
|
105
|
+
|
|
106
|
+
afterReload()
|
|
107
|
+
→ bindBeforeReloaded 삭제
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
이 사이에 화면을 그리는 동안에는 이전 binder 정보를 참고하여 **포커스/스크롤/active 상태를 유지** 한다.
|
|
111
|
+
|
|
112
|
+
### 2-6. 캡쳐 / 복원
|
|
113
|
+
|
|
114
|
+
| 시점 | 동작 |
|
|
115
|
+
|---|---|
|
|
116
|
+
| Step 이동 (`CopyCollection: true` 또는 미지정) | 현재 컬렉션 + status + category 를 captureCollection 로 스냅샷 → 스택 push |
|
|
117
|
+
| 뒤로가기 | 스택 pop → restoreCollection — Collection / status / category 모두 새 인스턴스로 복원 |
|
|
118
|
+
| `CopyCollection: false` Step | 스냅샷 미저장 → 뒤로가기 후에도 PopUp/SlideUp 에서 변경한 데이터가 유지 |
|
|
119
|
+
| 서브시나리오 | `cloneCurrentCollectionTo(subId, status)` — `C_ALL/C_ACTIVE/C_SELECTED/C_LAST/C_ADDED/C_UPDATED/C_DELETED` 부분 복사. 새 컬렉션은 `passInit=true` 로 마킹되어 진입 시 재초기화 1회 스킵 |
|
|
120
|
+
|
|
121
|
+
### 2-7. 정리
|
|
122
|
+
|
|
123
|
+
- 시나리오를 떠날 때 `_totalCollection` / `_totalStatus` 의 해당 키는 그대로 유지될 수 있다 (서브 → 메인 복귀 시 메인 컬렉션이 살아있어야 하기 때문). 메모리 정리는 외부에서 별도로 관리.
|
|
124
|
+
|
|
125
|
+
## 3. 메타 옵션이 라이프사이클에 미치는 영향
|
|
126
|
+
|
|
127
|
+
| 메타 키 | 영향 |
|
|
128
|
+
|---|---|
|
|
129
|
+
| `Step.CopyCollection` | `false` 면 step 이동 시 capture 생략 → 뒤로가기 시 변경 내역 유지 |
|
|
130
|
+
| `DataConnection.DataUsage` | 진입 시점에 어떤 자동 동작(빈 섹터 생성 / activeSector 바인딩 / 카테고리 반복 렌더) 을 트리거할지 결정 |
|
|
131
|
+
| `DataConnection.UseNewSector` | `default`/`new` 에서 빈 섹터 자동 생성 여부 |
|
|
132
|
+
| `DataConnection.OnlyIfNoSector` | `default` 에서 이미 섹터가 있으면 생성 스킵 — Init `set()` 패턴의 안전 가드 |
|
|
133
|
+
| `DataConnection.UseTargetSector` + `TargetSector.Filters` | 어떤 상태/조건의 섹터만 그룹에 바인딩할지 결정 |
|
|
134
|
+
| `Group.UseEmptyView` | `query` 그룹에서 매칭 섹터 0건일 때 빈 뷰 표시 |
|
|
135
|
+
|
|
136
|
+
## 4. 디버그 모드와의 관계
|
|
137
|
+
|
|
138
|
+
- `_mode == "debug"` 일 때 setter 들이 에러 출력 (`fDebug.error(R_MESSAGE.COLLECTION_ESCAPE)`) — 잘못된 직접 대입 방지.
|
|
139
|
+
- 디버거 우측 하단 탭 (`localStorage.K_DEBUG.ACTIVE_RIGHTBTM_TAB`) 이 Category 탭일 때만 `passChangeCollection` 이 `captureCategory()` 까지 동행 — 성능 절약.
|
|
140
|
+
- 디버거의 "Status of" 필터는 `fDebug.collectionStatus` 를 통해 `getSectorsOfStatus` 로 직접 조회.
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# 카테고리 / 컬렉션키 — 명명 규칙과 예약어
|
|
2
|
+
|
|
3
|
+
`Panel.Category` 의 카테고리명과 `Panel.Collection.Ckeys` (= Sector 의 일반 속성 = "컬렉션키") 작성 규칙. 잘못된 이름은 런타임 에러·디버거 경고·바인딩 실패로 직결되므로 본 문서의 규칙을 시나리오 생성과 사용자 스크립트 양쪽에서 모두 적용한다.
|
|
4
|
+
|
|
5
|
+
> **schema 강제 (생성 시 차단)**: 본 문서의 §3-2 시스템 게터 + §3-5 JS 예약어/빌트인 충돌은 `meta-contract/schema/v1/naming-objects.schema.json` (`ckey` / `ckeyWithSuid` / `categoryName`) 으로 schema 레벨에서 차단된다. 적용 위치: 컨트롤 `Ckeys` (controlBase / calendarControl / comboListControl / searchListControl / calendar-navigator / tab), `Panel.Collection.Ckeys`, `Panel.Category` 키, `Panel.CategoryOrder`, `DataConnection.CategoryName`, `TargetSector.CategoryName`, `DataSource.CategoryName`, `paramBlock.CategoryName` (빈 문자열 예외), `resultBlock.CategoryName`, `resultBlock.PKeys`, `sectorFilter.Condition.ConditionKey`, `sectorFilter.Parent.DCParentKey`/`DCChildKey`. AI 생성 / `flex-scenario validate` 가 이 단계에서 거부.
|
|
6
|
+
|
|
7
|
+
## 1. 공통 — JS 식별자 규칙
|
|
8
|
+
|
|
9
|
+
`_c.카테고리.컬렉션키` 형태로 점 표기법 접근하므로 카테고리명·컬렉션키 모두 **JS 식별자 규칙**을 따라야 한다.
|
|
10
|
+
|
|
11
|
+
| 규칙 | 카테고리명 | 컬렉션키 |
|
|
12
|
+
|---|---|---|
|
|
13
|
+
| 영문/숫자/언더스코어(`_`) 만 사용 | ✅ | ✅ |
|
|
14
|
+
| 숫자로 시작 금지 | ✅ ([rules.md:271](../../../spec/rules.md) 명시) | ✅ |
|
|
15
|
+
| 숫자**만**으로 구성 금지 | ✅ ([rules.md:271](../../../spec/rules.md)) | ✅ (사실상 식별자 자체가 안 됨) |
|
|
16
|
+
| 공백·하이픈(`-`)·콜론(`:`)·점(`.`) 등 특수문자 금지 | ✅ | ✅ |
|
|
17
|
+
| 한글/이모지 금지 (코드 식별자로 사용 불가) | ✅ | ✅ |
|
|
18
|
+
| JS 예약어 (`for`, `class`, `if`, `delete`, `new` 등) 금지 | ✅ | ✅ |
|
|
19
|
+
|
|
20
|
+
> 카테고리명에 콜론(`:`)을 넣은 "카테고리 경로 표기" (`CtgSchedule:CtgSchedule:dayData` 같은 형태) 는 일부 컨트롤(Scheduler 등) 이 인식하지 못한다. 항상 **단일 토큰** 카테고리명 + InnerBlock 키로 표현.
|
|
21
|
+
|
|
22
|
+
## 2. 카테고리명 (CategoryName)
|
|
23
|
+
|
|
24
|
+
### 2-1. 컨벤션 — `Ctg` 접두 + PascalCase
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
✅ CtgItemList, CtgFilter, CtgApprView, CtgUserList, CtgDataListAll
|
|
28
|
+
❌ itemList (Ctg 누락)
|
|
29
|
+
❌ CtgItem-List (하이픈)
|
|
30
|
+
❌ Ctg item (공백)
|
|
31
|
+
❌ CtG_Item (혼합 케이스)
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
> 시스템 프롬프트 ([system-prompt-v2.md:3546](../../../flextudio-ai-studio/system-prompt-v2.md)) — "`Ctg` prefix + descriptive PascalCase name."
|
|
35
|
+
|
|
36
|
+
### 2-2. 안티패턴 (validator 경고)
|
|
37
|
+
|
|
38
|
+
다음 prefix 카테고리는 **별도 카테고리를 만드는 안티패턴**으로 검출된다 ([validator.ts:1069](../../../flextudio-ai-studio/lib/validator.ts) — `/^Ctg(New|Edit|Add|Insert)/i`):
|
|
39
|
+
|
|
40
|
+
| 안티 prefix | 본래 의도 | 권장 대체 |
|
|
41
|
+
|---|---|---|
|
|
42
|
+
| `CtgNew*` | 신규 등록 폼용 별도 카테고리 | 메인 리스트 카테고리 + `DataUsage:"new"` |
|
|
43
|
+
| `CtgEdit*` | 수정 폼용 별도 카테고리 + Init/Save 복사 | 메인 리스트 카테고리 + `DataUsage:"update"` |
|
|
44
|
+
| `CtgAdd*` | 〃 | `DataUsage:"new"` |
|
|
45
|
+
| `CtgInsert*` | 〃 | `DataUsage:"new"` |
|
|
46
|
+
|
|
47
|
+
> 정당화되는 유일한 케이스: **저장 전 별도 체크로직(복잡한 비즈니스 검증)이나 데이터 변환(포맷 변경, 계산 필드 생성 등)이 필요한 경우** 만 별도 카테고리(`DataUsage:"default"`) 패턴 허용.
|
|
48
|
+
|
|
49
|
+
### 2-3. 정합성 강제 (validator)
|
|
50
|
+
|
|
51
|
+
| 검사 | 위치 | 내용 |
|
|
52
|
+
|---|---|---|
|
|
53
|
+
| `category_references` | [validator.ts:587](../../../flextudio-ai-studio/lib/validator.ts) | `DataConnection.CategoryName` / 서비스의 `CategoryName` / `SetCategory` 등 모든 참조가 `Panel.Category` 에 정의되어 있어야 함 |
|
|
54
|
+
| `category_order` | [validator.ts:621](../../../flextudio-ai-studio/lib/validator.ts) | `Panel.CategoryOrder` 의 키 집합과 `Panel.Category` 의 키 집합이 정확히 일치 |
|
|
55
|
+
| `ckeys_consistency` | [validator.ts:645](../../../flextudio-ai-studio/lib/validator.ts) | 각 카테고리의 `Ckeys` 가 `Panel.Collection.Ckeys` 의 부분집합 |
|
|
56
|
+
|
|
57
|
+
### 2-4. 길이/대소문자
|
|
58
|
+
|
|
59
|
+
- 길이 제한은 명시 없음 — 그러나 **PascalCase 단어 4개 이내** 권장 (`CtgUserMessageList` 정도까지). 이상이면 의미가 흐려진다.
|
|
60
|
+
- 대소문자 구분됨 (`CtgItem` ≠ `Ctgitem`).
|
|
61
|
+
|
|
62
|
+
## 3. 컬렉션키 (Ckey, Sector 의 속성명)
|
|
63
|
+
|
|
64
|
+
### 3-1. 컨벤션 — `f` 접두 + camelCase
|
|
65
|
+
|
|
66
|
+
```
|
|
67
|
+
✅ fName, fAge, fStatus, fApprovedDate, fBaseUserNo
|
|
68
|
+
❌ Name (접두 f 누락 — 충돌 가능성, 시스템 키와 구별 어려움)
|
|
69
|
+
❌ fname (소문자만)
|
|
70
|
+
❌ fOrgName, fEmail, fBaseUserNo ← 이건 시스템 표준 키 (의미 보존, 임의 변경 금지)
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
> 컨벤션은 강제는 아니지만, `f` prefix 가 누락되면 시스템 게터/예약어와 충돌할 위험이 커진다. 신규 키는 `f` 로 시작하는 것을 권장.
|
|
74
|
+
|
|
75
|
+
### 3-2. 시스템 예약 키 — 사용 절대 금지
|
|
76
|
+
|
|
77
|
+
`Sector` 인스턴스의 **getter 로 정의된 이름**은 컬렉션키로 사용 불가. setter 가 debug 모드에서 에러를 출력하고 (`COLLECTION_ESCAPE`), 정상 모드에서도 값이 반영되지 않는다.
|
|
78
|
+
|
|
79
|
+
> schema 차단: `naming-objects.schema.json#/$defs/sectorReservedKeys`. 컨트롤 `Ckeys` 어떤 위치든 이 enum 의 값을 박으면 `flex-scenario validate` 가 fail. (`Panel.Collection.Ckeys` 는 시스템 등록 슬롯 — `_SUID` 만 예외 허용 = `ckeyWithSuid`).
|
|
80
|
+
|
|
81
|
+
| 예약명 | 출처 | 의미 |
|
|
82
|
+
|---|---|---|
|
|
83
|
+
| `_SUID` | [const.js:1217](../../../public/engine/common/const.js) | 섹터 고유 ID (8+자리). 시스템이 자동 발급. **Collection.Ckeys 에는 포함되어야 함** |
|
|
84
|
+
| `_mSUID` | [const.js:1216](../../../public/engine/common/const.js) | InnerBlock 의 마스터 섹터 SUID 참조 |
|
|
85
|
+
| `block` | [collection.js:57](../../../public/engine/common/collection.js) | 섹터가 속한 Block 인스턴스 |
|
|
86
|
+
| `collection` | [collection.js:68](../../../public/engine/common/collection.js) | 컬렉션 인스턴스 |
|
|
87
|
+
| `innerBlocks` | [collection.js:79](../../../public/engine/common/collection.js) | 섹터 내부의 InnerBlock 들 |
|
|
88
|
+
| `status` | [collection.js:91](../../../public/engine/common/collection.js) | `'A'` / `'U'` / `'D'` / `''` 단일 표기 |
|
|
89
|
+
| `isAdded` / `isUpdated` / `isDeleted` / `isSelected` / `isActive` / `isLast` | [collection.js:99~152](../../../public/engine/common/collection.js) | 상태 boolean |
|
|
90
|
+
| `keys` | [collection.js:212](../../../public/engine/common/collection.js) | 섹터의 컬렉션키 배열 |
|
|
91
|
+
| `outerSector` / `outerBlock` | [collection.js:518~522](../../../public/engine/common/collection.js) | InnerBlock → 마스터 |
|
|
92
|
+
|
|
93
|
+
### 3-3. 시스템 표준 키 — 정해진 의미가 있어 임의 변경 금지
|
|
94
|
+
|
|
95
|
+
다음 키는 시스템·서비스가 자동으로 채우거나 약속된 의미를 가진다. **임의 의미로 재정의 금지**, 사용 시 정해진 의미로만.
|
|
96
|
+
|
|
97
|
+
| 키 | 출처 | 의미 |
|
|
98
|
+
|---|---|---|
|
|
99
|
+
| `fBaseUserNo` | `_base.User.fBaseUserNo` / `GetUserList` 응답 | 사용자 번호 — 푸시 발송 수신자 ID, ServiceBinding 사용자 식별 |
|
|
100
|
+
| `fBaseUserName` | 〃 | 사용자 이름 |
|
|
101
|
+
| `fOrgName` | `GetUserList` 응답 | 조직명 |
|
|
102
|
+
| `fEmail` | 〃 | 이메일 |
|
|
103
|
+
| `fScenarioName` | scenarioMeta 루트 | 시나리오 이름 |
|
|
104
|
+
|
|
105
|
+
> 예: 결재자 정보를 다른 이름(`approverNo` 등)으로 매핑하면 수신자 기반 런타임 헬퍼가 사용자를 인식하지 못한다. 반드시 `fBaseUserNo` 그대로 사용.
|
|
106
|
+
|
|
107
|
+
### 3-4. `_` 접두 키 — 시스템 영역
|
|
108
|
+
|
|
109
|
+
`_SUID` / `_mSUID` 외에 언더스코어로 시작하는 키는 시스템 내부용으로 예약되어 있다. **사용자 컬렉션키로 `_` 접두 사용 금지** — 향후 시스템 키와 충돌 가능성.
|
|
110
|
+
|
|
111
|
+
```
|
|
112
|
+
❌ _temp, _flag, _mode (사용 금지)
|
|
113
|
+
✅ fTemp, fFlag, fMode
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
### 3-5. JS 예약어 / 빌트인 충돌 금지
|
|
117
|
+
|
|
118
|
+
```
|
|
119
|
+
❌ for, while, if, delete, new, class, return, typeof, void, this, super
|
|
120
|
+
❌ constructor, prototype, length, toString, hasOwnProperty, valueOf
|
|
121
|
+
❌ Object, Array, String, Number, Boolean, Date, Math, JSON
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
`sector.length`, `sector.toString` 등은 JS 빌트인이라 동작이 깨진다. **항상 `f` 접두를 붙여 회피** (`fLength`, `fToString`).
|
|
125
|
+
|
|
126
|
+
> schema 차단: `naming-objects.schema.json#/$defs/jsReservedWords` enum. 컨트롤 `Ckeys`, `CategoryName` 양쪽 모두 적용. CategoryName 에서 `class`/`for`/`new` 같은 키 사용 시 `flex-scenario validate` 가 fail.
|
|
127
|
+
|
|
128
|
+
### 3-6. 정합성 강제 (validator)
|
|
129
|
+
|
|
130
|
+
| 검사 | 규칙 |
|
|
131
|
+
|---|---|
|
|
132
|
+
| `Ckeys Consistency` | 각 `Panel.Category[*].Ckeys` ⊆ `Panel.Collection.Ckeys` ([validator.ts:645](../../../flextudio-ai-studio/lib/validator.ts)) |
|
|
133
|
+
| `Collection.Ckeys` 포함 | `_SUID` 가 반드시 포함되어야 함 ([system-prompt-v2.md:3540](../../../flextudio-ai-studio/system-prompt-v2.md)) |
|
|
134
|
+
| `Category 별 Ckeys` | 그 카테고리에서 실제 사용하는 키만 (불필요한 키 나열 금지) |
|
|
135
|
+
|
|
136
|
+
## 4. 카테고리명 / Ckey 빠른 자가 점검표
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
[ ] 영문/숫자/_ 만 사용했는가?
|
|
140
|
+
[ ] 숫자로 시작하지 않는가?
|
|
141
|
+
[ ] 카테고리명에 Ctg prefix + PascalCase?
|
|
142
|
+
[ ] 카테고리명이 CtgNew*/CtgEdit*/CtgAdd*/CtgInsert* 안티패턴이 아닌가?
|
|
143
|
+
[ ] 컬렉션키가 시스템 게터(_SUID/status/isAdded/keys 등) 와 충돌하지 않는가?
|
|
144
|
+
[ ] 컬렉션키가 _ 접두로 시작하지 않는가? (_SUID 자체는 예외)
|
|
145
|
+
[ ] 컬렉션키가 JS 예약어/빌트인(length/toString/constructor 등) 과 충돌하지 않는가?
|
|
146
|
+
[ ] fBaseUserNo / fBaseUserName / fOrgName / fEmail 같은 시스템 표준 키를
|
|
147
|
+
임의 의미로 재정의하지 않았는가?
|
|
148
|
+
[ ] Collection.Ckeys 에 모든 카테고리의 Ckey + _SUID 가 포함되었는가?
|
|
149
|
+
[ ] CategoryOrder 의 키 집합이 Category 키 집합과 정확히 일치하는가?
|
|
150
|
+
[ ] DataConnection.CategoryName / 서비스 CategoryName 이 Panel.Category 에 정의되어 있는가?
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## 5. 잘못된 예 → 권장 예
|
|
154
|
+
|
|
155
|
+
| ❌ 잘못된 형태 | 문제 | ✅ 권장 |
|
|
156
|
+
|---|---|---|
|
|
157
|
+
| `Category: { "1차결재": {...} }` | 한글 식별자 — 점 표기법 불가 | `CtgFirstApprov` |
|
|
158
|
+
| `Category: { "Ctg-Item-List": {...} }` | 하이픈 — JS 식별자 위반 | `CtgItemList` |
|
|
159
|
+
| `Category: { "CtgNewMember": {...} }` | 신규 등록용 별도 카테고리 안티패턴 | `CtgMemberList` + `DataUsage:"new"` |
|
|
160
|
+
| `Ckeys: ["status", "isActive"]` | Sector 시스템 게터와 충돌 | `Ckeys: ["fStatus", "fIsActive"]` |
|
|
161
|
+
| `Ckeys: ["length", "toString"]` | JS 빌트인 충돌 | `Ckeys: ["fLength", "fLabel"]` |
|
|
162
|
+
| `Ckeys: ["_userNo", "_state"]` | `_` 접두 시스템 영역 | `Ckeys: ["fUserNo", "fState"]` |
|
|
163
|
+
| `CategoryOrder: ["CtgItemList"]` 인데 `Category: { CtgItemList:..., CtgFilter:... }` | 키 집합 불일치 | `CategoryOrder: ["CtgItemList", "CtgFilter"]` |
|
|
164
|
+
| 임의 매핑 `addReceiver(s.approverNo, false)` | `fBaseUserNo` 가 아니라 동작 안 함 | `addReceiver(s.fBaseUserNo, false)` |
|
|
165
|
+
|
|
166
|
+
## 6. 메타 작성 시 권장 흐름
|
|
167
|
+
|
|
168
|
+
1. 화면별 사용 데이터 식별 → 카테고리 후보 (`CtgItemList`, `CtgFilter` 등) 도출
|
|
169
|
+
2. 각 카테고리의 컬렉션키 (Ckey) 확정 — `f` 접두 + camelCase
|
|
170
|
+
3. `Panel.Collection.Ckeys` 에 **모든 카테고리의 Ckey 합집합 + `_SUID`** 채움
|
|
171
|
+
4. `Panel.Category` 에 카테고리별 자기 Ckeys 만 채움
|
|
172
|
+
5. `Panel.CategoryOrder` 에 카테고리 키 순서 (선언 순서) 채움
|
|
173
|
+
6. 그룹의 `DataConnection.CategoryName` 에 정의된 카테고리명만 사용
|
|
174
|
+
7. validator 통과 확인 — `category_references`, `category_order`, `ckeys_consistency`, `ctg_new_edit` 모두 pass
|