oh-my-oop 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/MCP_STRUCTURE.md +301 -0
- package/README.md +167 -0
- package/SCOPE.md +27 -0
- package/dist/application/discovery.d.ts +133 -0
- package/dist/application/discovery.js +62 -0
- package/dist/application/discovery.js.map +1 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +80 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +16 -0
- package/dist/config.js +32 -0
- package/dist/config.js.map +1 -0
- package/dist/domain/collaborators.d.ts +2 -0
- package/dist/domain/collaborators.js +26 -0
- package/dist/domain/collaborators.js.map +1 -0
- package/dist/domain/ids.d.ts +4 -0
- package/dist/domain/ids.js +23 -0
- package/dist/domain/ids.js.map +1 -0
- package/dist/domain/model.d.ts +71 -0
- package/dist/domain/model.js +2 -0
- package/dist/domain/model.js.map +1 -0
- package/dist/domain/schemas.d.ts +213 -0
- package/dist/domain/schemas.js +79 -0
- package/dist/domain/schemas.js.map +1 -0
- package/dist/domain/stereotypes.d.ts +7 -0
- package/dist/domain/stereotypes.js +65 -0
- package/dist/domain/stereotypes.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +21 -0
- package/dist/index.js.map +1 -0
- package/dist/io/classStore.d.ts +9 -0
- package/dist/io/classStore.js +39 -0
- package/dist/io/classStore.js.map +1 -0
- package/dist/io/collaborationStore.d.ts +7 -0
- package/dist/io/collaborationStore.js +32 -0
- package/dist/io/collaborationStore.js.map +1 -0
- package/dist/io/design.d.ts +3 -0
- package/dist/io/design.js +22 -0
- package/dist/io/design.js.map +1 -0
- package/dist/io/designIndex.d.ts +6 -0
- package/dist/io/designIndex.js +49 -0
- package/dist/io/designIndex.js.map +1 -0
- package/dist/io/frontmatter.d.ts +8 -0
- package/dist/io/frontmatter.js +31 -0
- package/dist/io/frontmatter.js.map +1 -0
- package/dist/io/history.d.ts +10 -0
- package/dist/io/history.js +38 -0
- package/dist/io/history.js.map +1 -0
- package/dist/io/useCaseStore.d.ts +8 -0
- package/dist/io/useCaseStore.js +36 -0
- package/dist/io/useCaseStore.js.map +1 -0
- package/dist/io/workspace.d.ts +14 -0
- package/dist/io/workspace.js +82 -0
- package/dist/io/workspace.js.map +1 -0
- package/dist/oop/commands.d.ts +446 -0
- package/dist/oop/commands.js +319 -0
- package/dist/oop/commands.js.map +1 -0
- package/dist/oop/conformance.d.ts +16 -0
- package/dist/oop/conformance.js +30 -0
- package/dist/oop/conformance.js.map +1 -0
- package/dist/prompts/discovery.d.ts +2 -0
- package/dist/prompts/discovery.js +41 -0
- package/dist/prompts/discovery.js.map +1 -0
- package/dist/prompts/imagineWithoutController.d.ts +2 -0
- package/dist/prompts/imagineWithoutController.js +75 -0
- package/dist/prompts/imagineWithoutController.js.map +1 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/index.js +17 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/phasePressureTest.d.ts +2 -0
- package/dist/prompts/phasePressureTest.js +69 -0
- package/dist/prompts/phasePressureTest.js.map +1 -0
- package/dist/prompts/rddIntro.d.ts +2 -0
- package/dist/prompts/rddIntro.js +53 -0
- package/dist/prompts/rddIntro.js.map +1 -0
- package/dist/prompts/review.d.ts +2 -0
- package/dist/prompts/review.js +45 -0
- package/dist/prompts/review.js.map +1 -0
- package/dist/prompts/stateMachineIntrospect.d.ts +2 -0
- package/dist/prompts/stateMachineIntrospect.js +80 -0
- package/dist/prompts/stateMachineIntrospect.js.map +1 -0
- package/dist/prompts/tellDontAskRephrase.d.ts +2 -0
- package/dist/prompts/tellDontAskRephrase.js +66 -0
- package/dist/prompts/tellDontAskRephrase.js.map +1 -0
- package/dist/render/diff.d.ts +21 -0
- package/dist/render/diff.js +84 -0
- package/dist/render/diff.js.map +1 -0
- package/dist/render/mermaid.d.ts +24 -0
- package/dist/render/mermaid.js +53 -0
- package/dist/render/mermaid.js.map +1 -0
- package/dist/render/sideBySide.d.ts +14 -0
- package/dist/render/sideBySide.js +91 -0
- package/dist/render/sideBySide.js.map +1 -0
- package/dist/resources/index.d.ts +2 -0
- package/dist/resources/index.js +349 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/server.d.ts +2 -0
- package/dist/server.js +22 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/alternatives.d.ts +2 -0
- package/dist/tools/alternatives.js +9 -0
- package/dist/tools/alternatives.js.map +1 -0
- package/dist/tools/classes.d.ts +2 -0
- package/dist/tools/classes.js +13 -0
- package/dist/tools/classes.js.map +1 -0
- package/dist/tools/collaborations.d.ts +2 -0
- package/dist/tools/collaborations.js +8 -0
- package/dist/tools/collaborations.js.map +1 -0
- package/dist/tools/compare.d.ts +2 -0
- package/dist/tools/compare.js +9 -0
- package/dist/tools/compare.js.map +1 -0
- package/dist/tools/conformance.d.ts +3 -0
- package/dist/tools/conformance.js +11 -0
- package/dist/tools/conformance.js.map +1 -0
- package/dist/tools/diagram.d.ts +2 -0
- package/dist/tools/diagram.js +9 -0
- package/dist/tools/diagram.js.map +1 -0
- package/dist/tools/discovery.d.ts +2 -0
- package/dist/tools/discovery.js +23 -0
- package/dist/tools/discovery.js.map +1 -0
- package/dist/tools/index.d.ts +2 -0
- package/dist/tools/index.js +27 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/init.d.ts +2 -0
- package/dist/tools/init.js +9 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/oop.d.ts +9 -0
- package/dist/tools/oop.js +26 -0
- package/dist/tools/oop.js.map +1 -0
- package/dist/tools/responsibilities.d.ts +2 -0
- package/dist/tools/responsibilities.js +13 -0
- package/dist/tools/responsibilities.js.map +1 -0
- package/dist/tools/state.d.ts +2 -0
- package/dist/tools/state.js +8 -0
- package/dist/tools/state.js.map +1 -0
- package/dist/tools/useCases.d.ts +2 -0
- package/dist/tools/useCases.js +18 -0
- package/dist/tools/useCases.js.map +1 -0
- package/dist/tools/validate.d.ts +2 -0
- package/dist/tools/validate.js +9 -0
- package/dist/tools/validate.js.map +1 -0
- package/dist/tradeoff/engine.d.ts +61 -0
- package/dist/tradeoff/engine.js +171 -0
- package/dist/tradeoff/engine.js.map +1 -0
- package/dist/tradeoff/heuristics/classSplit.d.ts +3 -0
- package/dist/tradeoff/heuristics/classSplit.js +94 -0
- package/dist/tradeoff/heuristics/classSplit.js.map +1 -0
- package/dist/tradeoff/heuristics/collaborationShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/collaborationShape.js +82 -0
- package/dist/tradeoff/heuristics/collaborationShape.js.map +1 -0
- package/dist/tradeoff/heuristics/collectionShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/collectionShape.js +113 -0
- package/dist/tradeoff/heuristics/collectionShape.js.map +1 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.d.ts +2 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.js +114 -0
- package/dist/tradeoff/heuristics/dualSubjectComparison.js.map +1 -0
- package/dist/tradeoff/heuristics/errorHandling.d.ts +2 -0
- package/dist/tradeoff/heuristics/errorHandling.js +110 -0
- package/dist/tradeoff/heuristics/errorHandling.js.map +1 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.d.ts +23 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.js +183 -0
- package/dist/tradeoff/heuristics/responsibilitySplit.js.map +1 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.d.ts +2 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.js +23 -0
- package/dist/tradeoff/heuristics/stereotypeChoice.js.map +1 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.d.ts +2 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.js +110 -0
- package/dist/tradeoff/heuristics/strategyOrPolicy.js.map +1 -0
- package/dist/tradeoff/heuristics/valueObjectShape.d.ts +2 -0
- package/dist/tradeoff/heuristics/valueObjectShape.js +111 -0
- package/dist/tradeoff/heuristics/valueObjectShape.js.map +1 -0
- package/dist/tradeoff/templates.d.ts +2 -0
- package/dist/tradeoff/templates.js +33 -0
- package/dist/tradeoff/templates.js.map +1 -0
- package/dist/util/log.d.ts +1 -0
- package/dist/util/log.js +7 -0
- package/dist/util/log.js.map +1 -0
- package/dist/util/mcp.d.ts +4 -0
- package/dist/util/mcp.js +18 -0
- package/dist/util/mcp.js.map +1 -0
- package/dist/validate/cohesion.d.ts +3 -0
- package/dist/validate/cohesion.js +88 -0
- package/dist/validate/cohesion.js.map +1 -0
- package/dist/validate/collectionWrapper.d.ts +3 -0
- package/dist/validate/collectionWrapper.js +131 -0
- package/dist/validate/collectionWrapper.js.map +1 -0
- package/dist/validate/coupling.d.ts +3 -0
- package/dist/validate/coupling.js +47 -0
- package/dist/validate/coupling.js.map +1 -0
- package/dist/validate/cycle.d.ts +3 -0
- package/dist/validate/cycle.js +101 -0
- package/dist/validate/cycle.js.map +1 -0
- package/dist/validate/dataDuplication.d.ts +3 -0
- package/dist/validate/dataDuplication.js +150 -0
- package/dist/validate/dataDuplication.js.map +1 -0
- package/dist/validate/dependencyDirection.d.ts +3 -0
- package/dist/validate/dependencyDirection.js +106 -0
- package/dist/validate/dependencyDirection.js.map +1 -0
- package/dist/validate/dualUseKnowing.d.ts +3 -0
- package/dist/validate/dualUseKnowing.js +137 -0
- package/dist/validate/dualUseKnowing.js.map +1 -0
- package/dist/validate/emptyObjectFill.d.ts +3 -0
- package/dist/validate/emptyObjectFill.js +119 -0
- package/dist/validate/emptyObjectFill.js.map +1 -0
- package/dist/validate/findings.d.ts +22 -0
- package/dist/validate/findings.js +12 -0
- package/dist/validate/findings.js.map +1 -0
- package/dist/validate/functionDecompositionExcess.d.ts +3 -0
- package/dist/validate/functionDecompositionExcess.js +120 -0
- package/dist/validate/functionDecompositionExcess.js.map +1 -0
- package/dist/validate/functionNotObject.d.ts +3 -0
- package/dist/validate/functionNotObject.js +80 -0
- package/dist/validate/functionNotObject.js.map +1 -0
- package/dist/validate/godObject.d.ts +6 -0
- package/dist/validate/godObject.js +76 -0
- package/dist/validate/godObject.js.map +1 -0
- package/dist/validate/presentationInDomain.d.ts +3 -0
- package/dist/validate/presentationInDomain.js +57 -0
- package/dist/validate/presentationInDomain.js.map +1 -0
- package/dist/validate/primitiveWrapper.d.ts +3 -0
- package/dist/validate/primitiveWrapper.js +106 -0
- package/dist/validate/primitiveWrapper.js.map +1 -0
- package/dist/validate/rules.d.ts +24 -0
- package/dist/validate/rules.js +269 -0
- package/dist/validate/rules.js.map +1 -0
- package/dist/validate/singletonStatefulHolder.d.ts +3 -0
- package/dist/validate/singletonStatefulHolder.js +128 -0
- package/dist/validate/singletonStatefulHolder.js.map +1 -0
- package/dist/validate/strategyAsymmetry.d.ts +3 -0
- package/dist/validate/strategyAsymmetry.js +131 -0
- package/dist/validate/strategyAsymmetry.js.map +1 -0
- package/dist/validate/testability.d.ts +5 -0
- package/dist/validate/testability.js +157 -0
- package/dist/validate/testability.js.map +1 -0
- package/dist/validate/vagueName.d.ts +3 -0
- package/dist/validate/vagueName.js +136 -0
- package/dist/validate/vagueName.js.map +1 -0
- package/dist/validate/validationLocation.d.ts +3 -0
- package/dist/validate/validationLocation.js +120 -0
- package/dist/validate/validationLocation.js.map +1 -0
- package/lessons/STYLE_GUIDE.md +304 -0
- package/lessons/woowacourse-kotlin-blackjack/2chang5/33-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +293 -0
- package/lessons/woowacourse-kotlin-blackjack/Choisehyeon/52-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +106 -0
- package/lessons/woowacourse-kotlin-blackjack/Choisehyeon/9-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +282 -0
- package/lessons/woowacourse-kotlin-blackjack/DYGames/14-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +182 -0
- package/lessons/woowacourse-kotlin-blackjack/DYGames/37-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +122 -0
- package/lessons/woowacourse-kotlin-blackjack/EmilyCh0/12-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +117 -0
- package/lessons/woowacourse-kotlin-blackjack/EmilyCh0/38-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +291 -0
- package/lessons/woowacourse-kotlin-blackjack/HANDOVER.md +1475 -0
- package/lessons/woowacourse-kotlin-blackjack/HamBeomJoon/119-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +251 -0
- package/lessons/woowacourse-kotlin-blackjack/HamBeomJoon/137-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +459 -0
- package/lessons/woowacourse-kotlin-blackjack/Hevton/100-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +282 -0
- package/lessons/woowacourse-kotlin-blackjack/Hevton/82-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +303 -0
- package/lessons/woowacourse-kotlin-blackjack/Hogu59/71-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +134 -0
- package/lessons/woowacourse-kotlin-blackjack/Hogu59/96-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +323 -0
- package/lessons/woowacourse-kotlin-blackjack/JoYehyun99/66-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +210 -0
- package/lessons/woowacourse-kotlin-blackjack/Junyoung-WON/101-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +191 -0
- package/lessons/woowacourse-kotlin-blackjack/Junyoung-WON/80-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
- package/lessons/woowacourse-kotlin-blackjack/Leeyerin0210/108-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +516 -0
- package/lessons/woowacourse-kotlin-blackjack/Leeyerin0210/133-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +541 -0
- package/lessons/woowacourse-kotlin-blackjack/RightHennessy/22-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +278 -0
- package/lessons/woowacourse-kotlin-blackjack/RightHennessy/48-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
- package/lessons/woowacourse-kotlin-blackjack/SeongHoonC/16-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +228 -0
- package/lessons/woowacourse-kotlin-blackjack/SeongHoonC/54-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +227 -0
- package/lessons/woowacourse-kotlin-blackjack/Yunseok-Nam/76-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
- package/lessons/woowacourse-kotlin-blackjack/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +203 -0
- package/lessons/woowacourse-kotlin-blackjack/aprilgom/105-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +162 -0
- package/lessons/woowacourse-kotlin-blackjack/aprilgom/64-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
- package/lessons/woowacourse-kotlin-blackjack/boogi-woogi/18-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
- package/lessons/woowacourse-kotlin-blackjack/boogi-woogi/36-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +769 -0
- package/lessons/woowacourse-kotlin-blackjack/briandr97/19-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +226 -0
- package/lessons/woowacourse-kotlin-blackjack/briandr97/59-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +193 -0
- package/lessons/woowacourse-kotlin-blackjack/chaehyuns/70-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +175 -0
- package/lessons/woowacourse-kotlin-blackjack/chaehyuns/98-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +206 -0
- package/lessons/woowacourse-kotlin-blackjack/chanho0908/123-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +277 -0
- package/lessons/woowacourse-kotlin-blackjack/chanho0908/150-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +219 -0
- package/lessons/woowacourse-kotlin-blackjack/chws0508/26-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +259 -0
- package/lessons/woowacourse-kotlin-blackjack/chws0508/43-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +189 -0
- package/lessons/woowacourse-kotlin-blackjack/cucumber99/109-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +351 -0
- package/lessons/woowacourse-kotlin-blackjack/cucumber99/149-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +147 -0
- package/lessons/woowacourse-kotlin-blackjack/devfeijoa/121-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +168 -0
- package/lessons/woowacourse-kotlin-blackjack/devfeijoa/153-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +116 -0
- package/lessons/woowacourse-kotlin-blackjack/doabletuple/126-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +680 -0
- package/lessons/woowacourse-kotlin-blackjack/doabletuple/142-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +739 -0
- package/lessons/woowacourse-kotlin-blackjack/donghyun81/116-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +297 -0
- package/lessons/woowacourse-kotlin-blackjack/donghyun81/147-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +244 -0
- package/lessons/woowacourse-kotlin-blackjack/dpcks0509/78-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +232 -0
- package/lessons/woowacourse-kotlin-blackjack/dpcks0509/88-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +137 -0
- package/lessons/woowacourse-kotlin-blackjack/etama123/112-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +269 -0
- package/lessons/woowacourse-kotlin-blackjack/etama123/148-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +240 -0
- package/lessons/woowacourse-kotlin-blackjack/gaeun5744/102-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +146 -0
- package/lessons/woowacourse-kotlin-blackjack/gaeun5744/69-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +224 -0
- package/lessons/woowacourse-kotlin-blackjack/gahyunkim/118-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +397 -0
- package/lessons/woowacourse-kotlin-blackjack/gahyunkim/141-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +215 -0
- package/lessons/woowacourse-kotlin-blackjack/giovannijunseokim/106-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +395 -0
- package/lessons/woowacourse-kotlin-blackjack/giovannijunseokim/134-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +219 -0
- package/lessons/woowacourse-kotlin-blackjack/haeum808/62-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +230 -0
- package/lessons/woowacourse-kotlin-blackjack/haeum808/89-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +169 -0
- package/lessons/woowacourse-kotlin-blackjack/hwannow/110-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +221 -0
- package/lessons/woowacourse-kotlin-blackjack/hwannow/132-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +573 -0
- package/lessons/woowacourse-kotlin-blackjack/hxeyexn/103-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +188 -0
- package/lessons/woowacourse-kotlin-blackjack/hxeyexn/81-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +301 -0
- package/lessons/woowacourse-kotlin-blackjack/hyemdooly/21-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +613 -0
- package/lessons/woowacourse-kotlin-blackjack/hyemdooly/35-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +691 -0
- package/lessons/woowacourse-kotlin-blackjack/hyunji1203/13-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +206 -0
- package/lessons/woowacourse-kotlin-blackjack/ii2001/79-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +153 -0
- package/lessons/woowacourse-kotlin-blackjack/ii2001/85-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +318 -0
- package/lessons/woowacourse-kotlin-blackjack/ijh1298/128-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +250 -0
- package/lessons/woowacourse-kotlin-blackjack/ijh1298/135-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +269 -0
- package/lessons/woowacourse-kotlin-blackjack/inseonyun/28-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +346 -0
- package/lessons/woowacourse-kotlin-blackjack/inseonyun/49-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +360 -0
- package/lessons/woowacourse-kotlin-blackjack/ippnsj/30-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +152 -0
- package/lessons/woowacourse-kotlin-blackjack/ippnsj/42-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +213 -0
- package/lessons/woowacourse-kotlin-blackjack/jaeyeongjo/73-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +247 -0
- package/lessons/woowacourse-kotlin-blackjack/jaeyeongjo/87-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +900 -0
- package/lessons/woowacourse-kotlin-blackjack/jerry8282/125-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +248 -0
- package/lessons/woowacourse-kotlin-blackjack/jerry8282/151-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +243 -0
- package/lessons/woowacourse-kotlin-blackjack/jinuemong/63-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +281 -0
- package/lessons/woowacourse-kotlin-blackjack/jinuemong/92-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +283 -0
- package/lessons/woowacourse-kotlin-blackjack/jiyuneel/113-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +348 -0
- package/lessons/woowacourse-kotlin-blackjack/jiyuneel/140-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +265 -0
- package/lessons/woowacourse-kotlin-blackjack/junjange/61-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +270 -0
- package/lessons/woowacourse-kotlin-blackjack/junjange/93-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +465 -0
- package/lessons/woowacourse-kotlin-blackjack/junseo511/107-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +296 -0
- package/lessons/woowacourse-kotlin-blackjack/junseo511/145-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +316 -0
- package/lessons/woowacourse-kotlin-blackjack/ki960213/11-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +175 -0
- package/lessons/woowacourse-kotlin-blackjack/kimhm0728/72-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +458 -0
- package/lessons/woowacourse-kotlin-blackjack/kimhm0728/97-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +225 -0
- package/lessons/woowacourse-kotlin-blackjack/kkosang/68-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +221 -0
- package/lessons/woowacourse-kotlin-blackjack/kkosang/94-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +158 -0
- package/lessons/woowacourse-kotlin-blackjack/kmkim2689/65-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +252 -0
- package/lessons/woowacourse-kotlin-blackjack/kmkim2689/90-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +460 -0
- package/lessons/woowacourse-kotlin-blackjack/krrong/32-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +216 -0
- package/lessons/woowacourse-kotlin-blackjack/krrong/46-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +285 -0
- package/lessons/woowacourse-kotlin-blackjack/m6z1/122-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +177 -0
- package/lessons/woowacourse-kotlin-blackjack/m6z1/144-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +155 -0
- package/lessons/woowacourse-kotlin-blackjack/medAndro/130-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +683 -0
- package/lessons/woowacourse-kotlin-blackjack/medAndro/143-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +678 -0
- package/lessons/woowacourse-kotlin-blackjack/moondev03/114-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +262 -0
- package/lessons/woowacourse-kotlin-blackjack/moondev03/131-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +498 -0
- package/lessons/woowacourse-kotlin-blackjack/murjune/77-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +287 -0
- package/lessons/woowacourse-kotlin-blackjack/murjune/91-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +280 -0
- package/lessons/woowacourse-kotlin-blackjack/no1msh/31-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +250 -0
- package/lessons/woowacourse-kotlin-blackjack/otter66/24-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +302 -0
- package/lessons/woowacourse-kotlin-blackjack/otter66/58-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +391 -0
- package/lessons/woowacourse-kotlin-blackjack/oungsi2000/111-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
- package/lessons/woowacourse-kotlin-blackjack/oungsi2000/136-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +540 -0
- package/lessons/woowacourse-kotlin-blackjack/parkjiminnnn/117-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +819 -0
- package/lessons/woowacourse-kotlin-blackjack/parkjiminnnn/139-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +683 -0
- package/lessons/woowacourse-kotlin-blackjack/pingu244/20-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +258 -0
- package/lessons/woowacourse-kotlin-blackjack/pingu244/41-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +171 -0
- package/lessons/woowacourse-kotlin-blackjack/re4rk/34-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +289 -0
- package/lessons/woowacourse-kotlin-blackjack/re4rk/8-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +297 -0
- package/lessons/woowacourse-kotlin-blackjack/rhkrwngud445/17-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +279 -0
- package/lessons/woowacourse-kotlin-blackjack/rhkrwngud445/50-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +145 -0
- package/lessons/woowacourse-kotlin-blackjack/rhthrhrl0/23-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +253 -0
- package/lessons/woowacourse-kotlin-blackjack/rhthrhrl0/39-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +238 -0
- package/lessons/woowacourse-kotlin-blackjack/rosemin928/129-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +726 -0
- package/lessons/woowacourse-kotlin-blackjack/rosemin928/138-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +845 -0
- package/lessons/woowacourse-kotlin-blackjack/s6m1n/67-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +220 -0
- package/lessons/woowacourse-kotlin-blackjack/s6m1n/99-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +229 -0
- package/lessons/woowacourse-kotlin-blackjack/s9hn/10-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +284 -0
- package/lessons/woowacourse-kotlin-blackjack/sh1mj1/75-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +224 -0
- package/lessons/woowacourse-kotlin-blackjack/songpink/74-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +238 -0
- package/lessons/woowacourse-kotlin-blackjack/songpink/95-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +216 -0
- package/lessons/woowacourse-kotlin-blackjack/sujin9/15-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +132 -0
- package/lessons/woowacourse-kotlin-blackjack/sujin9/47-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +265 -0
- package/lessons/woowacourse-kotlin-blackjack/tmdgh1592/29-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +305 -0
- package/lessons/woowacourse-kotlin-blackjack/tmdgh1592/51-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +278 -0
- package/lessons/woowacourse-kotlin-blackjack/tobae-time/115-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +305 -0
- package/lessons/woowacourse-kotlin-blackjack/tobae-time/154-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +298 -0
- package/lessons/woowacourse-kotlin-blackjack/whk06061/25-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +235 -0
- package/lessons/woowacourse-kotlin-blackjack/whk06061/53-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +130 -0
- package/lessons/woowacourse-kotlin-blackjack/wondroid-world/124-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +486 -0
- package/lessons/woowacourse-kotlin-blackjack/wondroid-world/152-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +482 -0
- package/lessons/woowacourse-kotlin-blackjack/yrsel/120-1/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +194 -0
- package/lessons/woowacourse-kotlin-blackjack/yrsel/146-2/353/213/250/352/263/204-/353/270/224/353/236/231/354/236/255.md +444 -0
- package/lessons/woowacourse-kotlin-lotto/2chang5/27-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/2chang5/52-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +187 -0
- package/lessons/woowacourse-kotlin-lotto/Choisehyeon/14-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +206 -0
- package/lessons/woowacourse-kotlin-lotto/Choisehyeon/47-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
- package/lessons/woowacourse-kotlin-lotto/DYGames/2-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
- package/lessons/woowacourse-kotlin-lotto/DYGames/34-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +88 -0
- package/lessons/woowacourse-kotlin-lotto/EmilyCh0/12-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/EmilyCh0/40-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +135 -0
- package/lessons/woowacourse-kotlin-lotto/HANDOVER.md +217 -0
- package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/121-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/HamBeomJoon/139-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +75 -0
- package/lessons/woowacourse-kotlin-lotto/Hevton/76-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/Hevton/92-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +122 -0
- package/lessons/woowacourse-kotlin-lotto/Hogu59/100-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +110 -0
- package/lessons/woowacourse-kotlin-lotto/Hogu59/68-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +84 -0
- package/lessons/woowacourse-kotlin-lotto/JoYehyun99/60-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
- package/lessons/woowacourse-kotlin-lotto/JoYehyun99/96-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
- package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/61-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/Junyoung-WON/93-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +16 -0
- package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/109-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +57 -0
- package/lessons/woowacourse-kotlin-lotto/Leeyerin0210/135-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
- package/lessons/woowacourse-kotlin-lotto/PROGRESS.md +160 -0
- package/lessons/woowacourse-kotlin-lotto/README.md +77 -0
- package/lessons/woowacourse-kotlin-lotto/RightHennessy/32-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/RightHennessy/5-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/SUMMARY.md +369 -0
- package/lessons/woowacourse-kotlin-lotto/SeongHoonC/25-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/SeongHoonC/37-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +27 -0
- package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/72-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +137 -0
- package/lessons/woowacourse-kotlin-lotto/Yunseok-Nam/86-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +17 -0
- package/lessons/woowacourse-kotlin-lotto/aprilgom/102-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +62 -0
- package/lessons/woowacourse-kotlin-lotto/aprilgom/64-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
- package/lessons/woowacourse-kotlin-lotto/boogi-woogi/11-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/boogi-woogi/29-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/briandr97/26-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/briandr97/51-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +123 -0
- package/lessons/woowacourse-kotlin-lotto/chaehyuns/71-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +115 -0
- package/lessons/woowacourse-kotlin-lotto/chaehyuns/97-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/chanho0908/124-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
- package/lessons/woowacourse-kotlin-lotto/chanho0908/129-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/chws0508/24-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +117 -0
- package/lessons/woowacourse-kotlin-lotto/chws0508/50-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +167 -0
- package/lessons/woowacourse-kotlin-lotto/cucumber99/116-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/cucumber99/147-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +223 -0
- package/lessons/woowacourse-kotlin-lotto/devfeijoa/125-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
- package/lessons/woowacourse-kotlin-lotto/devfeijoa/153-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +107 -0
- package/lessons/woowacourse-kotlin-lotto/doabletuple/119-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
- package/lessons/woowacourse-kotlin-lotto/doabletuple/138-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +77 -0
- package/lessons/woowacourse-kotlin-lotto/donghyun81/111-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
- package/lessons/woowacourse-kotlin-lotto/donghyun81/152-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/dpcks0509/80-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
- package/lessons/woowacourse-kotlin-lotto/dpcks0509/87-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +134 -0
- package/lessons/woowacourse-kotlin-lotto/etama123/112-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +170 -0
- package/lessons/woowacourse-kotlin-lotto/etama123/148-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +183 -0
- package/lessons/woowacourse-kotlin-lotto/gaeun5744/101-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/gaeun5744/78-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
- package/lessons/woowacourse-kotlin-lotto/gahyunkim/107-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +83 -0
- package/lessons/woowacourse-kotlin-lotto/gahyunkim/136-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +51 -0
- package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/106-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
- package/lessons/woowacourse-kotlin-lotto/giovannijunseokim/137-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +111 -0
- package/lessons/woowacourse-kotlin-lotto/haeum808/67-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/haeum808/95-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/hwannow/113-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +235 -0
- package/lessons/woowacourse-kotlin-lotto/hwannow/132-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/hxeyexn/77-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +141 -0
- package/lessons/woowacourse-kotlin-lotto/hxeyexn/98-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +162 -0
- package/lessons/woowacourse-kotlin-lotto/hyemdooly/17-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
- package/lessons/woowacourse-kotlin-lotto/hyemdooly/28-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +23 -0
- package/lessons/woowacourse-kotlin-lotto/hyunji1203/15-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +171 -0
- package/lessons/woowacourse-kotlin-lotto/hyunji1203/48-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
- package/lessons/woowacourse-kotlin-lotto/ii2001/62-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/ii2001/88-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/ijh1298/122-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
- package/lessons/woowacourse-kotlin-lotto/ijh1298/133-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
- package/lessons/woowacourse-kotlin-lotto/inseonyun/3-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +222 -0
- package/lessons/woowacourse-kotlin-lotto/inseonyun/49-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +166 -0
- package/lessons/woowacourse-kotlin-lotto/ippnsj/16-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +154 -0
- package/lessons/woowacourse-kotlin-lotto/ippnsj/55-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/59-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +68 -0
- package/lessons/woowacourse-kotlin-lotto/jaeyeongjo/83-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +53 -0
- package/lessons/woowacourse-kotlin-lotto/jerry8282/115-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/jerry8282/134-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/jinuemong/63-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +144 -0
- package/lessons/woowacourse-kotlin-lotto/jinuemong/89-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
- package/lessons/woowacourse-kotlin-lotto/jiyuneel/128-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +52 -0
- package/lessons/woowacourse-kotlin-lotto/jiyuneel/144-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +149 -0
- package/lessons/woowacourse-kotlin-lotto/junjange/58-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +148 -0
- package/lessons/woowacourse-kotlin-lotto/junjange/81-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/junseo511/120-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +153 -0
- package/lessons/woowacourse-kotlin-lotto/junseo511/131-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +188 -0
- package/lessons/woowacourse-kotlin-lotto/ki960213/43-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +24 -0
- package/lessons/woowacourse-kotlin-lotto/ki960213/8-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +159 -0
- package/lessons/woowacourse-kotlin-lotto/kimhm0728/74-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +50 -0
- package/lessons/woowacourse-kotlin-lotto/kimhm0728/94-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +176 -0
- package/lessons/woowacourse-kotlin-lotto/kkosang/85-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +145 -0
- package/lessons/woowacourse-kotlin-lotto/kmkim2689/70-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +97 -0
- package/lessons/woowacourse-kotlin-lotto/kmkim2689/82-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +157 -0
- package/lessons/woowacourse-kotlin-lotto/krrong/19-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +161 -0
- package/lessons/woowacourse-kotlin-lotto/krrong/41-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +73 -0
- package/lessons/woowacourse-kotlin-lotto/m6z1/105-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +67 -0
- package/lessons/woowacourse-kotlin-lotto/m6z1/151-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/medAndro/127-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +186 -0
- package/lessons/woowacourse-kotlin-lotto/medAndro/130-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +132 -0
- package/lessons/woowacourse-kotlin-lotto/moondev03/110-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/moondev03/141-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +155 -0
- package/lessons/woowacourse-kotlin-lotto/murjune/69-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/murjune/90-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +177 -0
- package/lessons/woowacourse-kotlin-lotto/no1msh/20-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +69 -0
- package/lessons/woowacourse-kotlin-lotto/no1msh/46-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/otter66/13-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +178 -0
- package/lessons/woowacourse-kotlin-lotto/otter66/53-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +160 -0
- package/lessons/woowacourse-kotlin-lotto/oungsi2000/126-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +71 -0
- package/lessons/woowacourse-kotlin-lotto/oungsi2000/149-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +56 -0
- package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/117-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/parkjiminnnn/146-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +173 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/33-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/54-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
- package/lessons/woowacourse-kotlin-lotto/pingu244/7-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +19 -0
- package/lessons/woowacourse-kotlin-lotto/re4rk/31-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +143 -0
- package/lessons/woowacourse-kotlin-lotto/re4rk/4-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +66 -0
- package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/23-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +26 -0
- package/lessons/woowacourse-kotlin-lotto/rhkrwngud445/38-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +129 -0
- package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/21-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +146 -0
- package/lessons/woowacourse-kotlin-lotto/rhthrhrl0/36-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +150 -0
- package/lessons/woowacourse-kotlin-lotto/rosemin928/123-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +179 -0
- package/lessons/woowacourse-kotlin-lotto/rosemin928/140-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +126 -0
- package/lessons/woowacourse-kotlin-lotto/s6m1n/103-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +119 -0
- package/lessons/woowacourse-kotlin-lotto/s6m1n/66-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +118 -0
- package/lessons/woowacourse-kotlin-lotto/s9hn/18-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +112 -0
- package/lessons/woowacourse-kotlin-lotto/sh1mj1/75-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +104 -0
- package/lessons/woowacourse-kotlin-lotto/sh1mj1/91-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +140 -0
- package/lessons/woowacourse-kotlin-lotto/songpink/65-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +96 -0
- package/lessons/woowacourse-kotlin-lotto/songpink/99-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +64 -0
- package/lessons/woowacourse-kotlin-lotto/sujin9/10-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/sujin9/35-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/tmdgh1592/22-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +30 -0
- package/lessons/woowacourse-kotlin-lotto/tmdgh1592/30-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +20 -0
- package/lessons/woowacourse-kotlin-lotto/tobae-time/114-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +158 -0
- package/lessons/woowacourse-kotlin-lotto/tobae-time/145-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +120 -0
- package/lessons/woowacourse-kotlin-lotto/whk06061/42-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +21 -0
- package/lessons/woowacourse-kotlin-lotto/whk06061/9-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +89 -0
- package/lessons/woowacourse-kotlin-lotto/wondroid-world/118-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +100 -0
- package/lessons/woowacourse-kotlin-lotto/wondroid-world/150-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +142 -0
- package/lessons/woowacourse-kotlin-lotto/yrsel/108-1/353/213/250/352/263/204-/353/241/234/353/230/220.md +124 -0
- package/lessons/woowacourse-kotlin-lotto/yrsel/143-2/353/213/250/352/263/204-/353/241/234/353/230/220.md +108 -0
- package/lessons/woowacourse-racingcar/2chang5/33-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/2chang5/75-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/CFalws/85-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/Choisehyeon/46-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/DYGames/49-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
- package/lessons/woowacourse-racingcar/EmilyCh0/40-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +64 -0
- package/lessons/woowacourse-racingcar/EmilyCh0/57-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/HamBeomJoon/137-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/HamBeomJoon/170-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/Hevton/106-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/Hevton/118-/353/246/254/355/214/251/355/204/260/353/247/201.md +51 -0
- package/lessons/woowacourse-racingcar/Hogu59/108-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/Hogu59/125-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/JoYehyun99/111-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/JoYehyun99/88-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +45 -0
- package/lessons/woowacourse-racingcar/Junyoung-WON/127-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/Junyoung-WON/90-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/Leeyerin0210/133-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/Leeyerin0210/159-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/PROGRESS.md +94 -0
- package/lessons/woowacourse-racingcar/README.md +69 -0
- package/lessons/woowacourse-racingcar/RightHennessy/51-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/RightHennessy/58-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/RunaNam/81-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +44 -0
- package/lessons/woowacourse-racingcar/SUMMARY.md +339 -0
- package/lessons/woowacourse-racingcar/SeongHoonC/37-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/SeongHoonC/66-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/Songusika/84-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/Yunseok-Nam/114-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/Yunseok-Nam/96-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/aprilgom/130-/353/246/254/355/214/251/355/204/260/353/247/201.md +52 -0
- package/lessons/woowacourse-racingcar/aprilgom/97-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/awesomeo184/23-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/boogi-woogi/35-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
- package/lessons/woowacourse-racingcar/boogi-woogi/59-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/briandr97/54-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/chaehyuns/131-/353/246/254/355/214/251/355/204/260/353/247/201.md +49 -0
- package/lessons/woowacourse-racingcar/chaehyuns/99-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/chanho0908/147-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/chanho0908/160-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/chws0508/45-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/chws0508/73-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +46 -0
- package/lessons/woowacourse-racingcar/cucumber99/132-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/cucumber99/177-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/devfeijoa/146-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/doabletuple/149-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/doabletuple/175-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/donghyun81/154-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/dpcks0509/103-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/dpcks0509/112-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/drunkenhw/82-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/etama123/145-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/gaeun5744/124-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
- package/lessons/woowacourse-racingcar/gaeun5744/93-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/gahyunkim/134-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/gahyunkim/164-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/giovannijunseokim/140-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/haeum808/101-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/haeum808/129-/353/246/254/355/214/251/355/204/260/353/247/201.md +46 -0
- package/lessons/woowacourse-racingcar/hwannow/141-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/hwannow/157-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +45 -0
- package/lessons/woowacourse-racingcar/hxeyexn/109-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/hxeyexn/128-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/hyemdooly/50-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/hyemdooly/68-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/hyunji1203/29-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/hyunji1203/60-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/ii2001/102-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +42 -0
- package/lessons/woowacourse-racingcar/ii2001/122-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/ijh1298/144-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/injoon2019/24-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/inseonyun/44-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/inseonyun/76-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/ippnsj/36-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/ippnsj/67-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/jaeyeongjo/110-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +39 -0
- package/lessons/woowacourse-racingcar/jaeyeongjo/89-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +46 -0
- package/lessons/woowacourse-racingcar/jinuemong/104-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/jinuemong/117-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +42 -0
- package/lessons/woowacourse-racingcar/jiyuneel/142-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/junjange/113-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +41 -0
- package/lessons/woowacourse-racingcar/junjange/87-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +39 -0
- package/lessons/woowacourse-racingcar/junseo511/148-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/junseo511/165-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/ki960213/32-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/ki960213/63-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/kimhm0728/100-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/kimhm0728/116-/353/246/254/355/214/251/355/204/260/353/247/201.md +54 -0
- package/lessons/woowacourse-racingcar/kkosang/105-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/kkosang/126-/353/246/254/355/214/251/355/204/260/353/247/201.md +53 -0
- package/lessons/woowacourse-racingcar/kmkim2689/123-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/kmkim2689/92-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/krrong/34-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +63 -0
- package/lessons/woowacourse-racingcar/m6z1/150-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/m6z1/156-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +40 -0
- package/lessons/woowacourse-racingcar/medAndro/153-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/moondev03/135-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +57 -0
- package/lessons/woowacourse-racingcar/moondev03/161-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/murjune/121-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/murjune/95-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/no1msh/43-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/no1msh/69-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/otter66/48-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/otter66/77-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +52 -0
- package/lessons/woowacourse-racingcar/oungsi2000/152-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +56 -0
- package/lessons/woowacourse-racingcar/oungsi2000/187-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/parkjiminnnn/143-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/parkjiminnnn/158-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/pingu244/38-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/pingu244/62-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/lessons/woowacourse-racingcar/re4rk/28-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +60 -0
- package/lessons/woowacourse-racingcar/re4rk/55-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/rhkrwngud445/42-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/rhkrwngud445/74-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +47 -0
- package/lessons/woowacourse-racingcar/rhthrhrl0/31-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/rosemin928/138-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/rosemin928/171-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +38 -0
- package/lessons/woowacourse-racingcar/s6m1n/120-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +54 -0
- package/lessons/woowacourse-racingcar/s6m1n/91-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +62 -0
- package/lessons/woowacourse-racingcar/s9hn/53-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +44 -0
- package/lessons/woowacourse-racingcar/s9hn/78-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/sh1mj1/107-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/sh1mj1/115-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +61 -0
- package/lessons/woowacourse-racingcar/songpink/119-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/songpink/98-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +55 -0
- package/lessons/woowacourse-racingcar/sujin9/52-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +48 -0
- package/lessons/woowacourse-racingcar/sujin9/61-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +47 -0
- package/lessons/woowacourse-racingcar/tmdgh1592/47-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/tmdgh1592/64-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/tobae-time/151-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +51 -0
- package/lessons/woowacourse-racingcar/tobae-time/167-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +43 -0
- package/lessons/woowacourse-racingcar/whk06061/41-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +58 -0
- package/lessons/woowacourse-racingcar/wondroid-world/136-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +49 -0
- package/lessons/woowacourse-racingcar/wondroid-world/166-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +50 -0
- package/lessons/woowacourse-racingcar/yrsel/139-1/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +53 -0
- package/lessons/woowacourse-racingcar/yujamint/83-2/353/213/250/352/263/204-/354/236/220/353/217/231/354/260/250-/352/262/275/354/243/274.md +59 -0
- package/package.json +46 -0
- package/skills/oh-my-oop/SKILL.md +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"phasePressureTest.js","sourceRoot":"","sources":["../../src/prompts/phasePressureTest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG;IAChB,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACrC,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACvC,CAAC;AAEF,MAAM,UAAU,yBAAyB,CAAC,MAAiB;IACzD,MAAM,CAAC,cAAc,CACnB,qBAAqB,EACrB;QACE,KAAK,EAAE,iCAAiC;QACxC,WAAW,EACT,qFAAqF;QACvF,UAAU,EAAE,SAAS;KACtB,EACD,CAAC,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE,EAAE;QACtC,MAAM,MAAM,GAAG,cAAc,IAAI,uCAAuC,CAAC;QACzE,MAAM,GAAG,GAAG,eAAe,IAAI,wCAAwC,CAAC;QACxE,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACJ,aAAa;4BACb,EAAE;4BACF,4DAA4D;4BAC5D,qGAAqG;4BACrG,EAAE;4BACF,SAAS;4BACT,QAAQ;4BACR,MAAM;4BACN,QAAQ;4BACR,EAAE;4BACF,YAAY;4BACZ,QAAQ;4BACR,GAAG;4BACH,QAAQ;4BACR,EAAE;4BACF,sCAAsC;4BACtC,EAAE;4BACF,2CAA2C;4BAC3C,oCAAoC;4BACpC,gDAAgD;4BAChD,iFAAiF;4BACjF,6CAA6C;4BAC7C,EAAE;4BACF,gCAAgC;4BAChC,EAAE;4BACF,sEAAsE;4BACtE,2FAA2F;4BAC3F,4FAA4F;4BAC5F,gFAAgF;4BAChF,mEAAmE;4BACnE,6EAA6E;4BAC7E,4EAA4E;4BAC5E,EAAE;4BACF,UAAU;4BACV,EAAE;4BACF,oDAAoD;4BACpD,wBAAwB;4BACxB,oCAAoC;4BACpC,oCAAoC;4BACpC,EAAE;4BACF,8GAA8G;yBAC/G,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const argsShape = {
|
|
3
|
+
project_name: z.string().optional(),
|
|
4
|
+
};
|
|
5
|
+
export function registerRddIntro(server) {
|
|
6
|
+
server.registerPrompt("rdd-workshop-intro", {
|
|
7
|
+
title: "RDD Workshop — 시작",
|
|
8
|
+
description: "RDD(책임 주도 설계) 워크숍 시작 가이드. Wirfs-Brock 5 stereotype 안내와 워크숍 루프.",
|
|
9
|
+
argsSchema: argsShape,
|
|
10
|
+
}, ({ project_name }) => {
|
|
11
|
+
const project = project_name ?? "이 프로젝트";
|
|
12
|
+
return {
|
|
13
|
+
messages: [
|
|
14
|
+
{
|
|
15
|
+
role: "user",
|
|
16
|
+
content: {
|
|
17
|
+
type: "text",
|
|
18
|
+
text: [
|
|
19
|
+
`# RDD 워크숍 시작 — ${project}`,
|
|
20
|
+
``,
|
|
21
|
+
`당신은 RDD(Responsibility-Driven Design) 기반 객체지향 설계를 돕는 코치입니다.`,
|
|
22
|
+
`사용자와 함께 다음 루프를 반복하며 ${project}의 설계를 만들어 가세요:`,
|
|
23
|
+
``,
|
|
24
|
+
`**루프:** 유스케이스 → 책임 분해 → CRC 카드 작성 → 협력(메시지) 정의 → 클래스 다이어그램 → 검증 → 다시 위로.`,
|
|
25
|
+
``,
|
|
26
|
+
`## Stereotype (Wirfs-Brock 5종)`,
|
|
27
|
+
`- **InformationHolder** — 도메인 정보를 알고 제공한다.`,
|
|
28
|
+
`- **ServiceProvider** — 구체적인 계산/작업을 수행한다.`,
|
|
29
|
+
`- **Structurer** — 다른 객체들의 관계를 유지한다 (예: 컬렉션).`,
|
|
30
|
+
`- **Coordinator** — 다른 객체들에게 작업을 위임하고 흐름을 조율한다.`,
|
|
31
|
+
`- **Interfacer** — 시스템 경계에서 외부와 통신한다.`,
|
|
32
|
+
``,
|
|
33
|
+
`## 진행 원칙 (필수 가드레일)`,
|
|
34
|
+
`1. **모든 설계 결정마다 ≥2개의 대안을 트레이드오프와 함께 제시**하세요. 단일 권장안을 내지 마세요. 설계에는 정답이 없다는 것이 조영호님의 핵심 가르침입니다.`,
|
|
35
|
+
`2. 대안의 \`pros\`/\`cons\`는 추상적 문장이 아니라 이 프로젝트의 도메인 어휘로 적으세요.`,
|
|
36
|
+
`3. 사용자가 선택할 때까지 결정을 강요하지 마세요.`,
|
|
37
|
+
`4. 변경 후에는 \`oop_design_compare\`로 Before/After를 보여주세요.`,
|
|
38
|
+
`5. 주기적으로 \`oop_design_validate\`로 책임/결합도/테스터빌리티를 검사하되, 항상 권고로만 다루세요. 코드 통제권은 사용자에게 있습니다.`,
|
|
39
|
+
``,
|
|
40
|
+
`## 다음 단계`,
|
|
41
|
+
`1. \`oop_init\`을 호출해 \`.oop/\` 워크스페이스를 만드세요(아직 없다면).`,
|
|
42
|
+
`2. 사용자에게 첫 유스케이스를 물어보고 \`oop_use_case_add\`로 등록하세요.`,
|
|
43
|
+
`3. \`oop_propose_responsibilities\`를 호출해 N개 대안을 받아 사용자에게 보여주세요.`,
|
|
44
|
+
``,
|
|
45
|
+
`사용자의 첫 유스케이스부터 들어보겠습니다. 어떤 일이 일어나야 하는 시스템인가요?`,
|
|
46
|
+
].join("\n"),
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
],
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=rddIntro.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rddIntro.js","sourceRoot":"","sources":["../../src/prompts/rddIntro.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG;IAChB,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,MAAiB;IAChD,MAAM,CAAC,cAAc,CACnB,oBAAoB,EACpB;QACE,KAAK,EAAE,mBAAmB;QAC1B,WAAW,EAAE,gEAAgE;QAC7E,UAAU,EAAE,SAAS;KACtB,EACD,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;QACnB,MAAM,OAAO,GAAG,YAAY,IAAI,QAAQ,CAAC;QACzC,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACJ,kBAAkB,OAAO,EAAE;4BAC3B,EAAE;4BACF,6DAA6D;4BAC7D,uBAAuB,OAAO,gBAAgB;4BAC9C,EAAE;4BACF,0EAA0E;4BAC1E,EAAE;4BACF,gCAAgC;4BAChC,4CAA4C;4BAC5C,2CAA2C;4BAC3C,+CAA+C;4BAC/C,iDAAiD;4BACjD,uCAAuC;4BACvC,EAAE;4BACF,oBAAoB;4BACpB,+FAA+F;4BAC/F,6DAA6D;4BAC7D,+BAA+B;4BAC/B,wDAAwD;4BACxD,0FAA0F;4BAC1F,EAAE;4BACF,UAAU;4BACV,sDAAsD;4BACtD,qDAAqD;4BACrD,iEAAiE;4BACjE,EAAE;4BACF,+CAA+C;yBAChD,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const argsShape = {
|
|
3
|
+
scope: z.enum(["all", "class"]).optional(),
|
|
4
|
+
target_id: z.string().optional(),
|
|
5
|
+
};
|
|
6
|
+
export function registerReview(server) {
|
|
7
|
+
server.registerPrompt("design-review-cho-younghos-lens", {
|
|
8
|
+
title: "Design Review (조영호 렌즈)",
|
|
9
|
+
description: "현재 설계를 조영호님의 렌즈(Tell-Don't-Ask, new-ability, 사이드이펙트 격리, 응집/결합/테스터빌리티)로 리뷰합니다.",
|
|
10
|
+
argsSchema: argsShape,
|
|
11
|
+
}, ({ scope, target_id }) => {
|
|
12
|
+
const target = scope === "class" && target_id ? `\`${target_id}\` 클래스에 집중` : "전체 설계 대상";
|
|
13
|
+
return {
|
|
14
|
+
messages: [
|
|
15
|
+
{
|
|
16
|
+
role: "user",
|
|
17
|
+
content: {
|
|
18
|
+
type: "text",
|
|
19
|
+
text: [
|
|
20
|
+
`# 설계 리뷰 — 조영호 렌즈 (${target})`,
|
|
21
|
+
``,
|
|
22
|
+
`다음 절차를 수행하세요:`,
|
|
23
|
+
``,
|
|
24
|
+
`1. \`oop_design_validate\`를 호출하여 findings를 수집합니다.`,
|
|
25
|
+
`2. 각 finding에 대해:`,
|
|
26
|
+
` - \`message\`와 \`evidence\`를 사용자에게 친절하게 설명합니다.`,
|
|
27
|
+
` - \`remedies\` 배열을 **모두** 제시합니다 (≥2개). 단일 해결책만 추천하지 마세요.`,
|
|
28
|
+
` - 다음 조영호 렌즈를 한 줄로 적용해 평가하세요:`,
|
|
29
|
+
` - **Tell-Don't-Ask**: 조회 메시지가 줄어드는가?`,
|
|
30
|
+
` - **new-ability**: 단위테스트에서 \`new\`로 생성 가능한가?`,
|
|
31
|
+
` - **사이드이펙트 격리**: 외부 자원 의존이 경계로 모이는가?`,
|
|
32
|
+
` - **응집/결합/테스터빌리티 변화**`,
|
|
33
|
+
`3. 사용자가 특정 finding을 깊게 보고 싶다면 \`oop_propose_alternatives\`로 추가 대안을 받으세요.`,
|
|
34
|
+
`4. 사용자가 변경을 결정하면, 변경 직전에 의미 있는 \`snapshot_label\`을 붙여 mutating 도구를 호출하세요.`,
|
|
35
|
+
`5. 변경 후 \`oop_design_compare({ before: { kind: "history", file: <스냅샷> }, after: { kind: "current" } })\`로 Before/After를 보여주세요.`,
|
|
36
|
+
``,
|
|
37
|
+
`**철칙:** 결정은 사용자에게 있고, 검증 결과는 항상 권고입니다. 차단하거나 강요하지 마세요. (조영호님: "코드 통제권은 개발자에게")`,
|
|
38
|
+
].join("\n"),
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
],
|
|
42
|
+
};
|
|
43
|
+
});
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=review.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"review.js","sourceRoot":"","sources":["../../src/prompts/review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG;IAChB,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE;IAC1C,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,MAAiB;IAC9C,MAAM,CAAC,cAAc,CACnB,iCAAiC,EACjC;QACE,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EAAE,+EAA+E;QAC5F,UAAU,EAAE,SAAS;KACtB,EACD,CAAC,EAAE,KAAK,EAAE,SAAS,EAAE,EAAE,EAAE;QACvB,MAAM,MAAM,GAAG,KAAK,KAAK,OAAO,IAAI,SAAS,CAAC,CAAC,CAAC,KAAK,SAAS,YAAY,CAAC,CAAC,CAAC,UAAU,CAAC;QACxF,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACJ,qBAAqB,MAAM,GAAG;4BAC9B,EAAE;4BACF,eAAe;4BACf,EAAE;4BACF,mDAAmD;4BACnD,mBAAmB;4BACnB,mDAAmD;4BACnD,6DAA6D;4BAC7D,iCAAiC;4BACjC,2CAA2C;4BAC3C,mDAAmD;4BACnD,2CAA2C;4BAC3C,4BAA4B;4BAC5B,0EAA0E;4BAC1E,2EAA2E;4BAC3E,gIAAgI;4BAChI,EAAE;4BACF,gFAAgF;yBACjF,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const argsShape = {
|
|
3
|
+
class_or_code: z.string().optional(),
|
|
4
|
+
};
|
|
5
|
+
export function registerStateMachineIntrospect(server) {
|
|
6
|
+
server.registerPrompt("state-machine-introspect", {
|
|
7
|
+
title: "State 패턴 도입 점검",
|
|
8
|
+
description: "boolean 플래그/when 분기 폭증을 sealed State 패턴으로 풀지 점검하는 2 기준 체크 + 4안 비교. 자동 감지 X, 학생 자가 도달.",
|
|
9
|
+
argsSchema: argsShape,
|
|
10
|
+
}, ({ class_or_code }) => {
|
|
11
|
+
const desc = class_or_code ?? "(클래스/코드 미입력)";
|
|
12
|
+
return {
|
|
13
|
+
messages: [
|
|
14
|
+
{
|
|
15
|
+
role: "user",
|
|
16
|
+
content: {
|
|
17
|
+
type: "text",
|
|
18
|
+
text: [
|
|
19
|
+
`# State 패턴 도입 점검`,
|
|
20
|
+
``,
|
|
21
|
+
`다음 클래스/코드에 *상태 분기가 폭증*하고 있는지 학생과 함께 점검합니다:`,
|
|
22
|
+
``,
|
|
23
|
+
`\`\`\``,
|
|
24
|
+
desc,
|
|
25
|
+
`\`\`\``,
|
|
26
|
+
``,
|
|
27
|
+
`## 1단계 — 분기 폭증 신호 진단 (학생이 직접 답하게)`,
|
|
28
|
+
``,
|
|
29
|
+
`1. 상태를 나타내는 *boolean 플래그/enum/문자열*이 몇 개입니까?`,
|
|
30
|
+
`2. *같은 데이터를 분기하는* \`when\`/\`if\` 구문이 클래스 안에 몇 군데입니까?`,
|
|
31
|
+
`3. *새 상태 1개*를 추가하려면 몇 군데를 수정해야 합니까? (분기 N개 × 메서드 M개)`,
|
|
32
|
+
`4. 분기 안에서 *각 상태별 행동이 다른가*, 아니면 *데이터만 다른가*?`,
|
|
33
|
+
``,
|
|
34
|
+
`## 2단계 — State 패턴 도입 2 기준 (둘 다 만족할 때만 답)`,
|
|
35
|
+
``,
|
|
36
|
+
`**기준 1: 다형성을 활용하는가?** — 각 상태가 *행동에 다르게 응답*해야 한다. 단순히 *데이터만 다르다*면 enum + when 으로 충분.`,
|
|
37
|
+
``,
|
|
38
|
+
`**기준 2: Context 의 책임이 있는가?** — State 가 Context(주체 객체)의 *행동을 위임*받는 구조여야 한다. State 가 단순히 *데이터 묶음*이라면 패턴 적용 X.`,
|
|
39
|
+
``,
|
|
40
|
+
`두 기준 모두 *Yes* 이면 sealed interface 도입. 한 쪽이라도 *No* 면 다른 안.`,
|
|
41
|
+
``,
|
|
42
|
+
`## 3단계 — 4안 비교 (도입 결정 후)`,
|
|
43
|
+
``,
|
|
44
|
+
`### 0. 만들지 않는다 — boolean 플래그 유지 + 분기 관찰`,
|
|
45
|
+
`- pros: 변경 비용 0. 분기가 더 늘어나기 전까지 통증 관찰.`,
|
|
46
|
+
`- cons: *통증이 N×M으로 폭증*하면 마이그레이션 비용 ↑.`,
|
|
47
|
+
``,
|
|
48
|
+
`### A. enum + when (exhaustive 강제)`,
|
|
49
|
+
`- pros: 케이스 닫힘이 컴파일러 강제. 단순 데이터 차이에 가벼움.`,
|
|
50
|
+
`- cons: 행동 차이 표현 한계. enum 상수가 *외부 의존 주입*에 약함.`,
|
|
51
|
+
``,
|
|
52
|
+
`### B. sealed interface + 다형성`,
|
|
53
|
+
`- pros: 상태별 *고유 행동* 다형성 표현. 분기 N×M 흡수. Context 책임 위임 자연.`,
|
|
54
|
+
`- cons: sealed/abstract 계층 도입 비용. *외부 mutation 위험* (private 강제 필요).`,
|
|
55
|
+
``,
|
|
56
|
+
`### C. lateinit var state + setter`,
|
|
57
|
+
`- pros: *기존 코드 변경 최소*.`,
|
|
58
|
+
`- cons: 호출 순서 invariant 부재 — 거의 항상 *잘못된 답*. 학습 차원에서 보여만 주세요.`,
|
|
59
|
+
``,
|
|
60
|
+
`## 4단계 — 도입 직후 함정 점검 (sealed 선택 시)`,
|
|
61
|
+
``,
|
|
62
|
+
`학생에게 다음 3가지 함정을 *미리* 안내:`,
|
|
63
|
+
``,
|
|
64
|
+
`- **외부 mutation**: \`obj.state = NewState()\` 직접 변경 시 전이 룰이 우회됨 → State private + 다음 상태 *메서드가 반환*하게.`,
|
|
65
|
+
`- **\`if state is X\` 잔재**: 다형성 도입 후 호출처에서 다시 타입 검사하면 다형성 무효화 → State 메서드로 책임 이동.`,
|
|
66
|
+
`- **데이터 차이 없는 sealed**: 멤버 차이 없으면 enum 과 동치 → 진짜 다형성 지점이 있는지 재검토.`,
|
|
67
|
+
``,
|
|
68
|
+
`## 진행 원칙`,
|
|
69
|
+
``,
|
|
70
|
+
`- *분기 폭증을 학생이 직접 경험한 뒤*에 sealed 권하세요. 처음부터 권하면 *그저 좋다* 함정.`,
|
|
71
|
+
`- 두 기준 중 하나라도 만족하지 않으면 sealed 추천하지 마세요.`,
|
|
72
|
+
`- 도입 결정은 학생에게.`,
|
|
73
|
+
].join("\n"),
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
],
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=stateMachineIntrospect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stateMachineIntrospect.js","sourceRoot":"","sources":["../../src/prompts/stateMachineIntrospect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG;IAChB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC;AAEF,MAAM,UAAU,8BAA8B,CAAC,MAAiB;IAC9D,MAAM,CAAC,cAAc,CACnB,0BAA0B,EAC1B;QACE,KAAK,EAAE,gBAAgB;QACvB,WAAW,EACT,uFAAuF;QACzF,UAAU,EAAE,SAAS;KACtB,EACD,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE;QACpB,MAAM,IAAI,GAAG,aAAa,IAAI,cAAc,CAAC;QAC7C,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACJ,kBAAkB;4BAClB,EAAE;4BACF,4CAA4C;4BAC5C,EAAE;4BACF,QAAQ;4BACR,IAAI;4BACJ,QAAQ;4BACR,EAAE;4BACF,mCAAmC;4BACnC,EAAE;4BACF,6CAA6C;4BAC7C,uDAAuD;4BACvD,sDAAsD;4BACtD,4CAA4C;4BAC5C,EAAE;4BACF,0CAA0C;4BAC1C,EAAE;4BACF,qFAAqF;4BACrF,EAAE;4BACF,6GAA6G;4BAC7G,EAAE;4BACF,2DAA2D;4BAC3D,EAAE;4BACF,0BAA0B;4BAC1B,EAAE;4BACF,yCAAyC;4BACzC,wCAAwC;4BACxC,uCAAuC;4BACvC,EAAE;4BACF,oCAAoC;4BACpC,0CAA0C;4BAC1C,+CAA+C;4BAC/C,EAAE;4BACF,+BAA+B;4BAC/B,0DAA0D;4BAC1D,qEAAqE;4BACrE,EAAE;4BACF,oCAAoC;4BACpC,wBAAwB;4BACxB,8DAA8D;4BAC9D,EAAE;4BACF,oCAAoC;4BACpC,EAAE;4BACF,0BAA0B;4BAC1B,EAAE;4BACF,sGAAsG;4BACtG,mFAAmF;4BACnF,mEAAmE;4BACnE,EAAE;4BACF,UAAU;4BACV,EAAE;4BACF,4DAA4D;4BAC5D,yCAAyC;4BACzC,gBAAgB;yBACjB,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
const argsShape = {
|
|
3
|
+
code_or_description: z.string().optional(),
|
|
4
|
+
};
|
|
5
|
+
export function registerTellDontAskRephrase(server) {
|
|
6
|
+
server.registerPrompt("tell-dont-ask-rephrase", {
|
|
7
|
+
title: "Tell-Don't-Ask 다시 쓰기",
|
|
8
|
+
description: "외부 비교자/외부 getter 사용 코드를 *메시지 호출* 형태로 다시 쓰는 4안 + 진단 질문. 답을 즉시 주지 않고 학생 자가 도달 유도.",
|
|
9
|
+
argsSchema: argsShape,
|
|
10
|
+
}, ({ code_or_description }) => {
|
|
11
|
+
const desc = code_or_description ?? "(코드/설명 미입력)";
|
|
12
|
+
return {
|
|
13
|
+
messages: [
|
|
14
|
+
{
|
|
15
|
+
role: "user",
|
|
16
|
+
content: {
|
|
17
|
+
type: "text",
|
|
18
|
+
text: [
|
|
19
|
+
`# Tell-Don't-Ask 다시 쓰기`,
|
|
20
|
+
``,
|
|
21
|
+
`다음 코드 또는 협력 흐름이 *외부에서 객체의 데이터를 꺼내 처리*하고 있는지 점검합니다:`,
|
|
22
|
+
``,
|
|
23
|
+
`\`\`\``,
|
|
24
|
+
desc,
|
|
25
|
+
`\`\`\``,
|
|
26
|
+
``,
|
|
27
|
+
`## 진단 질문 (학생에게 먼저 묻고, 답을 즉시 주지 마세요)`,
|
|
28
|
+
``,
|
|
29
|
+
`1. *데이터를 꺼내는 외부 객체*는 누구입니까? 그 객체에 *자기 행동*과 *자기 데이터*가 있습니까?`,
|
|
30
|
+
`2. *꺼내진 데이터의 주인*은 그 처리를 *자기 책임*으로 받을 수 있습니까?`,
|
|
31
|
+
`3. 외부 객체가 *사라져도* 같은 결과를 낼 수 있습니까? (있다면 그 객체는 가상 객체일 가능성)`,
|
|
32
|
+
`4. 데이터의 *모양*이 아니라 *답해야 할 메시지*가 무엇입니까?`,
|
|
33
|
+
``,
|
|
34
|
+
`## 4안 트레이드오프 (학생이 진단 후 함께 본다)`,
|
|
35
|
+
``,
|
|
36
|
+
`### 0. 만들지 않는다 — 현 코드 유지 + 통증 관찰`,
|
|
37
|
+
`- pros: 변경 비용 0. 추측 기반 변경 회피.`,
|
|
38
|
+
`- cons: 통증 누적 시 비용 증가. *책임이 정말 다른 곳에 있는가* 입증되지 않은 경우.`,
|
|
39
|
+
``,
|
|
40
|
+
`### A. 일방향 메시지 (\`a.action(b)\`)`,
|
|
41
|
+
`- pros: 데이터 곁에 행위. Tell-Don't-Ask 충실. 메시지 방향이 코드에 명시.`,
|
|
42
|
+
`- cons: 비대칭 — 결과 일관성 강제 비용. 호출처가 *누가 누구에게 묻는지* 결정 부담.`,
|
|
43
|
+
``,
|
|
44
|
+
`### B. 대칭 양방향 (둘 다에 메서드 + 공통 invariant)`,
|
|
45
|
+
`- pros: 호출처 자유도 ↑. 양측 책임 응집.`,
|
|
46
|
+
`- cons: *결과 일관성 강제* 비용. 양측 룰 동기화 부담. 테스트 매트릭스 N².`,
|
|
47
|
+
``,
|
|
48
|
+
`### C. 상태/역할 객체에 위임 (State 다형성)`,
|
|
49
|
+
`- pros: 상태별 고유 로직을 다형성으로 자연 표현. 분기 N×M 회피.`,
|
|
50
|
+
`- cons: State 패턴 도입 비용 — sealed 계층 + 전이 룰. 단순 케이스에는 과설계.`,
|
|
51
|
+
``,
|
|
52
|
+
`## 진행 원칙`,
|
|
53
|
+
``,
|
|
54
|
+
`- 학생에게 *어느 대안이 적절해 보이는지* 먼저 물으세요.`,
|
|
55
|
+
`- 학생의 결정 전에 *권장 답*을 제시하지 마세요. *어느 안이 정답*이라고 말하지 마세요.`,
|
|
56
|
+
`- 결정 후 *왜 이 대안인가*를 학생이 *도메인 어휘*로 설명하게 하세요.`,
|
|
57
|
+
``,
|
|
58
|
+
`**가르침**: 외부 비교자는 거의 항상 *잘못된 첫 답*입니다 — 단, *그것이 적절한 경우*(예: 양측 모두 데이터만 보유한 값 객체끼리의 산술 비교)도 있으므로 정답으로 강요하지 마세요. 단일 답 거부.`,
|
|
59
|
+
].join("\n"),
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
],
|
|
63
|
+
};
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=tellDontAskRephrase.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tellDontAskRephrase.js","sourceRoot":"","sources":["../../src/prompts/tellDontAskRephrase.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,SAAS,GAAG;IAChB,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC3C,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,MAAiB;IAC3D,MAAM,CAAC,cAAc,CACnB,wBAAwB,EACxB;QACE,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,iFAAiF;QACnF,UAAU,EAAE,SAAS;KACtB,EACD,CAAC,EAAE,mBAAmB,EAAE,EAAE,EAAE;QAC1B,MAAM,IAAI,GAAG,mBAAmB,IAAI,aAAa,CAAC;QAClD,OAAO;YACL,QAAQ,EAAE;gBACR;oBACE,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE;wBACP,IAAI,EAAE,MAAM;wBACZ,IAAI,EAAE;4BACJ,wBAAwB;4BACxB,EAAE;4BACF,oDAAoD;4BACpD,EAAE;4BACF,QAAQ;4BACR,IAAI;4BACJ,QAAQ;4BACR,EAAE;4BACF,qCAAqC;4BACrC,EAAE;4BACF,4DAA4D;4BAC5D,8CAA8C;4BAC9C,0DAA0D;4BAC1D,uCAAuC;4BACvC,EAAE;4BACF,+BAA+B;4BAC/B,EAAE;4BACF,kCAAkC;4BAClC,+BAA+B;4BAC/B,uDAAuD;4BACvD,EAAE;4BACF,kCAAkC;4BAClC,uDAAuD;4BACvD,uDAAuD;4BACvD,EAAE;4BACF,yCAAyC;4BACzC,8BAA8B;4BAC9B,mDAAmD;4BACnD,EAAE;4BACF,iCAAiC;4BACjC,4CAA4C;4BAC5C,0DAA0D;4BAC1D,EAAE;4BACF,UAAU;4BACV,EAAE;4BACF,mCAAmC;4BACnC,sDAAsD;4BACtD,4CAA4C;4BAC5C,EAAE;4BACF,sHAAsH;yBACvH,CAAC,IAAI,CAAC,IAAI,CAAC;qBACb;iBACF;aACF;SACF,CAAC;IACJ,CAAC,CACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RelationEdge } from "./mermaid.js";
|
|
2
|
+
export interface ParsedDiagram {
|
|
3
|
+
classes: Set<string>;
|
|
4
|
+
relations: RelationEdge[];
|
|
5
|
+
}
|
|
6
|
+
export interface DesignDiff {
|
|
7
|
+
added_classes: string[];
|
|
8
|
+
removed_classes: string[];
|
|
9
|
+
kept_classes: string[];
|
|
10
|
+
added_relations: RelationEdge[];
|
|
11
|
+
removed_relations: RelationEdge[];
|
|
12
|
+
changed_relations: Array<{
|
|
13
|
+
from: string;
|
|
14
|
+
to: string;
|
|
15
|
+
before: string;
|
|
16
|
+
after: string;
|
|
17
|
+
}>;
|
|
18
|
+
kept_relations: RelationEdge[];
|
|
19
|
+
}
|
|
20
|
+
export declare function parseMermaid(mermaid: string): ParsedDiagram;
|
|
21
|
+
export declare function diffDiagrams(before: ParsedDiagram, after: ParsedDiagram): DesignDiff;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
const CLASS_LINE = /^\s*class\s+([A-Za-z_][\w]*)(?::::[a-z]+)?\s*$/;
|
|
2
|
+
const REL_LINE = /^\s*([A-Za-z_][\w]*)\s*-->\s*([A-Za-z_][\w]*)\s*:\s*(.+?)(?:\s*%%.*)?$/;
|
|
3
|
+
export function parseMermaid(mermaid) {
|
|
4
|
+
const classes = new Set();
|
|
5
|
+
const relations = [];
|
|
6
|
+
for (const raw of mermaid.split("\n")) {
|
|
7
|
+
const line = raw.trim();
|
|
8
|
+
if (!line || line.startsWith("%%") || line.startsWith("classDef") || line === "classDiagram") {
|
|
9
|
+
continue;
|
|
10
|
+
}
|
|
11
|
+
const m1 = CLASS_LINE.exec(line);
|
|
12
|
+
if (m1) {
|
|
13
|
+
classes.add(m1[1]);
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
const m2 = REL_LINE.exec(line);
|
|
17
|
+
if (m2) {
|
|
18
|
+
const from = m2[1];
|
|
19
|
+
const to = m2[2];
|
|
20
|
+
const message = m2[3].trim();
|
|
21
|
+
classes.add(from);
|
|
22
|
+
classes.add(to);
|
|
23
|
+
relations.push({ from, to, message });
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return { classes, relations };
|
|
27
|
+
}
|
|
28
|
+
function edgeKey(r) {
|
|
29
|
+
return `${r.from}->${r.to}`;
|
|
30
|
+
}
|
|
31
|
+
function edgeFullKey(r) {
|
|
32
|
+
return `${r.from}->${r.to}::${r.message}`;
|
|
33
|
+
}
|
|
34
|
+
export function diffDiagrams(before, after) {
|
|
35
|
+
const added_classes = [...after.classes].filter((c) => !before.classes.has(c)).sort();
|
|
36
|
+
const removed_classes = [...before.classes].filter((c) => !after.classes.has(c)).sort();
|
|
37
|
+
const kept_classes = [...after.classes].filter((c) => before.classes.has(c)).sort();
|
|
38
|
+
const beforeMap = new Map();
|
|
39
|
+
for (const r of before.relations)
|
|
40
|
+
beforeMap.set(edgeKey(r), r);
|
|
41
|
+
const afterMap = new Map();
|
|
42
|
+
for (const r of after.relations)
|
|
43
|
+
afterMap.set(edgeKey(r), r);
|
|
44
|
+
const added_relations = [];
|
|
45
|
+
const removed_relations = [];
|
|
46
|
+
const changed_relations = [];
|
|
47
|
+
const kept_relations = [];
|
|
48
|
+
for (const [k, afterR] of afterMap) {
|
|
49
|
+
const beforeR = beforeMap.get(k);
|
|
50
|
+
if (!beforeR) {
|
|
51
|
+
added_relations.push(afterR);
|
|
52
|
+
}
|
|
53
|
+
else if (beforeR.message !== afterR.message) {
|
|
54
|
+
changed_relations.push({
|
|
55
|
+
from: afterR.from,
|
|
56
|
+
to: afterR.to,
|
|
57
|
+
before: beforeR.message,
|
|
58
|
+
after: afterR.message,
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
else {
|
|
62
|
+
kept_relations.push(afterR);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
for (const [k, beforeR] of beforeMap) {
|
|
66
|
+
if (!afterMap.has(k))
|
|
67
|
+
removed_relations.push(beforeR);
|
|
68
|
+
}
|
|
69
|
+
const sortRel = (a, b) => edgeFullKey(a).localeCompare(edgeFullKey(b));
|
|
70
|
+
added_relations.sort(sortRel);
|
|
71
|
+
removed_relations.sort(sortRel);
|
|
72
|
+
kept_relations.sort(sortRel);
|
|
73
|
+
changed_relations.sort((a, b) => `${a.from}->${a.to}`.localeCompare(`${b.from}->${b.to}`));
|
|
74
|
+
return {
|
|
75
|
+
added_classes,
|
|
76
|
+
removed_classes,
|
|
77
|
+
kept_classes,
|
|
78
|
+
added_relations,
|
|
79
|
+
removed_relations,
|
|
80
|
+
changed_relations,
|
|
81
|
+
kept_relations,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=diff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/render/diff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { CrcCard, Collaboration } from "../domain/model.js";
|
|
2
|
+
export interface DiagramInput {
|
|
3
|
+
classes: CrcCard[];
|
|
4
|
+
collaborations: Collaboration[];
|
|
5
|
+
}
|
|
6
|
+
export interface RelationEdge {
|
|
7
|
+
from: string;
|
|
8
|
+
to: string;
|
|
9
|
+
message: string;
|
|
10
|
+
}
|
|
11
|
+
export type EdgeAnnotation = "added" | "removed" | "changed" | "kept";
|
|
12
|
+
export interface AnnotatedClass {
|
|
13
|
+
name: string;
|
|
14
|
+
annotation?: EdgeAnnotation;
|
|
15
|
+
}
|
|
16
|
+
export interface AnnotatedRelation extends RelationEdge {
|
|
17
|
+
annotation?: EdgeAnnotation;
|
|
18
|
+
}
|
|
19
|
+
export declare function buildRelations(input: DiagramInput): RelationEdge[];
|
|
20
|
+
export declare function renderClassDiagram(input: DiagramInput): string;
|
|
21
|
+
export declare function renderAnnotated(input: {
|
|
22
|
+
classes: AnnotatedClass[];
|
|
23
|
+
relations: AnnotatedRelation[];
|
|
24
|
+
}): string;
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
// Mermaid의 classDiagram은 classDef/:::를 v10+에서만 지원한다.
|
|
2
|
+
// GitHub·Notion·다수 IDE 뷰어는 v9 이하라, classDef가 한 줄이라도 들어가면
|
|
3
|
+
// 다이어그램 전체가 "Parse error"로 죽는다(실측: 9.4.0에서 line 2 파싱 실패).
|
|
4
|
+
// → 보편 호환을 위해 classDef/:::를 쓰지 않고, 모든 버전이 지원하는
|
|
5
|
+
// <<annotation>> 블록(클래스)과 라벨 접미사(관계)로 diff 상태를 표기한다.
|
|
6
|
+
const HEADER_LINES = ["classDiagram"];
|
|
7
|
+
function classDeclLine(c) {
|
|
8
|
+
if (c.annotation && c.annotation !== "kept") {
|
|
9
|
+
// <<...>> 주석은 모든 Mermaid 버전이 지원 (classDef 색상 대체)
|
|
10
|
+
return ` class ${c.name} {\n <<${c.annotation}>>\n }`;
|
|
11
|
+
}
|
|
12
|
+
return ` class ${c.name}`;
|
|
13
|
+
}
|
|
14
|
+
function relationLine(r) {
|
|
15
|
+
// 줄 끝 %% 주석은 일부 뷰어에서 라벨로 오파싱된다 → 라벨 접미사로 상태 표기.
|
|
16
|
+
const suffix = r.annotation && r.annotation !== "kept" ? ` [${r.annotation}]` : "";
|
|
17
|
+
return ` ${r.from} --> ${r.to} : ${r.message}${suffix}`;
|
|
18
|
+
}
|
|
19
|
+
export function buildRelations(input) {
|
|
20
|
+
const idToName = new Map(input.classes.map((c) => [c.id, c.name]));
|
|
21
|
+
const seen = new Set();
|
|
22
|
+
const edges = [];
|
|
23
|
+
for (const c of input.collaborations) {
|
|
24
|
+
const from = idToName.get(c.from) ?? c.from;
|
|
25
|
+
const to = idToName.get(c.to) ?? c.to;
|
|
26
|
+
const key = `${from}::${to}::${c.message}`;
|
|
27
|
+
if (seen.has(key))
|
|
28
|
+
continue;
|
|
29
|
+
seen.add(key);
|
|
30
|
+
edges.push({ from, to, message: c.message });
|
|
31
|
+
}
|
|
32
|
+
return edges.sort((a, b) => a.from === b.from
|
|
33
|
+
? a.to === b.to
|
|
34
|
+
? a.message.localeCompare(b.message)
|
|
35
|
+
: a.to.localeCompare(b.to)
|
|
36
|
+
: a.from.localeCompare(b.from));
|
|
37
|
+
}
|
|
38
|
+
export function renderClassDiagram(input) {
|
|
39
|
+
const classes = input.classes
|
|
40
|
+
.map((c) => ({ name: c.name }))
|
|
41
|
+
.sort((a, b) => a.name.localeCompare(b.name));
|
|
42
|
+
const relations = buildRelations(input);
|
|
43
|
+
return renderAnnotated({ classes, relations });
|
|
44
|
+
}
|
|
45
|
+
export function renderAnnotated(input) {
|
|
46
|
+
const lines = [...HEADER_LINES];
|
|
47
|
+
for (const c of input.classes)
|
|
48
|
+
lines.push(classDeclLine(c));
|
|
49
|
+
for (const r of input.relations)
|
|
50
|
+
lines.push(relationLine(r));
|
|
51
|
+
return lines.join("\n") + "\n";
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mermaid.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mermaid.js","sourceRoot":"","sources":["../../src/render/mermaid.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type DesignDiff } from "./diff.js";
|
|
2
|
+
export interface SideBySideResult {
|
|
3
|
+
before_mermaid: string;
|
|
4
|
+
after_mermaid: string;
|
|
5
|
+
side_by_side_markdown: string;
|
|
6
|
+
diff: DesignDiff;
|
|
7
|
+
}
|
|
8
|
+
export declare function annotateBefore(mermaid: string, diff: DesignDiff): string;
|
|
9
|
+
export declare function annotateAfter(mermaid: string, diff: DesignDiff): string;
|
|
10
|
+
export declare function buildSideBySide(beforeMermaid: string, afterMermaid: string, diff: DesignDiff, labels?: {
|
|
11
|
+
before: string;
|
|
12
|
+
after: string;
|
|
13
|
+
}): SideBySideResult;
|
|
14
|
+
export declare function renderDiffSummary(diff: DesignDiff): string;
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { parseMermaid } from "./diff.js";
|
|
2
|
+
import { renderAnnotated, } from "./mermaid.js";
|
|
3
|
+
export function annotateBefore(mermaid, diff) {
|
|
4
|
+
const parsed = parseMermaid(mermaid);
|
|
5
|
+
const removedClasses = new Set(diff.removed_classes);
|
|
6
|
+
const classes = [...parsed.classes]
|
|
7
|
+
.sort()
|
|
8
|
+
.map((name) => ({
|
|
9
|
+
name,
|
|
10
|
+
annotation: removedClasses.has(name) ? "removed" : "kept",
|
|
11
|
+
}));
|
|
12
|
+
const removedRelKey = (r) => `${r.from}->${r.to}`;
|
|
13
|
+
const removedSet = new Set(diff.removed_relations.map(removedRelKey));
|
|
14
|
+
const changedSet = new Set(diff.changed_relations.map(removedRelKey));
|
|
15
|
+
const relations = parsed.relations
|
|
16
|
+
.slice()
|
|
17
|
+
.sort((a, b) => `${a.from}::${a.to}::${a.message}`.localeCompare(`${b.from}::${b.to}::${b.message}`))
|
|
18
|
+
.map((r) => {
|
|
19
|
+
const k = removedRelKey(r);
|
|
20
|
+
if (removedSet.has(k))
|
|
21
|
+
return { ...r, annotation: "removed" };
|
|
22
|
+
if (changedSet.has(k))
|
|
23
|
+
return { ...r, annotation: "changed" };
|
|
24
|
+
return { ...r, annotation: "kept" };
|
|
25
|
+
});
|
|
26
|
+
return renderAnnotated({ classes, relations });
|
|
27
|
+
}
|
|
28
|
+
export function annotateAfter(mermaid, diff) {
|
|
29
|
+
const parsed = parseMermaid(mermaid);
|
|
30
|
+
const addedClasses = new Set(diff.added_classes);
|
|
31
|
+
const classes = [...parsed.classes]
|
|
32
|
+
.sort()
|
|
33
|
+
.map((name) => ({
|
|
34
|
+
name,
|
|
35
|
+
annotation: addedClasses.has(name) ? "added" : "kept",
|
|
36
|
+
}));
|
|
37
|
+
const relKey = (r) => `${r.from}->${r.to}`;
|
|
38
|
+
const addedSet = new Set(diff.added_relations.map(relKey));
|
|
39
|
+
const changedSet = new Set(diff.changed_relations.map(relKey));
|
|
40
|
+
const relations = parsed.relations
|
|
41
|
+
.slice()
|
|
42
|
+
.sort((a, b) => `${a.from}::${a.to}::${a.message}`.localeCompare(`${b.from}::${b.to}::${b.message}`))
|
|
43
|
+
.map((r) => {
|
|
44
|
+
const k = relKey(r);
|
|
45
|
+
if (addedSet.has(k))
|
|
46
|
+
return { ...r, annotation: "added" };
|
|
47
|
+
if (changedSet.has(k))
|
|
48
|
+
return { ...r, annotation: "changed" };
|
|
49
|
+
return { ...r, annotation: "kept" };
|
|
50
|
+
});
|
|
51
|
+
return renderAnnotated({ classes, relations });
|
|
52
|
+
}
|
|
53
|
+
const LEGEND = `**범례:** 추가 (added) · 제거 (removed) · 변경 (changed) · 유지 (kept)\n` +
|
|
54
|
+
`클래스는 \`<<added>>/<<removed>>/<<changed>>\` 주석으로, 관계는 화살표 라벨 뒤 \`[added]/[removed]/[changed]\`로 표기합니다. (구버전 Mermaid 호환을 위해 classDef 색상은 쓰지 않습니다.)\n`;
|
|
55
|
+
export function buildSideBySide(beforeMermaid, afterMermaid, diff, labels = { before: "Before", after: "After" }) {
|
|
56
|
+
const before_mermaid = annotateBefore(beforeMermaid, diff);
|
|
57
|
+
const after_mermaid = annotateAfter(afterMermaid, diff);
|
|
58
|
+
const summary = renderDiffSummary(diff);
|
|
59
|
+
const md = `${LEGEND}\n` +
|
|
60
|
+
`## ${labels.before}\n\n` +
|
|
61
|
+
"```mermaid\n" +
|
|
62
|
+
before_mermaid +
|
|
63
|
+
"```\n\n" +
|
|
64
|
+
`## ${labels.after}\n\n` +
|
|
65
|
+
"```mermaid\n" +
|
|
66
|
+
after_mermaid +
|
|
67
|
+
"```\n\n" +
|
|
68
|
+
`## 변경 요약\n\n${summary}\n`;
|
|
69
|
+
return {
|
|
70
|
+
before_mermaid,
|
|
71
|
+
after_mermaid,
|
|
72
|
+
side_by_side_markdown: md,
|
|
73
|
+
diff,
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
export function renderDiffSummary(diff) {
|
|
77
|
+
const lines = [];
|
|
78
|
+
const fmtRel = (r) => `\`${r.from} --> ${r.to} : ${r.message}\``;
|
|
79
|
+
lines.push(`- **추가된 클래스 (${diff.added_classes.length}):** ${diff.added_classes.length ? diff.added_classes.map((c) => `\`${c}\``).join(", ") : "(없음)"}`);
|
|
80
|
+
lines.push(`- **제거된 클래스 (${diff.removed_classes.length}):** ${diff.removed_classes.length ? diff.removed_classes.map((c) => `\`${c}\``).join(", ") : "(없음)"}`);
|
|
81
|
+
lines.push(`- **추가된 관계 (${diff.added_relations.length}):** ${diff.added_relations.length ? diff.added_relations.map(fmtRel).join(", ") : "(없음)"}`);
|
|
82
|
+
lines.push(`- **제거된 관계 (${diff.removed_relations.length}):** ${diff.removed_relations.length ? diff.removed_relations.map(fmtRel).join(", ") : "(없음)"}`);
|
|
83
|
+
if (diff.changed_relations.length) {
|
|
84
|
+
lines.push(`- **메시지가 변경된 관계 (${diff.changed_relations.length}):** ` +
|
|
85
|
+
diff.changed_relations
|
|
86
|
+
.map((c) => `\`${c.from} --> ${c.to}\` (\`${c.before}\` → \`${c.after}\`)`)
|
|
87
|
+
.join(", "));
|
|
88
|
+
}
|
|
89
|
+
return lines.join("\n");
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=sideBySide.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sideBySide.js","sourceRoot":"","sources":["../../src/render/sideBySide.ts"],"names":[],"mappings":"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"}
|