@llm4ts/shell 0.17.0 → 0.18.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/Cli.d.ts +4 -0
- package/dist/Cli.d.ts.map +1 -1
- package/dist/Cli.js +69 -8
- package/dist/Cli.js.map +1 -1
- package/dist/FlowCatalog.d.ts +10 -4
- package/dist/FlowCatalog.d.ts.map +1 -1
- package/dist/FlowCatalog.js +25 -14
- package/dist/FlowCatalog.js.map +1 -1
- package/flows/epic-stories.js +1 -8
- package/flows/hello.js +15 -0
- package/flows/implement.js +1 -8
- package/flows/issue-pr.js +1 -8
- package/flows/judge-suite.js +1 -4
- package/flows/lib/epic-stories.js +3 -4
- package/flows/local.js +2 -5
- package/flows/modernize-bench.js +3 -12
- package/flows/modernize-extract.js +38 -20
- package/flows/modernize-implement.js +4 -15
- package/flows/modernize-pack-check.js +1 -8
- package/flows/modernize-review.js +4 -13
- package/flows/modernize-seed.js +3 -11
- package/flows/modernize-survey.js +0 -0
- package/flows/modernize-verify.js +5 -13
- package/flows/sdd.js +2 -12
- package/kits/j2ee-nextjs/README.md +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/RUNBOOK.md +232 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/PAGES.md +67 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/pom.xml +49 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/AcctOvwDTO.java +58 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/BenfDTO.java +49 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/dto/TrfDTO.java +70 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbAcctListService.java +53 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfListService.java +58 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbBenfMaintService.java +58 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbException.java +21 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbGateway.java +44 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfExecService.java +53 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/esb/EsbTrfValidateService.java +45 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/AccountOverviewServlet.java +90 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/BeneficiaryServlet.java +195 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferDraft.java +62 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/java/com/demobank/legacy/web/TransferServlet.java +223 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/WEB-INF/web.xml +59 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/accountOverview.jsp +65 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryEdit.jsp +70 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/beneficiaryList.jsp +43 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/css/bank.css +132 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/dashboard.jsp +28 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/footer.jsp +8 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/header.jsp +22 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/help.jsp +32 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/jquery-1.12.4.min.js +1 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/js/validate.js +79 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/login.jsp +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/messages.jsp +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/nav.jsp +14 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/oldTransfer.jsp +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/profile.jsp +26 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/promoQ3.jsp +23 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/settings.jsp +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/testHarness.jsp +39 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferConfirm.jsp +35 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep1.jsp +73 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/legacy-j2ee/src/main/webapp/transferStep2.jsp +40 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/CONTRIBUTING.md +76 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/README.md +46 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/cards.openapi.yaml +57 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/contracts/profile.openapi.yaml +73 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/eslint.config.mjs +24 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next-env.d.ts +5 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/next.config.mjs +10 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/package.json +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/pnpm-lock.yaml +2895 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/cards/page.tsx +62 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/layout.tsx +41 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/page.tsx +26 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/profile/page.tsx +134 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/app/signed-in-badge.tsx +9 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/auth/AuthProvider.tsx +36 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Button.tsx +27 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Card.tsx +18 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/DataTable.tsx +57 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Field.tsx +34 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Form.tsx +70 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/PageLayout.tsx +39 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/Stepper.tsx +29 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/components/index.ts +19 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/mock.ts +47 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/cards/port.ts +31 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/mock.ts +45 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/profile/port.ts +24 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/services/registry.ts +20 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/components.css +269 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/src/theme/tokens.css +38 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/cards.page.test.tsx +81 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tests/profile.page.test.tsx +87 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/tsconfig.json +54 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/nextjs/vitest.config.ts +17 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/preflight.mjs +53 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/reset-demo.mjs +40 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/seed-legacy-j2ee.mjs +71 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/seed-nextjs.mjs +111 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-legacy-j2ee.mjs +144 -0
- package/kits/j2ee-nextjs/fixtures/demo-bank/smoke-nextjs.mjs +118 -0
- package/{flows → kits/j2ee-nextjs/flows}/convert-all.js +1 -7
- package/{flows → kits/j2ee-nextjs/flows}/convert-page.js +2 -6
- package/{flows → kits/j2ee-nextjs/flows}/lib/convert.js +6 -16
- package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/pack.md +2 -1
- package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/spec.md +5 -1
- package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/pack.md +1 -1
- package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/pack.md +1 -1
- package/kits/mainframe-java/README.md +31 -0
- package/{flows → kits/mainframe-java}/packs/ace-integration/pack.md +1 -1
- package/{flows → kits/mainframe-java}/packs/ace-kafka/pack.md +1 -1
- package/{flows → kits/mainframe-java}/packs/cobol-kafka/pack.md +1 -1
- package/{flows → kits/mainframe-java}/packs/cobol-springboot/pack.md +1 -1
- package/package.json +6 -6
- package/src/Cli.ts +92 -9
- package/src/FlowCatalog.ts +29 -13
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-001-jstl-table.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-002-jquery-validation.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-003-session-stepper.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-004-esb-port.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/patterns/PAT-J2EE-005-include-shell.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/analysis.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/bdd.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/implement.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/plan.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/review.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-refine.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/prompts/survey-triage.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/acl-purity.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/j2ee-nextjs-spa/reviewers/house-style.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/lessons.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/analysis.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/bdd.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/implement.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/plan.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/review.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/spec.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-refine.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/prompts/survey-triage.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-bff-nextjs/reviewers/bff-boundary.md +0 -0
- /package/{flows/packs/ace-integration → kits/j2ee-nextjs/packs/jsp-bff-nextjs}/reviewers/traceability.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/lessons.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/analysis.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/bdd.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/implement.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/plan.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/review.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/spec.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-refine.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/prompts/survey-triage.md +0 -0
- /package/{flows/packs/ace-kafka → kits/j2ee-nextjs/packs/jsp-nextjs}/reviewers/traceability.md +0 -0
- /package/{flows → kits/j2ee-nextjs}/packs/jsp-nextjs/reviewers/ux-fidelity.md +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/README.md +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/layout.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/app/page.js +0 -0
- /package/{flows/fixtures/scaffolds/kafka-streams-service/src/test/resources/features → kits/j2ee-nextjs/scaffolds/nextjs-spa/docs/specs}/.gitkeep +0 -0
- /package/{flows/fixtures/scaffolds/nextjs-spa/docs/specs → kits/j2ee-nextjs/scaffolds/nextjs-spa/features}/.gitkeep +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/next.config.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/package.json +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/nextjs-spa/tests/smoke.test.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/README.md +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/layout.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/app/page.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/next.config.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/package.json +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/frontend/tests/smoke.test.js +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/pom.xml +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/scripts/test.sh +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/java/com/meridian/bff/Application.java +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/main/resources/application.yaml +0 -0
- /package/{flows/fixtures → kits/j2ee-nextjs}/scaffolds/spring-bff/src/test/java/com/meridian/bff/ApplicationTests.java +0 -0
- /package/{flows/fixtures/scaffolds/nextjs-spa → kits/j2ee-nextjs/scaffolds/spring-bff/src/test/resources}/features/.gitkeep +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-integration/reviewers/routing-fidelity.md +0 -0
- /package/{flows/packs/cobol-kafka → kits/mainframe-java/packs/ace-integration}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/prompts/vectors.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/event-contracts.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/ace-kafka/reviewers/routing-fidelity.md +0 -0
- /package/{flows/packs/cobol-springboot → kits/mainframe-java/packs/ace-kafka}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-001-record-to-event.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-002-job-step-topology.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-003-checkpoint-idempotence.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-004-eod-totals-window.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-005-reject-topic.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-006-keyed-state-store.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-007-outbox.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-008-partition-key.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-009-batch-window-cutoff.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/patterns/PAT-STREAM-010-replay-backfill.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-refine.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/survey-triage.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/prompts/vectors.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/cobol-fidelity.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-kafka/reviewers/pattern-conformance.md +0 -0
- /package/{flows/packs/jsp-bff-nextjs → kits/mainframe-java/packs/cobol-kafka}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/lessons.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/analysis.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/bdd.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/implement.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/plan.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/review.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/spec.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-refine.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/survey-triage.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/prompts/vectors.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/cobol-fidelity.md +0 -0
- /package/{flows → kits/mainframe-java}/packs/cobol-springboot/reviewers/pattern-conformance.md +0 -0
- /package/{flows/packs/jsp-nextjs → kits/mainframe-java/packs/cobol-springboot}/reviewers/traceability.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-001-comp3-money.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-002-redefines.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-003-88-levels.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-004-perform-thru.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-005-file-status.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-006-sqlcode.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-007-validation-order.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-008-zoned-decimal.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-009-occurs-table.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-010-copybook-record.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-011-batch-counters.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-012-commit-frequency.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-013-abend.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-014-reject-file.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-015-accept-date.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-016-string-building.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-017-cursor-loop.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-018-yn-switches.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-019-shared-accumulators.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-020-tiered-fees.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-021-overdraft-floor.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-022-jcl-job-net.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-023-sort-step.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-024-fixed-width-records.md +0 -0
- /package/{flows → kits/mainframe-java}/patterns/PAT-COBOL-025-audit-rows.md +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/README.md +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/pom.xml +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/scripts/replay.sh +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/kafka-streams-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
- /package/{flows/fixtures/scaffolds/spring-bff → kits/mainframe-java/scaffolds/kafka-streams-service}/src/test/resources/features/.gitkeep +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/README.md +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/pom.xml +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/scripts/replay.sh +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/java/com/meridian/scaffold/Application.java +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/main/resources/application.yaml +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/java/com/meridian/scaffold/ApplicationTests.java +0 -0
- /package/{flows/fixtures → kits/mainframe-java}/scaffolds/spring-boot-service/src/test/resources/features/.gitkeep +0 -0
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
<%@ page contentType="text/html; charset=ISO-8859-1" %>
|
|
2
|
+
<%@ page import="java.util.List" %>
|
|
3
|
+
<%@ page import="com.demobank.legacy.dto.BenfDTO" %>
|
|
4
|
+
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
|
|
5
|
+
<%-- HERO 3, step 1 of 3: wire transfer entry. Posts step=1 to TransferServlet
|
|
6
|
+
which stores a TransferDraft in HttpSession. Scriptlet + JSTL mix is
|
|
7
|
+
historical: the beneficiary combo predates the JSTL migration. --%>
|
|
8
|
+
<jsp:include page="header.jsp" />
|
|
9
|
+
|
|
10
|
+
<h1>Wire Transfer — Step 1 of 3</h1>
|
|
11
|
+
|
|
12
|
+
<c:if test="${not empty stepErr}">
|
|
13
|
+
<p class="msgErr"><c:out value="${stepErr}" /></p>
|
|
14
|
+
</c:if>
|
|
15
|
+
|
|
16
|
+
<form id="trfForm" class="legacy" method="post" action="transfer">
|
|
17
|
+
<input type="hidden" name="step" value="1" />
|
|
18
|
+
<div class="row">
|
|
19
|
+
<label for="benfId">Beneficiary</label>
|
|
20
|
+
<select id="benfId" name="benfId">
|
|
21
|
+
<option value="">-- select --</option>
|
|
22
|
+
<%
|
|
23
|
+
// Legacy: combo rendered with a scriptlet since 2007 (pre-JSTL page).
|
|
24
|
+
List benfCombo = (List) request.getAttribute("benfCombo");
|
|
25
|
+
if (benfCombo != null) {
|
|
26
|
+
for (int i = 0; i < benfCombo.size(); i++) {
|
|
27
|
+
BenfDTO b = (BenfDTO) benfCombo.get(i);
|
|
28
|
+
%>
|
|
29
|
+
<option value="<%= b.getBenfId() %>"><%= b.getBenfNm() %> - <%= b.getBenfIban() %></option>
|
|
30
|
+
<%
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
%>
|
|
34
|
+
</select>
|
|
35
|
+
<a href="beneficiary?action=new">new beneficiary</a>
|
|
36
|
+
</div>
|
|
37
|
+
<div class="row">
|
|
38
|
+
<label for="trfAmt">Amount</label>
|
|
39
|
+
<input type="text" id="trfAmt" name="trfAmt" size="12" value="<c:out value='${draft.trfAmt}' />" />
|
|
40
|
+
<select id="trfCcy" name="trfCcy">
|
|
41
|
+
<option value="EUR" selected="selected">EUR</option>
|
|
42
|
+
</select>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="row">
|
|
45
|
+
<label for="trfDesc">Description</label>
|
|
46
|
+
<input type="text" id="trfDesc" name="trfDesc" size="50" maxlength="140"
|
|
47
|
+
value="<c:out value='${draft.trfDesc}' />" />
|
|
48
|
+
</div>
|
|
49
|
+
<div class="row">
|
|
50
|
+
<label for="valDt">Value date</label>
|
|
51
|
+
<input type="text" id="valDt" name="valDt" size="10" value="<c:out value='${draft.valDt}' />" />
|
|
52
|
+
<span class="small">(dd/mm/yyyy, leave blank for first available)</span>
|
|
53
|
+
</div>
|
|
54
|
+
<div class="row">
|
|
55
|
+
<input type="submit" class="btn" value="Continue" />
|
|
56
|
+
</div>
|
|
57
|
+
</form>
|
|
58
|
+
|
|
59
|
+
<script type="text/javascript">
|
|
60
|
+
$(document).ready(function() {
|
|
61
|
+
$("#trfForm").submit(function() {
|
|
62
|
+
var ok = true;
|
|
63
|
+
if (dbTrim($("#benfId").val()) == "") { dbMark("#benfId", "Select a beneficiary"); ok = false; }
|
|
64
|
+
else dbUnmark("#benfId");
|
|
65
|
+
if (!dbAmount("#trfAmt")) ok = false;
|
|
66
|
+
// Description optional client-side; host rejects some characters,
|
|
67
|
+
// server strips them silently (see TransferServlet.sanitizeDesc).
|
|
68
|
+
return ok;
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
</script>
|
|
72
|
+
|
|
73
|
+
<jsp:include page="footer.jsp" />
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
<%@ page contentType="text/html; charset=ISO-8859-1" %>
|
|
2
|
+
<%@ page import="com.demobank.legacy.web.TransferDraft" %>
|
|
3
|
+
<%-- HERO 3, step 2 of 3: review. All data comes from the TransferDraft in
|
|
4
|
+
HttpSession (attribute "trfDraft"); nothing is re-posted except the
|
|
5
|
+
confirmation itself. Direct GET without a draft bounces to step 1. --%>
|
|
6
|
+
<jsp:include page="header.jsp" />
|
|
7
|
+
|
|
8
|
+
<h1>Wire Transfer — Step 2 of 3: Review</h1>
|
|
9
|
+
|
|
10
|
+
<%
|
|
11
|
+
TransferDraft draft = (TransferDraft) session.getAttribute("trfDraft");
|
|
12
|
+
if (draft == null) {
|
|
13
|
+
// Session expired or deep link: back to step 1.
|
|
14
|
+
response.sendRedirect("transfer");
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
%>
|
|
18
|
+
|
|
19
|
+
<table class="data" style="width: 60%;">
|
|
20
|
+
<tr><th>Beneficiary</th><td><%= draft.getBenfNm() %></td></tr>
|
|
21
|
+
<tr><th>IBAN</th><td><%= draft.getBenfIban() %></td></tr>
|
|
22
|
+
<tr><th>Amount</th><td><%= draft.getTrfCcy() %> <%= draft.getTrfAmt() %></td></tr>
|
|
23
|
+
<tr><th>Description</th><td><%= draft.getTrfDesc() == null ? "" : draft.getTrfDesc() %></td></tr>
|
|
24
|
+
<tr><th>Value date</th><td><%= draft.getValDt() %></td></tr>
|
|
25
|
+
<tr><th>Fee</th><td>EUR <%= draft.getFeeAmt() %> (standard SEPA)</td></tr>
|
|
26
|
+
</table>
|
|
27
|
+
|
|
28
|
+
<p class="msgErr">
|
|
29
|
+
Please verify the details above. On confirmation the transfer is sent to
|
|
30
|
+
the bank host and can no longer be amended online.
|
|
31
|
+
</p>
|
|
32
|
+
|
|
33
|
+
<form method="post" action="transfer">
|
|
34
|
+
<input type="hidden" name="step" value="3" />
|
|
35
|
+
<input type="submit" class="btn" value="Confirm transfer" />
|
|
36
|
+
<input type="button" class="btn btnGrey" value="Back"
|
|
37
|
+
onclick="window.location='transfer';" />
|
|
38
|
+
</form>
|
|
39
|
+
|
|
40
|
+
<jsp:include page="footer.jsp" />
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# DemoBank house rules
|
|
2
|
+
|
|
3
|
+
These rules apply to every page added to this repository — by people or by
|
|
4
|
+
automated converters. The exemplar pages (`src/app/cards/page.tsx`,
|
|
5
|
+
`src/app/profile/page.tsx`) demonstrate all of them; imitate the exemplars
|
|
6
|
+
before inventing anything.
|
|
7
|
+
|
|
8
|
+
## File layout
|
|
9
|
+
|
|
10
|
+
```text
|
|
11
|
+
contracts/<domain>.openapi.yaml wire contract (OpenAPI 3.0)
|
|
12
|
+
src/app/<route>/page.tsx one page per route, always "use client"
|
|
13
|
+
src/auth/AuthProvider.tsx SSO stub — consume, never reimplement
|
|
14
|
+
src/components/ design system (import from '@/components')
|
|
15
|
+
src/services/<domain>/port.ts typed interface + factory type
|
|
16
|
+
src/services/<domain>/mock.ts mock adapter with fixture data
|
|
17
|
+
src/services/registry.ts the only place adapters are wired to ports
|
|
18
|
+
src/theme/ tokens + component CSS
|
|
19
|
+
tests/<route>.page.test.tsx one component test file per page
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Imports use the `@/` alias (`@/components`, `@/services/registry`); no deep
|
|
23
|
+
relative paths across top-level folders.
|
|
24
|
+
|
|
25
|
+
## Pages
|
|
26
|
+
|
|
27
|
+
- Every page starts with `'use client'` and default-exports the page
|
|
28
|
+
component. No server components fetching data, no API routes.
|
|
29
|
+
- Every page renders exactly one `PageLayout` at its root and puts content
|
|
30
|
+
in `Card`s.
|
|
31
|
+
- Get the signed-in user from `useAuth()`. Never implement login, tokens, or
|
|
32
|
+
redirects.
|
|
33
|
+
- Loading states: hold `null` until the port resolves and render
|
|
34
|
+
`<p className="db-loading">…</p>` meanwhile (see the exemplars).
|
|
35
|
+
|
|
36
|
+
## Components
|
|
37
|
+
|
|
38
|
+
- Compose the design system: `Button`, `Field`, `Form`, `DataTable`,
|
|
39
|
+
`Stepper`, `Card`, `PageLayout`. Do not add external UI kits and do not
|
|
40
|
+
hand-roll tables, labels, or submit handling that a component covers.
|
|
41
|
+
- Tabular data goes through `DataTable` with declarative columns.
|
|
42
|
+
- Every form control sits inside a `Field` (label + error handled for you)
|
|
43
|
+
and every form is a `Form` render prop (values, errors, setValue,
|
|
44
|
+
submitting). Validation is a pure function next to the page returning a
|
|
45
|
+
`ValidationErrors<T>` map.
|
|
46
|
+
- Styling: use the `db-*` classes from `src/theme/components.css`, which
|
|
47
|
+
consume only the custom properties in `src/theme/tokens.css`. No inline
|
|
48
|
+
colors, no new CSS files per page, no CSS-in-JS.
|
|
49
|
+
|
|
50
|
+
## Services (ports and adapters)
|
|
51
|
+
|
|
52
|
+
- No `fetch`/network calls in components — ever. Pages call ports; adapters
|
|
53
|
+
talk to the gateway.
|
|
54
|
+
- Each domain gets `src/services/<domain>/port.ts` (interface + `...Factory`
|
|
55
|
+
type), `src/services/<domain>/mock.ts` (deterministic fixture data, small
|
|
56
|
+
artificial delay), and `contracts/<domain>.openapi.yaml` matching the port.
|
|
57
|
+
- Pages obtain ports only from `src/services/registry.ts`. Swapping a mock
|
|
58
|
+
for a real adapter is a one-line change there; pages never import adapters
|
|
59
|
+
directly.
|
|
60
|
+
|
|
61
|
+
## Tests
|
|
62
|
+
|
|
63
|
+
- One test file per page under `tests/`, named `<route>.page.test.tsx`,
|
|
64
|
+
written with Vitest + React Testing Library.
|
|
65
|
+
- Style: `vi.mock('@/services/registry', …)` with instrumented port
|
|
66
|
+
functions, render the page inside `AuthProvider`, then assert (1) fields
|
|
67
|
+
or rows render, (2) validation fires and blocks the port on bad input,
|
|
68
|
+
(3) the port is called with the expected payload.
|
|
69
|
+
- Tests are deterministic and network-free.
|
|
70
|
+
|
|
71
|
+
## TypeScript and lint
|
|
72
|
+
|
|
73
|
+
- `strict` TypeScript; no `any`, no type assertions (`as`), no `@ts-ignore`.
|
|
74
|
+
- Model domain data with `readonly` interfaces exported from the port.
|
|
75
|
+
- Gates that must stay green: `pnpm typecheck && pnpm lint && pnpm test &&
|
|
76
|
+
pnpm build`.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# demo-bank-nextjs
|
|
2
|
+
|
|
3
|
+
Synthetic, client-only Next.js SPA for a fictional bank ("DemoBank"). This is
|
|
4
|
+
the **destination fixture** for the llm4ts bank-conversion PoC: converted
|
|
5
|
+
legacy pages land here, and the convert flow judges them by how well they
|
|
6
|
+
imitate this repo's house style (see `CONTRIBUTING.md` and the exemplar
|
|
7
|
+
pages `src/app/cards/page.tsx` and `src/app/profile/page.tsx`).
|
|
8
|
+
|
|
9
|
+
Everything is fake: SSO is a stubbed `AuthProvider`, service adapters are
|
|
10
|
+
in-memory mocks behind typed ports, and the data is deterministic fixture
|
|
11
|
+
data. No real bank, brand, or person is referenced.
|
|
12
|
+
|
|
13
|
+
## Install and run
|
|
14
|
+
|
|
15
|
+
This package is standalone — it is **not** part of the llm4ts pnpm
|
|
16
|
+
workspace, so install with the workspace ignored:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
pnpm install --ignore-workspace
|
|
20
|
+
pnpm dev # local dev server
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
Gates (the convert flow's hard gates — all must pass):
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pnpm typecheck && pnpm lint && pnpm test && pnpm build
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
`pnpm build` produces a static export in `out/` (`output: 'export'`; there
|
|
30
|
+
is no server runtime).
|
|
31
|
+
|
|
32
|
+
## Offline notes
|
|
33
|
+
|
|
34
|
+
- `pnpm-lock.yaml` is committed; installs are deterministic.
|
|
35
|
+
- To run on a machine without network (e.g. workshop stage): warm the pnpm
|
|
36
|
+
store once while online with `pnpm install --ignore-workspace` here, then
|
|
37
|
+
in a seeded copy run `pnpm install --ignore-workspace --offline` — pnpm
|
|
38
|
+
resolves everything from the lockfile and the local store.
|
|
39
|
+
- Tests, typecheck, lint, and build never touch the network.
|
|
40
|
+
|
|
41
|
+
## Seeding a working copy
|
|
42
|
+
|
|
43
|
+
The fixture is materialized as a standalone git repository by
|
|
44
|
+
`../seed-nextjs.mjs` (node_modules and build output are excluded; the
|
|
45
|
+
initial commit is deterministic). `../smoke-nextjs.mjs` seeds into a temp
|
|
46
|
+
dir and asserts the expected files exist.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Wire contract for the cards domain. Mirrors src/services/cards/port.ts —
|
|
2
|
+
# keep the two in sync. Served by the API gateway; the SPA never calls it
|
|
3
|
+
# directly outside the cards adapter.
|
|
4
|
+
openapi: 3.0.3
|
|
5
|
+
info:
|
|
6
|
+
title: DemoBank Cards API
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
paths:
|
|
9
|
+
/customers/{customerId}/cards:
|
|
10
|
+
get:
|
|
11
|
+
operationId: listCards
|
|
12
|
+
summary: List payment cards for a customer
|
|
13
|
+
parameters:
|
|
14
|
+
- name: customerId
|
|
15
|
+
in: path
|
|
16
|
+
required: true
|
|
17
|
+
schema:
|
|
18
|
+
type: string
|
|
19
|
+
responses:
|
|
20
|
+
'200':
|
|
21
|
+
description: The customer's cards
|
|
22
|
+
content:
|
|
23
|
+
application/json:
|
|
24
|
+
schema:
|
|
25
|
+
type: array
|
|
26
|
+
items:
|
|
27
|
+
$ref: '#/components/schemas/CardSummary'
|
|
28
|
+
components:
|
|
29
|
+
schemas:
|
|
30
|
+
Money:
|
|
31
|
+
type: object
|
|
32
|
+
required: [amount, currency]
|
|
33
|
+
properties:
|
|
34
|
+
amount:
|
|
35
|
+
type: number
|
|
36
|
+
currency:
|
|
37
|
+
type: string
|
|
38
|
+
description: ISO 4217 code
|
|
39
|
+
CardSummary:
|
|
40
|
+
type: object
|
|
41
|
+
required: [id, label, maskedPan, kind, status, balance]
|
|
42
|
+
properties:
|
|
43
|
+
id:
|
|
44
|
+
type: string
|
|
45
|
+
label:
|
|
46
|
+
type: string
|
|
47
|
+
maskedPan:
|
|
48
|
+
type: string
|
|
49
|
+
description: Masked PAN, e.g. "**** **** **** 4242"
|
|
50
|
+
kind:
|
|
51
|
+
type: string
|
|
52
|
+
enum: [debit, credit]
|
|
53
|
+
status:
|
|
54
|
+
type: string
|
|
55
|
+
enum: [active, blocked]
|
|
56
|
+
balance:
|
|
57
|
+
$ref: '#/components/schemas/Money'
|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# Wire contract for the profile domain. Mirrors src/services/profile/port.ts —
|
|
2
|
+
# keep the two in sync. Served by the API gateway; the SPA never calls it
|
|
3
|
+
# directly outside the profile adapter.
|
|
4
|
+
openapi: 3.0.3
|
|
5
|
+
info:
|
|
6
|
+
title: DemoBank Profile API
|
|
7
|
+
version: 1.0.0
|
|
8
|
+
paths:
|
|
9
|
+
/customers/{customerId}/profile:
|
|
10
|
+
get:
|
|
11
|
+
operationId: getProfile
|
|
12
|
+
summary: Fetch a customer's profile
|
|
13
|
+
parameters:
|
|
14
|
+
- name: customerId
|
|
15
|
+
in: path
|
|
16
|
+
required: true
|
|
17
|
+
schema:
|
|
18
|
+
type: string
|
|
19
|
+
responses:
|
|
20
|
+
'200':
|
|
21
|
+
description: The customer's profile
|
|
22
|
+
content:
|
|
23
|
+
application/json:
|
|
24
|
+
schema:
|
|
25
|
+
$ref: '#/components/schemas/Profile'
|
|
26
|
+
put:
|
|
27
|
+
operationId: updateProfile
|
|
28
|
+
summary: Update a customer's profile
|
|
29
|
+
parameters:
|
|
30
|
+
- name: customerId
|
|
31
|
+
in: path
|
|
32
|
+
required: true
|
|
33
|
+
schema:
|
|
34
|
+
type: string
|
|
35
|
+
requestBody:
|
|
36
|
+
required: true
|
|
37
|
+
content:
|
|
38
|
+
application/json:
|
|
39
|
+
schema:
|
|
40
|
+
$ref: '#/components/schemas/ProfileUpdate'
|
|
41
|
+
responses:
|
|
42
|
+
'200':
|
|
43
|
+
description: The updated profile
|
|
44
|
+
content:
|
|
45
|
+
application/json:
|
|
46
|
+
schema:
|
|
47
|
+
$ref: '#/components/schemas/Profile'
|
|
48
|
+
components:
|
|
49
|
+
schemas:
|
|
50
|
+
Profile:
|
|
51
|
+
type: object
|
|
52
|
+
required: [customerId, fullName, email, phone]
|
|
53
|
+
properties:
|
|
54
|
+
customerId:
|
|
55
|
+
type: string
|
|
56
|
+
fullName:
|
|
57
|
+
type: string
|
|
58
|
+
email:
|
|
59
|
+
type: string
|
|
60
|
+
format: email
|
|
61
|
+
phone:
|
|
62
|
+
type: string
|
|
63
|
+
ProfileUpdate:
|
|
64
|
+
type: object
|
|
65
|
+
required: [fullName, email, phone]
|
|
66
|
+
properties:
|
|
67
|
+
fullName:
|
|
68
|
+
type: string
|
|
69
|
+
email:
|
|
70
|
+
type: string
|
|
71
|
+
format: email
|
|
72
|
+
phone:
|
|
73
|
+
type: string
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
// Minimal flat config: typescript-eslint recommended plus a few house rules.
|
|
2
|
+
// Deliberately no framework plugin zoo — the hard gates are typecheck, lint,
|
|
3
|
+
// test, build; the house style lives in CONTRIBUTING.md and the exemplars.
|
|
4
|
+
import tseslint from 'typescript-eslint';
|
|
5
|
+
|
|
6
|
+
export default tseslint.config(
|
|
7
|
+
{
|
|
8
|
+
ignores: ['node_modules/', '.next/', 'out/', 'next-env.d.ts'],
|
|
9
|
+
},
|
|
10
|
+
...tseslint.configs.recommended,
|
|
11
|
+
{
|
|
12
|
+
rules: {
|
|
13
|
+
'@typescript-eslint/no-explicit-any': 'error',
|
|
14
|
+
'@typescript-eslint/consistent-type-assertions': [
|
|
15
|
+
'error',
|
|
16
|
+
{ assertionStyle: 'never' },
|
|
17
|
+
],
|
|
18
|
+
'@typescript-eslint/consistent-type-imports': 'error',
|
|
19
|
+
eqeqeq: ['error', 'always'],
|
|
20
|
+
'no-console': 'error',
|
|
21
|
+
'prefer-const': 'error',
|
|
22
|
+
},
|
|
23
|
+
},
|
|
24
|
+
);
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Client-only SPA: static export, served from object storage behind a CDN.
|
|
3
|
+
* Mirrors kits/j2ee-nextjs/scaffolds/nextjs-spa (the bank-provided scaffold).
|
|
4
|
+
* @type {import('next').NextConfig}
|
|
5
|
+
*/
|
|
6
|
+
const nextConfig = {
|
|
7
|
+
output: 'export',
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
export default nextConfig;
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "demo-bank-nextjs",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"private": true,
|
|
5
|
+
"scripts": {
|
|
6
|
+
"dev": "next dev",
|
|
7
|
+
"build": "next build",
|
|
8
|
+
"typecheck": "tsc --noEmit",
|
|
9
|
+
"lint": "eslint .",
|
|
10
|
+
"test": "vitest run"
|
|
11
|
+
},
|
|
12
|
+
"dependencies": {
|
|
13
|
+
"next": "15.3.4",
|
|
14
|
+
"react": "19.1.0",
|
|
15
|
+
"react-dom": "19.1.0"
|
|
16
|
+
},
|
|
17
|
+
"devDependencies": {
|
|
18
|
+
"@testing-library/dom": "^10.4.0",
|
|
19
|
+
"@testing-library/react": "^16.3.0",
|
|
20
|
+
"@types/node": "^22.15.0",
|
|
21
|
+
"@types/react": "^19.1.0",
|
|
22
|
+
"@types/react-dom": "^19.1.0",
|
|
23
|
+
"eslint": "^9.29.0",
|
|
24
|
+
"jsdom": "^26.1.0",
|
|
25
|
+
"typescript": "5.8.3",
|
|
26
|
+
"typescript-eslint": "^8.34.0",
|
|
27
|
+
"vitest": "^3.2.0"
|
|
28
|
+
}
|
|
29
|
+
}
|