@auto-engineer/narrative 0.11.11
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/.turbo/turbo-build.log +9 -0
- package/.turbo/turbo-format.log +4 -0
- package/.turbo/turbo-lint.log +4 -0
- package/.turbo/turbo-test.log +14 -0
- package/.turbo/turbo-type-check.log +4 -0
- package/CHANGELOG.md +691 -0
- package/DEBUG.md +136 -0
- package/LICENSE +10 -0
- package/README.md +141 -0
- package/dist/scripts/build.d.ts +3 -0
- package/dist/scripts/build.d.ts.map +1 -0
- package/dist/scripts/build.js +71 -0
- package/dist/scripts/build.js.map +1 -0
- package/dist/scripts/convert-flow-exec.d.ts +3 -0
- package/dist/scripts/convert-flow-exec.d.ts.map +1 -0
- package/dist/scripts/convert-flow-exec.js +17 -0
- package/dist/scripts/convert-flow-exec.js.map +1 -0
- package/dist/scripts/convert-flow-helper.d.ts +3 -0
- package/dist/scripts/convert-flow-helper.d.ts.map +1 -0
- package/dist/scripts/convert-flow-helper.js +85 -0
- package/dist/scripts/convert-flow-helper.js.map +1 -0
- package/dist/scripts/convert-flow.d.ts +3 -0
- package/dist/scripts/convert-flow.d.ts.map +1 -0
- package/dist/scripts/convert-flow.js +108 -0
- package/dist/scripts/convert-flow.js.map +1 -0
- package/dist/scripts/print-schema.d.ts +2 -0
- package/dist/scripts/print-schema.d.ts.map +1 -0
- package/dist/scripts/print-schema.js +20 -0
- package/dist/scripts/print-schema.js.map +1 -0
- package/dist/src/commands/export-schema-helper.d.ts +2 -0
- package/dist/src/commands/export-schema-helper.d.ts.map +1 -0
- package/dist/src/commands/export-schema-helper.js +48 -0
- package/dist/src/commands/export-schema-helper.js.map +1 -0
- package/dist/src/commands/export-schema-runner.d.ts +3 -0
- package/dist/src/commands/export-schema-runner.d.ts.map +1 -0
- package/dist/src/commands/export-schema-runner.js +53 -0
- package/dist/src/commands/export-schema-runner.js.map +1 -0
- package/dist/src/commands/export-schema.d.ts +23 -0
- package/dist/src/commands/export-schema.d.ts.map +1 -0
- package/dist/src/commands/export-schema.js +124 -0
- package/dist/src/commands/export-schema.js.map +1 -0
- package/dist/src/commands/filestore.node.d.ts +3 -0
- package/dist/src/commands/filestore.node.d.ts.map +1 -0
- package/dist/src/commands/filestore.node.js +11 -0
- package/dist/src/commands/filestore.node.js.map +1 -0
- package/dist/src/data-flow-builders.d.ts +71 -0
- package/dist/src/data-flow-builders.d.ts.map +1 -0
- package/dist/src/data-flow-builders.js +326 -0
- package/dist/src/data-flow-builders.js.map +1 -0
- package/dist/src/data-narrative-builders.d.ts +71 -0
- package/dist/src/data-narrative-builders.d.ts.map +1 -0
- package/dist/src/data-narrative-builders.js +326 -0
- package/dist/src/data-narrative-builders.js.map +1 -0
- package/dist/src/flow-context.d.ts +25 -0
- package/dist/src/flow-context.d.ts.map +1 -0
- package/dist/src/flow-context.js +579 -0
- package/dist/src/flow-context.js.map +1 -0
- package/dist/src/flow-context.specs.d.ts +2 -0
- package/dist/src/flow-context.specs.d.ts.map +1 -0
- package/dist/src/flow-context.specs.js +185 -0
- package/dist/src/flow-context.specs.js.map +1 -0
- package/dist/src/flow-registry.d.ts +12 -0
- package/dist/src/flow-registry.d.ts.map +1 -0
- package/dist/src/flow-registry.js +46 -0
- package/dist/src/flow-registry.js.map +1 -0
- package/dist/src/flow.d.ts +49 -0
- package/dist/src/flow.d.ts.map +1 -0
- package/dist/src/flow.js +146 -0
- package/dist/src/flow.js.map +1 -0
- package/dist/src/fluent-builder.d.ts +35 -0
- package/dist/src/fluent-builder.d.ts.map +1 -0
- package/dist/src/fluent-builder.js +287 -0
- package/dist/src/fluent-builder.js.map +1 -0
- package/dist/src/fluent-builder.specs.d.ts +2 -0
- package/dist/src/fluent-builder.specs.d.ts.map +1 -0
- package/dist/src/fluent-builder.specs.js +28 -0
- package/dist/src/fluent-builder.specs.js.map +1 -0
- package/dist/src/getFlows.cache.specs.d.ts +2 -0
- package/dist/src/getFlows.cache.specs.d.ts.map +1 -0
- package/dist/src/getFlows.cache.specs.js +234 -0
- package/dist/src/getFlows.cache.specs.js.map +1 -0
- package/dist/src/getFlows.d.ts +21 -0
- package/dist/src/getFlows.d.ts.map +1 -0
- package/dist/src/getFlows.js +119 -0
- package/dist/src/getFlows.js.map +1 -0
- package/dist/src/getFlows.specs.d.ts +2 -0
- package/dist/src/getFlows.specs.d.ts.map +1 -0
- package/dist/src/getFlows.specs.js +1080 -0
- package/dist/src/getFlows.specs.js.map +1 -0
- package/dist/src/getNarratives.d.ts +21 -0
- package/dist/src/getNarratives.d.ts.map +1 -0
- package/dist/src/getNarratives.js +119 -0
- package/dist/src/getNarratives.js.map +1 -0
- package/dist/src/id/addAutoIds.d.ts +3 -0
- package/dist/src/id/addAutoIds.d.ts.map +1 -0
- package/dist/src/id/addAutoIds.js +47 -0
- package/dist/src/id/addAutoIds.js.map +1 -0
- package/dist/src/id/addAutoIds.specs.d.ts +2 -0
- package/dist/src/id/addAutoIds.specs.d.ts.map +1 -0
- package/dist/src/id/addAutoIds.specs.js +265 -0
- package/dist/src/id/addAutoIds.specs.js.map +1 -0
- package/dist/src/id/generators.d.ts +2 -0
- package/dist/src/id/generators.d.ts.map +1 -0
- package/dist/src/id/generators.js +5 -0
- package/dist/src/id/generators.js.map +1 -0
- package/dist/src/id/hasAllIds.d.ts +3 -0
- package/dist/src/id/hasAllIds.d.ts.map +1 -0
- package/dist/src/id/hasAllIds.js +19 -0
- package/dist/src/id/hasAllIds.js.map +1 -0
- package/dist/src/id/hasAllIds.specs.d.ts +2 -0
- package/dist/src/id/hasAllIds.specs.d.ts.map +1 -0
- package/dist/src/id/hasAllIds.specs.js +231 -0
- package/dist/src/id/hasAllIds.specs.js.map +1 -0
- package/dist/src/id/index.d.ts +3 -0
- package/dist/src/id/index.d.ts.map +1 -0
- package/dist/src/id/index.js +3 -0
- package/dist/src/id/index.js.map +1 -0
- package/dist/src/index.d.ts +45 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +31 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/integration-export-registry.d.ts +42 -0
- package/dist/src/integration-export-registry.d.ts.map +1 -0
- package/dist/src/integration-export-registry.js +74 -0
- package/dist/src/integration-export-registry.js.map +1 -0
- package/dist/src/integration-registry.d.ts +12 -0
- package/dist/src/integration-registry.d.ts.map +1 -0
- package/dist/src/integration-registry.js +42 -0
- package/dist/src/integration-registry.js.map +1 -0
- package/dist/src/loader/fs-path.d.ts +6 -0
- package/dist/src/loader/fs-path.d.ts.map +1 -0
- package/dist/src/loader/fs-path.js +28 -0
- package/dist/src/loader/fs-path.js.map +1 -0
- package/dist/src/loader/graph.d.ts +15 -0
- package/dist/src/loader/graph.d.ts.map +1 -0
- package/dist/src/loader/graph.js +292 -0
- package/dist/src/loader/graph.js.map +1 -0
- package/dist/src/loader/importmap.d.ts +2 -0
- package/dist/src/loader/importmap.d.ts.map +1 -0
- package/dist/src/loader/importmap.js +55 -0
- package/dist/src/loader/importmap.js.map +1 -0
- package/dist/src/loader/index.d.ts +9 -0
- package/dist/src/loader/index.d.ts.map +1 -0
- package/dist/src/loader/index.js +55 -0
- package/dist/src/loader/index.js.map +1 -0
- package/dist/src/loader/resolver.d.ts +4 -0
- package/dist/src/loader/resolver.d.ts.map +1 -0
- package/dist/src/loader/resolver.js +18 -0
- package/dist/src/loader/resolver.js.map +1 -0
- package/dist/src/loader/runtime-cjs.d.ts +3 -0
- package/dist/src/loader/runtime-cjs.d.ts.map +1 -0
- package/dist/src/loader/runtime-cjs.js +131 -0
- package/dist/src/loader/runtime-cjs.js.map +1 -0
- package/dist/src/loader/ts-utils.d.ts +39 -0
- package/dist/src/loader/ts-utils.d.ts.map +1 -0
- package/dist/src/loader/ts-utils.js +563 -0
- package/dist/src/loader/ts-utils.js.map +1 -0
- package/dist/src/loader/types.d.ts +23 -0
- package/dist/src/loader/types.d.ts.map +1 -0
- package/dist/src/loader/types.js +2 -0
- package/dist/src/loader/types.js.map +1 -0
- package/dist/src/loader/vfs-compiler-host.d.ts +5 -0
- package/dist/src/loader/vfs-compiler-host.d.ts.map +1 -0
- package/dist/src/loader/vfs-compiler-host.js +47 -0
- package/dist/src/loader/vfs-compiler-host.js.map +1 -0
- package/dist/src/model-to-flow.specs.d.ts +2 -0
- package/dist/src/model-to-flow.specs.d.ts.map +1 -0
- package/dist/src/model-to-flow.specs.js +1786 -0
- package/dist/src/model-to-flow.specs.js.map +1 -0
- package/dist/src/narrative-context.d.ts +25 -0
- package/dist/src/narrative-context.d.ts.map +1 -0
- package/dist/src/narrative-context.js +579 -0
- package/dist/src/narrative-context.js.map +1 -0
- package/dist/src/narrative-context.specs.d.ts +2 -0
- package/dist/src/narrative-context.specs.d.ts.map +1 -0
- package/dist/src/narrative-context.specs.js +185 -0
- package/dist/src/narrative-context.specs.js.map +1 -0
- package/dist/src/narrative-registry.d.ts +12 -0
- package/dist/src/narrative-registry.d.ts.map +1 -0
- package/dist/src/narrative-registry.js +46 -0
- package/dist/src/narrative-registry.js.map +1 -0
- package/dist/src/narrative.d.ts +49 -0
- package/dist/src/narrative.d.ts.map +1 -0
- package/dist/src/narrative.js +147 -0
- package/dist/src/narrative.js.map +1 -0
- package/dist/src/samples/items.flow.d.ts +2 -0
- package/dist/src/samples/items.flow.d.ts.map +1 -0
- package/dist/src/samples/items.flow.js +63 -0
- package/dist/src/samples/items.flow.js.map +1 -0
- package/dist/src/samples/mixed-given-types.flow.d.ts +2 -0
- package/dist/src/samples/mixed-given-types.flow.d.ts.map +1 -0
- package/dist/src/samples/mixed-given-types.flow.js +36 -0
- package/dist/src/samples/mixed-given-types.flow.js.map +1 -0
- package/dist/src/samples/place-order.flow.d.ts +25 -0
- package/dist/src/samples/place-order.flow.d.ts.map +1 -0
- package/dist/src/samples/place-order.flow.js +30 -0
- package/dist/src/samples/place-order.flow.js.map +1 -0
- package/dist/src/samples/questionnaires.flow.d.ts +2 -0
- package/dist/src/samples/questionnaires.flow.d.ts.map +1 -0
- package/dist/src/samples/questionnaires.flow.js +259 -0
- package/dist/src/samples/questionnaires.flow.js.map +1 -0
- package/dist/src/samples/seasonal-assistant.schema.json +737 -0
- package/dist/src/samples/test-with-ids.flow.d.ts +2 -0
- package/dist/src/samples/test-with-ids.flow.d.ts.map +1 -0
- package/dist/src/samples/test-with-ids.flow.js +80 -0
- package/dist/src/samples/test-with-ids.flow.js.map +1 -0
- package/dist/src/schema-test.d.ts +2 -0
- package/dist/src/schema-test.d.ts.map +1 -0
- package/dist/src/schema-test.js +57 -0
- package/dist/src/schema-test.js.map +1 -0
- package/dist/src/schema.d.ts +19393 -0
- package/dist/src/schema.d.ts.map +1 -0
- package/dist/src/schema.js +342 -0
- package/dist/src/schema.js.map +1 -0
- package/dist/src/slice-builder.d.ts +16 -0
- package/dist/src/slice-builder.d.ts.map +1 -0
- package/dist/src/slice-builder.js +72 -0
- package/dist/src/slice-builder.js.map +1 -0
- package/dist/src/testing.d.ts +32 -0
- package/dist/src/testing.d.ts.map +1 -0
- package/dist/src/testing.js +36 -0
- package/dist/src/testing.js.map +1 -0
- package/dist/src/transformers/flow-to-model/assemble.d.ts +3 -0
- package/dist/src/transformers/flow-to-model/assemble.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/assemble.js +9 -0
- package/dist/src/transformers/flow-to-model/assemble.js.map +1 -0
- package/dist/src/transformers/flow-to-model/debug.d.ts +3 -0
- package/dist/src/transformers/flow-to-model/debug.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/debug.js +6 -0
- package/dist/src/transformers/flow-to-model/debug.js.map +1 -0
- package/dist/src/transformers/flow-to-model/example-shapes.d.ts +6 -0
- package/dist/src/transformers/flow-to-model/example-shapes.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/example-shapes.js +60 -0
- package/dist/src/transformers/flow-to-model/example-shapes.js.map +1 -0
- package/dist/src/transformers/flow-to-model/guards.d.ts +15 -0
- package/dist/src/transformers/flow-to-model/guards.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/guards.js +18 -0
- package/dist/src/transformers/flow-to-model/guards.js.map +1 -0
- package/dist/src/transformers/flow-to-model/index.d.ts +4 -0
- package/dist/src/transformers/flow-to-model/index.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/index.js +193 -0
- package/dist/src/transformers/flow-to-model/index.js.map +1 -0
- package/dist/src/transformers/flow-to-model/inlining.d.ts +4 -0
- package/dist/src/transformers/flow-to-model/inlining.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/inlining.js +95 -0
- package/dist/src/transformers/flow-to-model/inlining.js.map +1 -0
- package/dist/src/transformers/flow-to-model/integrations.d.ts +36 -0
- package/dist/src/transformers/flow-to-model/integrations.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/integrations.js +147 -0
- package/dist/src/transformers/flow-to-model/integrations.js.map +1 -0
- package/dist/src/transformers/flow-to-model/messages.d.ts +5 -0
- package/dist/src/transformers/flow-to-model/messages.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/messages.js +88 -0
- package/dist/src/transformers/flow-to-model/messages.js.map +1 -0
- package/dist/src/transformers/flow-to-model/normalize.d.ts +3 -0
- package/dist/src/transformers/flow-to-model/normalize.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/normalize.js +23 -0
- package/dist/src/transformers/flow-to-model/normalize.js.map +1 -0
- package/dist/src/transformers/flow-to-model/spec-processors.d.ts +34 -0
- package/dist/src/transformers/flow-to-model/spec-processors.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/spec-processors.js +395 -0
- package/dist/src/transformers/flow-to-model/spec-processors.js.map +1 -0
- package/dist/src/transformers/flow-to-model/strings.d.ts +2 -0
- package/dist/src/transformers/flow-to-model/strings.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/strings.js +11 -0
- package/dist/src/transformers/flow-to-model/strings.js.map +1 -0
- package/dist/src/transformers/flow-to-model/type-inference.d.ts +3 -0
- package/dist/src/transformers/flow-to-model/type-inference.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/type-inference.js +92 -0
- package/dist/src/transformers/flow-to-model/type-inference.js.map +1 -0
- package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts +2 -0
- package/dist/src/transformers/flow-to-model/type-inference.specs.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/type-inference.specs.js +167 -0
- package/dist/src/transformers/flow-to-model/type-inference.specs.js.map +1 -0
- package/dist/src/transformers/flow-to-model/zod-adapter.d.ts +6 -0
- package/dist/src/transformers/flow-to-model/zod-adapter.d.ts.map +1 -0
- package/dist/src/transformers/flow-to-model/zod-adapter.js +101 -0
- package/dist/src/transformers/flow-to-model/zod-adapter.js.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts +2 -0
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.js +22 -0
- package/dist/src/transformers/model-to-flow/analysis/extract-flow.js.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts +18 -0
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js +78 -0
- package/dist/src/transformers/model-to-flow/analysis/lint-helpers.js.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts +7 -0
- package/dist/src/transformers/model-to-flow/analysis/type-decls.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/type-decls.js +74 -0
- package/dist/src/transformers/model-to-flow/analysis/type-decls.js.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/usage.d.ts +9 -0
- package/dist/src/transformers/model-to-flow/analysis/usage.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/analysis/usage.js +90 -0
- package/dist/src/transformers/model-to-flow/analysis/usage.js.map +1 -0
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts +18 -0
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.js +159 -0
- package/dist/src/transformers/model-to-flow/ast/emit-helpers.js.map +1 -0
- package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts +2 -0
- package/dist/src/transformers/model-to-flow/formatting/prettier.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/formatting/prettier.js +26 -0
- package/dist/src/transformers/model-to-flow/formatting/prettier.js.map +1 -0
- package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts +6 -0
- package/dist/src/transformers/model-to-flow/formatting/sort-types.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/formatting/sort-types.js +17 -0
- package/dist/src/transformers/model-to-flow/formatting/sort-types.js.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/compose.d.ts +6 -0
- package/dist/src/transformers/model-to-flow/generators/compose.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/compose.js +79 -0
- package/dist/src/transformers/model-to-flow/generators/compose.js.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/flow.d.ts +15 -0
- package/dist/src/transformers/model-to-flow/generators/flow.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/flow.js +316 -0
- package/dist/src/transformers/model-to-flow/generators/flow.js.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/gwt.d.ts +57 -0
- package/dist/src/transformers/model-to-flow/generators/gwt.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/gwt.js +186 -0
- package/dist/src/transformers/model-to-flow/generators/gwt.js.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/imports.d.ts +16 -0
- package/dist/src/transformers/model-to-flow/generators/imports.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/imports.js +57 -0
- package/dist/src/transformers/model-to-flow/generators/imports.js.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/types.d.ts +13 -0
- package/dist/src/transformers/model-to-flow/generators/types.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/generators/types.js +22 -0
- package/dist/src/transformers/model-to-flow/generators/types.js.map +1 -0
- package/dist/src/transformers/model-to-flow/index.d.ts +13 -0
- package/dist/src/transformers/model-to-flow/index.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/index.js +25 -0
- package/dist/src/transformers/model-to-flow/index.js.map +1 -0
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts +12 -0
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.js +64 -0
- package/dist/src/transformers/model-to-flow/utils/integration-extractor.js.map +1 -0
- package/dist/src/transformers/model-to-flow/utils/strings.d.ts +9 -0
- package/dist/src/transformers/model-to-flow/utils/strings.d.ts.map +1 -0
- package/dist/src/transformers/model-to-flow/utils/strings.js +11 -0
- package/dist/src/transformers/model-to-flow/utils/strings.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/extract-flow.d.ts +2 -0
- package/dist/src/transformers/model-to-narrative/analysis/extract-flow.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/extract-flow.js +22 -0
- package/dist/src/transformers/model-to-narrative/analysis/extract-flow.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.d.ts +18 -0
- package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js +78 -0
- package/dist/src/transformers/model-to-narrative/analysis/lint-helpers.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/type-decls.d.ts +7 -0
- package/dist/src/transformers/model-to-narrative/analysis/type-decls.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/type-decls.js +74 -0
- package/dist/src/transformers/model-to-narrative/analysis/type-decls.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/usage.d.ts +9 -0
- package/dist/src/transformers/model-to-narrative/analysis/usage.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/analysis/usage.js +90 -0
- package/dist/src/transformers/model-to-narrative/analysis/usage.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts +18 -0
- package/dist/src/transformers/model-to-narrative/ast/emit-helpers.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/ast/emit-helpers.js +159 -0
- package/dist/src/transformers/model-to-narrative/ast/emit-helpers.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/formatting/prettier.d.ts +2 -0
- package/dist/src/transformers/model-to-narrative/formatting/prettier.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/formatting/prettier.js +26 -0
- package/dist/src/transformers/model-to-narrative/formatting/prettier.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/formatting/sort-types.d.ts +6 -0
- package/dist/src/transformers/model-to-narrative/formatting/sort-types.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/formatting/sort-types.js +17 -0
- package/dist/src/transformers/model-to-narrative/formatting/sort-types.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/compose.d.ts +6 -0
- package/dist/src/transformers/model-to-narrative/generators/compose.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/compose.js +79 -0
- package/dist/src/transformers/model-to-narrative/generators/compose.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/flow.d.ts +15 -0
- package/dist/src/transformers/model-to-narrative/generators/flow.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/flow.js +316 -0
- package/dist/src/transformers/model-to-narrative/generators/flow.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts +57 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.js +186 -0
- package/dist/src/transformers/model-to-narrative/generators/gwt.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/imports.d.ts +16 -0
- package/dist/src/transformers/model-to-narrative/generators/imports.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/imports.js +57 -0
- package/dist/src/transformers/model-to-narrative/generators/imports.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/types.d.ts +13 -0
- package/dist/src/transformers/model-to-narrative/generators/types.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/generators/types.js +22 -0
- package/dist/src/transformers/model-to-narrative/generators/types.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/index.d.ts +13 -0
- package/dist/src/transformers/model-to-narrative/index.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/index.js +25 -0
- package/dist/src/transformers/model-to-narrative/index.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts +12 -0
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js +64 -0
- package/dist/src/transformers/model-to-narrative/utils/integration-extractor.js.map +1 -0
- package/dist/src/transformers/model-to-narrative/utils/strings.d.ts +9 -0
- package/dist/src/transformers/model-to-narrative/utils/strings.d.ts.map +1 -0
- package/dist/src/transformers/model-to-narrative/utils/strings.js +11 -0
- package/dist/src/transformers/model-to-narrative/utils/strings.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/assemble.d.ts +3 -0
- package/dist/src/transformers/narrative-to-model/assemble.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/assemble.js +9 -0
- package/dist/src/transformers/narrative-to-model/assemble.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/debug.d.ts +3 -0
- package/dist/src/transformers/narrative-to-model/debug.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/debug.js +6 -0
- package/dist/src/transformers/narrative-to-model/debug.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/example-shapes.d.ts +6 -0
- package/dist/src/transformers/narrative-to-model/example-shapes.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/example-shapes.js +60 -0
- package/dist/src/transformers/narrative-to-model/example-shapes.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/guards.d.ts +15 -0
- package/dist/src/transformers/narrative-to-model/guards.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/guards.js +18 -0
- package/dist/src/transformers/narrative-to-model/guards.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/index.d.ts +4 -0
- package/dist/src/transformers/narrative-to-model/index.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/index.js +193 -0
- package/dist/src/transformers/narrative-to-model/index.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/inlining.d.ts +4 -0
- package/dist/src/transformers/narrative-to-model/inlining.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/inlining.js +95 -0
- package/dist/src/transformers/narrative-to-model/inlining.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/integrations.d.ts +36 -0
- package/dist/src/transformers/narrative-to-model/integrations.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/integrations.js +147 -0
- package/dist/src/transformers/narrative-to-model/integrations.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/messages.d.ts +5 -0
- package/dist/src/transformers/narrative-to-model/messages.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/messages.js +88 -0
- package/dist/src/transformers/narrative-to-model/messages.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/normalize.d.ts +3 -0
- package/dist/src/transformers/narrative-to-model/normalize.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/normalize.js +23 -0
- package/dist/src/transformers/narrative-to-model/normalize.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/spec-processors.d.ts +34 -0
- package/dist/src/transformers/narrative-to-model/spec-processors.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/spec-processors.js +395 -0
- package/dist/src/transformers/narrative-to-model/spec-processors.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/strings.d.ts +2 -0
- package/dist/src/transformers/narrative-to-model/strings.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/strings.js +11 -0
- package/dist/src/transformers/narrative-to-model/strings.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/type-inference.d.ts +3 -0
- package/dist/src/transformers/narrative-to-model/type-inference.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/type-inference.js +92 -0
- package/dist/src/transformers/narrative-to-model/type-inference.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts +2 -0
- package/dist/src/transformers/narrative-to-model/type-inference.specs.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/type-inference.specs.js +167 -0
- package/dist/src/transformers/narrative-to-model/type-inference.specs.js.map +1 -0
- package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts +6 -0
- package/dist/src/transformers/narrative-to-model/zod-adapter.d.ts.map +1 -0
- package/dist/src/transformers/narrative-to-model/zod-adapter.js +101 -0
- package/dist/src/transformers/narrative-to-model/zod-adapter.js.map +1 -0
- package/dist/src/types.d.ts +143 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +36 -0
- package/dist/src/types.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/eslint.config.ts +12 -0
- package/package.json +50 -0
- package/scripts/build.ts +84 -0
- package/scripts/convert-flow-exec.ts +17 -0
- package/scripts/convert-flow-helper.ts +93 -0
- package/scripts/convert-flow.ts +128 -0
- package/scripts/print-schema.ts +30 -0
- package/src/commands/export-schema-helper.ts +76 -0
- package/src/commands/export-schema-runner.ts +72 -0
- package/src/commands/export-schema.ts +157 -0
- package/src/commands/filestore.node.ts +12 -0
- package/src/data-narrative-builders.ts +418 -0
- package/src/fluent-builder.specs.ts +36 -0
- package/src/fluent-builder.ts +382 -0
- package/src/getFlows.cache.specs.ts +287 -0
- package/src/getFlows.specs.ts +1246 -0
- package/src/getNarratives.ts +186 -0
- package/src/id/addAutoIds.specs.ts +296 -0
- package/src/id/addAutoIds.ts +53 -0
- package/src/id/generators.ts +5 -0
- package/src/id/hasAllIds.specs.ts +267 -0
- package/src/id/hasAllIds.ts +23 -0
- package/src/id/index.ts +2 -0
- package/src/index.ts +131 -0
- package/src/integration-export-registry.ts +83 -0
- package/src/integration-registry.ts +53 -0
- package/src/loader/fs-path.ts +29 -0
- package/src/loader/graph.ts +379 -0
- package/src/loader/importmap.ts +68 -0
- package/src/loader/index.ts +81 -0
- package/src/loader/resolver.ts +22 -0
- package/src/loader/runtime-cjs.ts +151 -0
- package/src/loader/ts-utils.ts +770 -0
- package/src/loader/types.ts +20 -0
- package/src/loader/vfs-compiler-host.ts +51 -0
- package/src/model-to-flow.specs.ts +1822 -0
- package/src/narrative-context.specs.ts +226 -0
- package/src/narrative-context.ts +708 -0
- package/src/narrative-registry.ts +65 -0
- package/src/narrative.ts +236 -0
- package/src/samples/items.flow.ts +90 -0
- package/src/samples/mixed-given-types.flow.ts +70 -0
- package/src/samples/place-order.flow.ts +57 -0
- package/src/samples/questionnaires.flow.ts +359 -0
- package/src/samples/seasonal-assistant.schema.json +737 -0
- package/src/samples/test-with-ids.flow.ts +109 -0
- package/src/schema-test.ts +67 -0
- package/src/schema.ts +398 -0
- package/src/slice-builder.ts +100 -0
- package/src/testing.ts +40 -0
- package/src/transformers/model-to-narrative/analysis/extract-flow.ts +26 -0
- package/src/transformers/model-to-narrative/analysis/lint-helpers.ts +98 -0
- package/src/transformers/model-to-narrative/analysis/type-decls.ts +94 -0
- package/src/transformers/model-to-narrative/analysis/usage.ts +111 -0
- package/src/transformers/model-to-narrative/ast/emit-helpers.ts +199 -0
- package/src/transformers/model-to-narrative/formatting/prettier.ts +30 -0
- package/src/transformers/model-to-narrative/formatting/sort-types.ts +19 -0
- package/src/transformers/model-to-narrative/generators/compose.ts +124 -0
- package/src/transformers/model-to-narrative/generators/flow.ts +570 -0
- package/src/transformers/model-to-narrative/generators/gwt.ts +335 -0
- package/src/transformers/model-to-narrative/generators/imports.ts +110 -0
- package/src/transformers/model-to-narrative/generators/types.ts +48 -0
- package/src/transformers/model-to-narrative/index.ts +27 -0
- package/src/transformers/model-to-narrative/utils/integration-extractor.ts +67 -0
- package/src/transformers/model-to-narrative/utils/strings.ts +10 -0
- package/src/transformers/narrative-to-model/assemble.ts +10 -0
- package/src/transformers/narrative-to-model/debug.ts +6 -0
- package/src/transformers/narrative-to-model/example-shapes.ts +66 -0
- package/src/transformers/narrative-to-model/guards.ts +24 -0
- package/src/transformers/narrative-to-model/index.ts +274 -0
- package/src/transformers/narrative-to-model/inlining.ts +106 -0
- package/src/transformers/narrative-to-model/integrations.ts +201 -0
- package/src/transformers/narrative-to-model/messages.ts +104 -0
- package/src/transformers/narrative-to-model/normalize.ts +27 -0
- package/src/transformers/narrative-to-model/spec-processors.ts +648 -0
- package/src/transformers/narrative-to-model/strings.ts +11 -0
- package/src/transformers/narrative-to-model/type-inference.specs.ts +176 -0
- package/src/transformers/narrative-to-model/type-inference.ts +127 -0
- package/src/transformers/narrative-to-model/zod-adapter.ts +110 -0
- package/src/types.ts +226 -0
- package/tsconfig.json +11 -0
- package/tsconfig.test.json +9 -0
|
@@ -0,0 +1,267 @@
|
|
|
1
|
+
import { describe, expect, it, beforeEach } from 'vitest';
|
|
2
|
+
import { hasAllIds, addAutoIds } from './index';
|
|
3
|
+
import { getNarratives } from '../getNarratives';
|
|
4
|
+
import { InMemoryFileStore, type IFileStore } from '@auto-engineer/file-store';
|
|
5
|
+
import * as flowApi from '../narrative';
|
|
6
|
+
import * as fluent from '../fluent-builder';
|
|
7
|
+
import * as dataBuilders from '../data-narrative-builders';
|
|
8
|
+
import * as typesApi from '../types';
|
|
9
|
+
import gql from 'graphql-tag';
|
|
10
|
+
|
|
11
|
+
const importMap = {
|
|
12
|
+
'../flow': flowApi,
|
|
13
|
+
'../fluent-builder': fluent,
|
|
14
|
+
'../data-flow-builders': dataBuilders,
|
|
15
|
+
'../types': typesApi,
|
|
16
|
+
'graphql-tag': gql,
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
describe('hasAllIds', () => {
|
|
20
|
+
let vfs: IFileStore;
|
|
21
|
+
const root = '/test';
|
|
22
|
+
|
|
23
|
+
beforeEach(async () => {
|
|
24
|
+
vfs = new InMemoryFileStore();
|
|
25
|
+
|
|
26
|
+
const flowWithoutIds = `
|
|
27
|
+
import { flow, specs, rule, example } from '../narrative';
|
|
28
|
+
import { command } from '../fluent-builder';
|
|
29
|
+
|
|
30
|
+
flow('Test Flow Without IDs', () => {
|
|
31
|
+
command('Test slice without ID')
|
|
32
|
+
.server(() => {
|
|
33
|
+
specs('Test specs', () => {
|
|
34
|
+
rule('Test rule without ID', () => {
|
|
35
|
+
example('Test example')
|
|
36
|
+
.when({ test: 'data' })
|
|
37
|
+
.then({ result: 'success' });
|
|
38
|
+
});
|
|
39
|
+
});
|
|
40
|
+
});
|
|
41
|
+
});`;
|
|
42
|
+
|
|
43
|
+
const flowWithIds = `
|
|
44
|
+
import { flow, specs, rule, example } from '../narrative';
|
|
45
|
+
import { command } from '../fluent-builder';
|
|
46
|
+
|
|
47
|
+
flow('Test Flow with IDs', 'FLOW-001', () => {
|
|
48
|
+
command('Test slice with ID', 'SLICE-001')
|
|
49
|
+
.server(() => {
|
|
50
|
+
specs('Test specs', () => {
|
|
51
|
+
rule('Test rule with ID', 'RULE-001', () => {
|
|
52
|
+
example('Test example')
|
|
53
|
+
.when({ test: 'data' })
|
|
54
|
+
.then({ result: 'success' });
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
});`;
|
|
59
|
+
|
|
60
|
+
const multipleFlowsSameSource = `
|
|
61
|
+
import { flow, specs, should } from '../narrative';
|
|
62
|
+
import { experience } from '../fluent-builder';
|
|
63
|
+
|
|
64
|
+
flow('Home Screen', 'AUTO-aifPcU3hw', () => {
|
|
65
|
+
experience('Active Surveys Summary', 'AUTO-slice1').client(() => {
|
|
66
|
+
specs(() => {
|
|
67
|
+
should('show active surveys summary');
|
|
68
|
+
});
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
flow('Create Survey', 'AUTO-MPviTMrQC', () => {
|
|
73
|
+
experience('Create Survey Form', 'AUTO-slice2').client(() => {
|
|
74
|
+
specs(() => {
|
|
75
|
+
should('allow entering survey title');
|
|
76
|
+
});
|
|
77
|
+
});
|
|
78
|
+
});
|
|
79
|
+
|
|
80
|
+
flow('Response Analytics', 'AUTO-eME978Euk', () => {
|
|
81
|
+
experience('Response Rate Charts', 'AUTO-slice3').client(() => {
|
|
82
|
+
specs(() => {
|
|
83
|
+
should('show daily response rate charts');
|
|
84
|
+
});
|
|
85
|
+
});
|
|
86
|
+
});`;
|
|
87
|
+
|
|
88
|
+
const multipleFlowsIncomplete = `
|
|
89
|
+
import { flow, specs, should } from '../narrative';
|
|
90
|
+
import { experience } from '../fluent-builder';
|
|
91
|
+
|
|
92
|
+
flow('Home Screen', 'AUTO-aifPcU3hw', () => {
|
|
93
|
+
experience('Active Surveys Summary', 'AUTO-slice1').client(() => {
|
|
94
|
+
specs(() => {
|
|
95
|
+
should('show active surveys summary');
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
flow('Create Survey', () => {
|
|
101
|
+
experience('Create Survey Form', 'AUTO-slice2').client(() => {
|
|
102
|
+
specs(() => {
|
|
103
|
+
should('allow entering survey title');
|
|
104
|
+
});
|
|
105
|
+
});
|
|
106
|
+
});
|
|
107
|
+
|
|
108
|
+
flow('Response Analytics', 'AUTO-eME978Euk', () => {
|
|
109
|
+
experience('Response Rate Charts', 'AUTO-slice3').client(() => {
|
|
110
|
+
specs(() => {
|
|
111
|
+
should('show daily response rate charts');
|
|
112
|
+
});
|
|
113
|
+
});
|
|
114
|
+
});`;
|
|
115
|
+
|
|
116
|
+
const multipleFlowsSliceMissing = `
|
|
117
|
+
import { flow, specs, should } from '../narrative';
|
|
118
|
+
import { experience } from '../fluent-builder';
|
|
119
|
+
|
|
120
|
+
flow('Home Screen', 'AUTO-aifPcU3hw', () => {
|
|
121
|
+
experience('Active Surveys Summary', 'AUTO-slice1').client(() => {
|
|
122
|
+
specs(() => {
|
|
123
|
+
should('show active surveys summary');
|
|
124
|
+
});
|
|
125
|
+
});
|
|
126
|
+
});
|
|
127
|
+
|
|
128
|
+
flow('Create Survey', 'AUTO-MPviTMrQC', () => {
|
|
129
|
+
experience('Create Survey Form').client(() => {
|
|
130
|
+
specs(() => {
|
|
131
|
+
should('allow entering survey title');
|
|
132
|
+
});
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
flow('Response Analytics', 'AUTO-eME978Euk', () => {
|
|
137
|
+
experience('Response Rate Charts', 'AUTO-slice3').client(() => {
|
|
138
|
+
specs(() => {
|
|
139
|
+
should('show daily response rate charts');
|
|
140
|
+
});
|
|
141
|
+
});
|
|
142
|
+
});`;
|
|
143
|
+
|
|
144
|
+
const flowContent1 = new TextEncoder().encode(flowWithoutIds);
|
|
145
|
+
const flowContent2 = new TextEncoder().encode(flowWithIds);
|
|
146
|
+
const flowContent3 = new TextEncoder().encode(multipleFlowsSameSource);
|
|
147
|
+
const flowContent4 = new TextEncoder().encode(multipleFlowsIncomplete);
|
|
148
|
+
const flowContent5 = new TextEncoder().encode(multipleFlowsSliceMissing);
|
|
149
|
+
await vfs.write('/test/flow-without-ids.flow.ts', flowContent1);
|
|
150
|
+
await vfs.write('/test/flow-with-ids.flow.ts', flowContent2);
|
|
151
|
+
await vfs.write('/test/homepage.flow.ts', flowContent3);
|
|
152
|
+
await vfs.write('/test/homepage-incomplete.flow.ts', flowContent4);
|
|
153
|
+
await vfs.write('/test/homepage-slice-missing.flow.ts', flowContent5);
|
|
154
|
+
});
|
|
155
|
+
it('should return false for models without IDs', async () => {
|
|
156
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
157
|
+
const model = result.toModel();
|
|
158
|
+
|
|
159
|
+
const flowWithoutIds = model.narratives.find((f) => f.name === 'Test Flow Without IDs');
|
|
160
|
+
expect(flowWithoutIds).toBeDefined();
|
|
161
|
+
|
|
162
|
+
if (flowWithoutIds) {
|
|
163
|
+
const modelWithoutIds = { ...model, narratives: [flowWithoutIds] };
|
|
164
|
+
expect(hasAllIds(modelWithoutIds)).toBe(false);
|
|
165
|
+
}
|
|
166
|
+
});
|
|
167
|
+
|
|
168
|
+
it('should return true for models with complete IDs', async () => {
|
|
169
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
170
|
+
const model = result.toModel();
|
|
171
|
+
|
|
172
|
+
const modelWithIds = addAutoIds(model);
|
|
173
|
+
expect(hasAllIds(modelWithIds)).toBe(true);
|
|
174
|
+
});
|
|
175
|
+
|
|
176
|
+
it('should return true for flows that already have IDs', async () => {
|
|
177
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
178
|
+
const model = result.toModel();
|
|
179
|
+
|
|
180
|
+
const testFlowWithIds = model.narratives.find((f) => f.name === 'Test Flow with IDs');
|
|
181
|
+
expect(testFlowWithIds).toBeDefined();
|
|
182
|
+
|
|
183
|
+
if (testFlowWithIds) {
|
|
184
|
+
const modelWithExistingIds = { ...model, narratives: [testFlowWithIds] };
|
|
185
|
+
expect(hasAllIds(modelWithExistingIds)).toBe(true);
|
|
186
|
+
}
|
|
187
|
+
});
|
|
188
|
+
|
|
189
|
+
it('should return false if any slice is missing an ID', async () => {
|
|
190
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
191
|
+
const model = result.toModel();
|
|
192
|
+
|
|
193
|
+
const modelWithIds = addAutoIds(model);
|
|
194
|
+
expect(modelWithIds.narratives.length).toBeGreaterThan(0);
|
|
195
|
+
expect(modelWithIds.narratives[0].slices.length).toBeGreaterThan(0);
|
|
196
|
+
|
|
197
|
+
const modifiedModel = structuredClone(modelWithIds);
|
|
198
|
+
modifiedModel.narratives[0].slices[0].id = '';
|
|
199
|
+
expect(hasAllIds(modifiedModel)).toBe(false);
|
|
200
|
+
});
|
|
201
|
+
|
|
202
|
+
it('should return false if any rule is missing an ID', async () => {
|
|
203
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
204
|
+
const model = result.toModel();
|
|
205
|
+
|
|
206
|
+
const modelWithIds = addAutoIds(model);
|
|
207
|
+
|
|
208
|
+
let found = false;
|
|
209
|
+
for (const flow of modelWithIds.narratives) {
|
|
210
|
+
for (const slice of flow.slices) {
|
|
211
|
+
if ('server' in slice && slice.server?.specs?.rules !== undefined && slice.server.specs.rules.length > 0) {
|
|
212
|
+
const modifiedModel = structuredClone(modelWithIds);
|
|
213
|
+
const modifiedFlow = modifiedModel.narratives.find((f) => f.name === flow.name);
|
|
214
|
+
const modifiedSlice = modifiedFlow?.slices.find((s) => s.name === slice.name);
|
|
215
|
+
if (modifiedSlice && 'server' in modifiedSlice && modifiedSlice.server?.specs?.rules !== undefined) {
|
|
216
|
+
modifiedSlice.server.specs.rules[0].id = '';
|
|
217
|
+
expect(hasAllIds(modifiedModel)).toBe(false);
|
|
218
|
+
found = true;
|
|
219
|
+
break;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
if (found) break;
|
|
224
|
+
}
|
|
225
|
+
|
|
226
|
+
expect(found).toBe(true);
|
|
227
|
+
});
|
|
228
|
+
|
|
229
|
+
it('should return true when multiple flows with same sourceFile all have IDs', async () => {
|
|
230
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
231
|
+
const model = result.toModel();
|
|
232
|
+
|
|
233
|
+
const homepageFlows = model.narratives.filter(
|
|
234
|
+
(f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage.flow.ts'),
|
|
235
|
+
);
|
|
236
|
+
expect(homepageFlows.length).toBe(3);
|
|
237
|
+
|
|
238
|
+
const homepageModel = { ...model, narratives: homepageFlows };
|
|
239
|
+
expect(hasAllIds(homepageModel)).toBe(true);
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
it('should return false when any flow in multiple flows with same sourceFile is missing ID', async () => {
|
|
243
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
244
|
+
const model = result.toModel();
|
|
245
|
+
|
|
246
|
+
const homepageFlows = model.narratives.filter(
|
|
247
|
+
(f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-incomplete.flow.ts'),
|
|
248
|
+
);
|
|
249
|
+
expect(homepageFlows.length).toBe(3);
|
|
250
|
+
|
|
251
|
+
const homepageModel = { ...model, narratives: homepageFlows };
|
|
252
|
+
expect(hasAllIds(homepageModel)).toBe(false);
|
|
253
|
+
});
|
|
254
|
+
|
|
255
|
+
it('should return false when any slice in multiple flows with same sourceFile is missing ID', async () => {
|
|
256
|
+
const result = await getNarratives({ vfs, root, pattern: /\.(flow)\.(ts)$/, fastFsScan: true, importMap });
|
|
257
|
+
const model = result.toModel();
|
|
258
|
+
|
|
259
|
+
const homepageFlows = model.narratives.filter(
|
|
260
|
+
(f) => f.sourceFile !== undefined && f.sourceFile.includes('homepage-slice-missing.flow.ts'),
|
|
261
|
+
);
|
|
262
|
+
expect(homepageFlows.length).toBe(3);
|
|
263
|
+
|
|
264
|
+
const homepageModel = { ...model, narratives: homepageFlows };
|
|
265
|
+
expect(hasAllIds(homepageModel)).toBe(false);
|
|
266
|
+
});
|
|
267
|
+
});
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { Model, Slice } from '../index';
|
|
2
|
+
|
|
3
|
+
function hasValidId(item: { id?: string }): boolean {
|
|
4
|
+
return item.id !== undefined && item.id !== '';
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
function hasServerSpecIds(slice: Slice): boolean {
|
|
8
|
+
if (!('server' in slice) || slice.server?.specs?.rules === undefined) return true;
|
|
9
|
+
return slice.server.specs.rules.every(hasValidId);
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
function hasClientSpecIds(_slice: Slice): boolean {
|
|
13
|
+
// Client specs use string rules (no IDs needed), so always valid
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function hasSliceIds(slice: Slice): boolean {
|
|
18
|
+
return hasValidId(slice) && hasServerSpecIds(slice) && hasClientSpecIds(slice);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export function hasAllIds(specs: Model): boolean {
|
|
22
|
+
return specs.narratives.every((narrative) => hasValidId(narrative) && narrative.slices.every(hasSliceIds));
|
|
23
|
+
}
|
package/src/id/index.ts
ADDED
package/src/index.ts
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
|
|
3
|
+
// Core types and utilities
|
|
4
|
+
export type {
|
|
5
|
+
Integration,
|
|
6
|
+
DataSink,
|
|
7
|
+
DataSource,
|
|
8
|
+
DataSinkItem,
|
|
9
|
+
DataSourceItem,
|
|
10
|
+
DataItem,
|
|
11
|
+
MessageTarget,
|
|
12
|
+
Destination,
|
|
13
|
+
Origin,
|
|
14
|
+
State,
|
|
15
|
+
Command,
|
|
16
|
+
Event,
|
|
17
|
+
} from './types';
|
|
18
|
+
export { MessageTargetSchema, DataSinkSchema, DataSourceSchema } from './schema';
|
|
19
|
+
export { createIntegration } from './types';
|
|
20
|
+
|
|
21
|
+
// Apollo GraphQL
|
|
22
|
+
export { gql } from 'graphql-tag';
|
|
23
|
+
|
|
24
|
+
// HTTP GET template literal function
|
|
25
|
+
export const get = (strings: TemplateStringsArray, ...values: unknown[]) => {
|
|
26
|
+
return strings.reduce((result, str, i) => {
|
|
27
|
+
const value = values[i];
|
|
28
|
+
return result + str + (value !== undefined && value !== null ? String(value) : '');
|
|
29
|
+
}, '');
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
// Fluent API
|
|
33
|
+
export type {
|
|
34
|
+
FluentCommandSliceBuilder,
|
|
35
|
+
FluentQuerySliceBuilder,
|
|
36
|
+
FluentReactionSliceBuilder,
|
|
37
|
+
FluentExperienceSliceBuilder,
|
|
38
|
+
} from './fluent-builder';
|
|
39
|
+
export { command, query, react, experience, decide, evolve } from './fluent-builder';
|
|
40
|
+
|
|
41
|
+
// Data narrative builders
|
|
42
|
+
export { sink, source } from './data-narrative-builders';
|
|
43
|
+
export type { FieldSelector } from './data-narrative-builders';
|
|
44
|
+
|
|
45
|
+
// Narrative language functions
|
|
46
|
+
export { narrative, narrative as flow } from './narrative';
|
|
47
|
+
export { client, server, specs, should, request, data, rule, example } from './narrative';
|
|
48
|
+
export type { SliceTypeValueInterface } from './narrative';
|
|
49
|
+
export { SliceType } from './narrative';
|
|
50
|
+
|
|
51
|
+
// Narrative conversion utilities
|
|
52
|
+
export { getNarratives } from './getNarratives';
|
|
53
|
+
export { modelToNarrative } from './transformers/model-to-narrative';
|
|
54
|
+
|
|
55
|
+
// Testing helpers
|
|
56
|
+
export { createNarrativeSpec, given, when } from './testing';
|
|
57
|
+
|
|
58
|
+
// Schema definitions for progressive narrative creation
|
|
59
|
+
export {
|
|
60
|
+
NarrativeNamesSchema as NarrativeNamesSystemSchema,
|
|
61
|
+
SliceNamesSchema as SliceNamesSystemSchema,
|
|
62
|
+
ClientServerNamesSchema as ClientServerNamesSystemSchema,
|
|
63
|
+
modelSchema as SpecsSystemSchema,
|
|
64
|
+
MessageFieldSchema,
|
|
65
|
+
MessageSchema,
|
|
66
|
+
CommandSchema,
|
|
67
|
+
EventSchema,
|
|
68
|
+
StateSchema,
|
|
69
|
+
IntegrationSchema,
|
|
70
|
+
CommandSliceSchema,
|
|
71
|
+
QuerySliceSchema,
|
|
72
|
+
ReactSliceSchema,
|
|
73
|
+
ExperienceSliceSchema,
|
|
74
|
+
SliceSchema,
|
|
75
|
+
NarrativeSchema,
|
|
76
|
+
modelSchema,
|
|
77
|
+
EventExampleSchema,
|
|
78
|
+
CommandExampleSchema,
|
|
79
|
+
ExampleSchema,
|
|
80
|
+
RuleSchema,
|
|
81
|
+
SpecSchema,
|
|
82
|
+
} from './schema';
|
|
83
|
+
|
|
84
|
+
import {
|
|
85
|
+
CommandExampleSchema,
|
|
86
|
+
ErrorExampleSchema,
|
|
87
|
+
EventExampleSchema,
|
|
88
|
+
NarrativeSchema,
|
|
89
|
+
SliceSchema,
|
|
90
|
+
modelSchema,
|
|
91
|
+
StateExampleSchema,
|
|
92
|
+
QuerySliceSchema,
|
|
93
|
+
ReactSliceSchema,
|
|
94
|
+
ExperienceSliceSchema,
|
|
95
|
+
MessageSchema,
|
|
96
|
+
MessageFieldSchema,
|
|
97
|
+
CommandSliceSchema,
|
|
98
|
+
ExampleSchema,
|
|
99
|
+
RuleSchema,
|
|
100
|
+
SpecSchema,
|
|
101
|
+
} from './schema';
|
|
102
|
+
export type Model = z.infer<typeof modelSchema>;
|
|
103
|
+
export type Narrative = z.infer<typeof NarrativeSchema>;
|
|
104
|
+
export type CommandExample = z.infer<typeof CommandExampleSchema>;
|
|
105
|
+
export type EventExample = z.infer<typeof EventExampleSchema>;
|
|
106
|
+
export type Slice = z.infer<typeof SliceSchema>;
|
|
107
|
+
export type StateExample = z.infer<typeof StateExampleSchema>;
|
|
108
|
+
export type ErrorExample = z.infer<typeof ErrorExampleSchema>;
|
|
109
|
+
export type QuerySlice = z.infer<typeof QuerySliceSchema>;
|
|
110
|
+
export type ReactSlice = z.infer<typeof ReactSliceSchema>;
|
|
111
|
+
export type CommandSlice = z.infer<typeof CommandSliceSchema>;
|
|
112
|
+
export type ExperienceSlice = z.infer<typeof ExperienceSliceSchema>;
|
|
113
|
+
export type Message = z.infer<typeof MessageSchema>;
|
|
114
|
+
export type Example = z.infer<typeof ExampleSchema>;
|
|
115
|
+
export type MessageField = z.infer<typeof MessageFieldSchema>;
|
|
116
|
+
export type Rule = z.infer<typeof RuleSchema>;
|
|
117
|
+
export type Spec = z.infer<typeof SpecSchema>;
|
|
118
|
+
|
|
119
|
+
export {
|
|
120
|
+
commandHandler as exportSchemaCommandHandler,
|
|
121
|
+
type ExportSchemaCommand,
|
|
122
|
+
type ExportSchemaEvents,
|
|
123
|
+
type SchemaExportedEvent,
|
|
124
|
+
type SchemaExportFailedEvent,
|
|
125
|
+
} from './commands/export-schema';
|
|
126
|
+
|
|
127
|
+
import { commandHandler as exportSchemaHandler } from './commands/export-schema';
|
|
128
|
+
export const COMMANDS = [exportSchemaHandler];
|
|
129
|
+
|
|
130
|
+
// ID assignment utilities
|
|
131
|
+
export { addAutoIds, hasAllIds } from './id';
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { Integration } from './types';
|
|
2
|
+
import { IntegrationExport } from './loader/ts-utils';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Global registry to map integration internal names to their export names and source paths
|
|
6
|
+
*/
|
|
7
|
+
class IntegrationExportRegistry {
|
|
8
|
+
private integrationNameToExportName = new Map<string, string>();
|
|
9
|
+
private exportNameToIntegrationName = new Map<string, string>();
|
|
10
|
+
private exportNameToSourcePath = new Map<string, string>();
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Register integration exports from AST parsing
|
|
14
|
+
*/
|
|
15
|
+
registerIntegrationExports(integrationExports: IntegrationExport[]): void {
|
|
16
|
+
for (const { exportName, integrationName, sourcePath } of integrationExports) {
|
|
17
|
+
this.integrationNameToExportName.set(integrationName, exportName);
|
|
18
|
+
this.exportNameToIntegrationName.set(exportName, integrationName);
|
|
19
|
+
if (sourcePath !== null && sourcePath !== undefined && sourcePath !== '') {
|
|
20
|
+
this.exportNameToSourcePath.set(exportName, sourcePath);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Get the export name for an integration based on its internal name
|
|
27
|
+
*/
|
|
28
|
+
getExportName(integrationName: string): string | undefined {
|
|
29
|
+
return this.integrationNameToExportName.get(integrationName);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/**
|
|
33
|
+
* Get the integration name for an export name
|
|
34
|
+
*/
|
|
35
|
+
getIntegrationName(exportName: string): string | undefined {
|
|
36
|
+
return this.exportNameToIntegrationName.get(exportName);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Get the source path for an export name
|
|
41
|
+
*/
|
|
42
|
+
getSourcePath(exportName: string): string | undefined {
|
|
43
|
+
return this.exportNameToSourcePath.get(exportName);
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Get the export name for an Integration object
|
|
48
|
+
* Uses the object's exportName property first, then falls back to registry lookup
|
|
49
|
+
*/
|
|
50
|
+
getExportNameForIntegration(integration: Integration): string {
|
|
51
|
+
// First try the exportName property if set
|
|
52
|
+
if (integration.exportName !== null && integration.exportName !== undefined && integration.exportName !== '') {
|
|
53
|
+
return integration.exportName;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Fall back to registry lookup
|
|
57
|
+
const exportName = this.getExportName(integration.name);
|
|
58
|
+
return exportName !== null && exportName !== undefined && exportName !== '' ? exportName : integration.name; // Ultimate fallback to internal name
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
/**
|
|
62
|
+
* Clear all registered exports
|
|
63
|
+
*/
|
|
64
|
+
clear(): void {
|
|
65
|
+
this.integrationNameToExportName.clear();
|
|
66
|
+
this.exportNameToIntegrationName.clear();
|
|
67
|
+
this.exportNameToSourcePath.clear();
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
/**
|
|
71
|
+
* Get all registered integration exports
|
|
72
|
+
*/
|
|
73
|
+
getAll(): IntegrationExport[] {
|
|
74
|
+
const exports: IntegrationExport[] = [];
|
|
75
|
+
for (const [integrationName, exportName] of this.integrationNameToExportName) {
|
|
76
|
+
exports.push({ exportName, integrationName });
|
|
77
|
+
}
|
|
78
|
+
return exports;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// Global singleton registry
|
|
83
|
+
export const integrationExportRegistry = new IntegrationExportRegistry();
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// integration-helper.ts - Add this to your flow package
|
|
2
|
+
import { Integration } from './types';
|
|
3
|
+
import createDebug from 'debug';
|
|
4
|
+
|
|
5
|
+
const debug = createDebug('auto:flow:integrations');
|
|
6
|
+
if ('color' in debug && typeof debug === 'object') {
|
|
7
|
+
(debug as { color: string }).color = '6';
|
|
8
|
+
} // cyan
|
|
9
|
+
|
|
10
|
+
// Global registry for integrations
|
|
11
|
+
class GlobalIntegrationRegistry {
|
|
12
|
+
private integrations = new Map<string, Integration>();
|
|
13
|
+
|
|
14
|
+
register(integration: Integration) {
|
|
15
|
+
debug('Registering integration: %s', integration.name);
|
|
16
|
+
this.integrations.set(integration.name, integration);
|
|
17
|
+
debug('Integration registered successfully: %s, total: %d', integration.name, this.integrations.size);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
getAll(): Integration[] {
|
|
21
|
+
const integrations = Array.from(this.integrations.values());
|
|
22
|
+
debug('Getting all integrations, count: %d', integrations.length);
|
|
23
|
+
if (integrations.length > 0) {
|
|
24
|
+
debug(
|
|
25
|
+
'Integrations: %o',
|
|
26
|
+
integrations.map((i) => i.name),
|
|
27
|
+
);
|
|
28
|
+
}
|
|
29
|
+
return integrations;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
clear() {
|
|
33
|
+
debug('Clearing integrations, current count: %d', this.integrations.size);
|
|
34
|
+
this.integrations.clear();
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
get(name: string): Integration | undefined {
|
|
38
|
+
const integration = this.integrations.get(name);
|
|
39
|
+
debug('Getting integration %s: %s', name, integration ? 'found' : 'not found');
|
|
40
|
+
return integration;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
export const globalIntegrationRegistry = new GlobalIntegrationRegistry();
|
|
45
|
+
|
|
46
|
+
export const registerIntegrations = (...integrations: Integration[]) => {
|
|
47
|
+
for (const integration of integrations) {
|
|
48
|
+
globalIntegrationRegistry.register(integration);
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
// Export for use in schema generation
|
|
53
|
+
export { globalIntegrationRegistry as integrationRegistry };
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export const toPosix = (p: string) => p.replace(/\\/g, '/');
|
|
2
|
+
|
|
3
|
+
export function dirname(p: string) {
|
|
4
|
+
const posix = toPosix(p);
|
|
5
|
+
const idx = posix.lastIndexOf('/');
|
|
6
|
+
return idx > 0 ? posix.slice(0, idx) : '/';
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
export function join(a: string, b: string) {
|
|
10
|
+
const aa = toPosix(a).replace(/\/+$/, '');
|
|
11
|
+
const bb = toPosix(b).replace(/^\/+/, '');
|
|
12
|
+
return (aa ? aa + '/' : '/') + bb;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function normalize(path: string): string {
|
|
16
|
+
const parts = toPosix(path).split('/');
|
|
17
|
+
const out: string[] = [];
|
|
18
|
+
for (const part of parts) {
|
|
19
|
+
if (!part || part === '.') continue;
|
|
20
|
+
if (part === '..') {
|
|
21
|
+
if (out.length) out.pop();
|
|
22
|
+
continue;
|
|
23
|
+
}
|
|
24
|
+
out.push(part);
|
|
25
|
+
}
|
|
26
|
+
return '/' + out.join('/');
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
export const CANDIDATE_EXTS = ['.ts', '.tsx', '.js', '.jsx', '.mjs', '.cjs'];
|