@xonovex/skills 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +21 -0
- package/commands/code-align.md +108 -0
- package/commands/code-harden.md +74 -0
- package/commands/code-simplify.md +145 -0
- package/commands/git-commit.md +146 -0
- package/commands/insights-extract.md +109 -0
- package/commands/insights-integrate.md +100 -0
- package/commands/plan-continue.md +167 -0
- package/commands/plan-create.md +107 -0
- package/commands/plan-research.md +113 -0
- package/commands/plan-subplans-create.md +111 -0
- package/commands/plan-tdd-create.md +128 -0
- package/commands/plan-update.md +99 -0
- package/commands/plan-validate.md +100 -0
- package/commands/plan-worktree-abandon.md +104 -0
- package/commands/plan-worktree-create.md +92 -0
- package/commands/plan-worktree-merge.md +132 -0
- package/package.json +44 -0
- package/skills/astro-guidelines/SKILL.md +23 -0
- package/skills/astro-guidelines/reference/accessibility.md +31 -0
- package/skills/astro-guidelines/reference/components.md +42 -0
- package/skills/astro-guidelines/reference/content-collections.md +32 -0
- package/skills/astro-guidelines/reference/islands-architecture.md +26 -0
- package/skills/astro-guidelines/reference/project-structure.md +32 -0
- package/skills/c99-game-opinionated-guidelines/SKILL.md +43 -0
- package/skills/c99-game-opinionated-guidelines/reference/builder-pattern.md +29 -0
- package/skills/c99-game-opinionated-guidelines/reference/coordinate-system.md +27 -0
- package/skills/c99-game-opinionated-guidelines/reference/geometry-pipeline.md +29 -0
- package/skills/c99-game-opinionated-guidelines/reference/math-types.md +31 -0
- package/skills/c99-game-opinionated-guidelines/reference/mesh-types.md +32 -0
- package/skills/c99-game-opinionated-guidelines/reference/physics-patterns.md +28 -0
- package/skills/c99-game-opinionated-guidelines/reference/spatial-structures.md +26 -0
- package/skills/c99-game-opinionated-guidelines/reference/tagged-unions.md +40 -0
- package/skills/c99-game-opinionated-guidelines/reference/vertex-packing.md +38 -0
- package/skills/c99-guidelines/SKILL.md +29 -0
- package/skills/c99-guidelines/reference/compound-literals.md +33 -0
- package/skills/c99-guidelines/reference/const-correctness.md +32 -0
- package/skills/c99-guidelines/reference/designated-initializers.md +32 -0
- package/skills/c99-guidelines/reference/error-handling.md +49 -0
- package/skills/c99-guidelines/reference/inline-functions.md +37 -0
- package/skills/c99-guidelines/reference/memory-management.md +35 -0
- package/skills/c99-opinionated-guidelines/SKILL.md +44 -0
- package/skills/c99-opinionated-guidelines/reference/alignment.md +50 -0
- package/skills/c99-opinionated-guidelines/reference/caller-owns-memory.md +38 -0
- package/skills/c99-opinionated-guidelines/reference/compound-literals.md +33 -0
- package/skills/c99-opinionated-guidelines/reference/const-correctness.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/data-oriented-design.md +42 -0
- package/skills/c99-opinionated-guidelines/reference/designated-initializers.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/error-handling.md +49 -0
- package/skills/c99-opinionated-guidelines/reference/file-naming.md +33 -0
- package/skills/c99-opinionated-guidelines/reference/implementation-variants.md +35 -0
- package/skills/c99-opinionated-guidelines/reference/inline-functions.md +37 -0
- package/skills/c99-opinionated-guidelines/reference/memory-management.md +35 -0
- package/skills/c99-opinionated-guidelines/reference/safety-validations.md +32 -0
- package/skills/c99-opinionated-guidelines/reference/testing-patterns.md +39 -0
- package/skills/cmake-guidelines/SKILL.md +31 -0
- package/skills/cmake-guidelines/reference/compile-options.md +34 -0
- package/skills/cmake-guidelines/reference/fetchcontent.md +32 -0
- package/skills/cmake-guidelines/reference/find-package.md +29 -0
- package/skills/cmake-guidelines/reference/generator-expressions.md +34 -0
- package/skills/cmake-guidelines/reference/installation.md +38 -0
- package/skills/cmake-guidelines/reference/project-structure.md +40 -0
- package/skills/cmake-guidelines/reference/target-types.md +37 -0
- package/skills/cmake-guidelines/reference/testing.md +30 -0
- package/skills/cmake-guidelines/reference/visibility-specifiers.md +32 -0
- package/skills/content-guidelines/SKILL.md +36 -0
- package/skills/content-guidelines/reference/humanize.md +30 -0
- package/skills/content-guidelines/reference/news.md +28 -0
- package/skills/content-guidelines/reference/travelguide.md +31 -0
- package/skills/docker-guidelines/SKILL.md +23 -0
- package/skills/docker-guidelines/reference/docker-compose.md +40 -0
- package/skills/docker-guidelines/reference/layer-caching.md +25 -0
- package/skills/docker-guidelines/reference/multi-stage-builds.md +37 -0
- package/skills/docker-guidelines/reference/production-config.md +32 -0
- package/skills/docker-guidelines/reference/security.md +27 -0
- package/skills/express.js-guidelines/SKILL.md +32 -0
- package/skills/express.js-guidelines/reference/app-setup.md +39 -0
- package/skills/express.js-guidelines/reference/authentication.md +39 -0
- package/skills/express.js-guidelines/reference/controllers.md +49 -0
- package/skills/express.js-guidelines/reference/error-handling.md +54 -0
- package/skills/express.js-guidelines/reference/project-structure.md +29 -0
- package/skills/express.js-guidelines/reference/responses.md +30 -0
- package/skills/express.js-guidelines/reference/routes.md +29 -0
- package/skills/express.js-guidelines/reference/testing.md +39 -0
- package/skills/express.js-guidelines/reference/validation.md +41 -0
- package/skills/general-fp-guidelines/SKILL.md +28 -0
- package/skills/general-oop-guidelines/SKILL.md +28 -0
- package/skills/git-guidelines/SKILL.md +46 -0
- package/skills/git-guidelines/reference/commit.md +32 -0
- package/skills/git-guidelines/reference/merge-resolve.md +38 -0
- package/skills/git-guidelines/reference/worktree-abandon.md +48 -0
- package/skills/git-guidelines/reference/worktree-cleanup.md +40 -0
- package/skills/git-guidelines/reference/worktree-commit.md +46 -0
- package/skills/git-guidelines/reference/worktree-create.md +42 -0
- package/skills/git-guidelines/reference/worktree-merge.md +45 -0
- package/skills/git-guidelines/reference/worktree-validate.md +44 -0
- package/skills/hono-guidelines/SKILL.md +49 -0
- package/skills/hono-guidelines/reference/application-structure.md +53 -0
- package/skills/hono-guidelines/reference/context-storage.md +46 -0
- package/skills/hono-guidelines/reference/cookie-handling.md +63 -0
- package/skills/hono-guidelines/reference/error-handling.md +69 -0
- package/skills/hono-guidelines/reference/middleware-combine.md +47 -0
- package/skills/hono-guidelines/reference/middleware-patterns.md +58 -0
- package/skills/hono-guidelines/reference/platform-runtime.md +41 -0
- package/skills/hono-guidelines/reference/security-middleware.md +60 -0
- package/skills/hono-guidelines/reference/validation-type-safety.md +43 -0
- package/skills/hono-guidelines/reference/websocket-support.md +59 -0
- package/skills/hono-opinionated-guidelines/SKILL.md +49 -0
- package/skills/hono-opinionated-guidelines/reference/application-structure.md +53 -0
- package/skills/hono-opinionated-guidelines/reference/body-limit.md +57 -0
- package/skills/hono-opinionated-guidelines/reference/context-storage.md +46 -0
- package/skills/hono-opinionated-guidelines/reference/controllers.md +38 -0
- package/skills/hono-opinionated-guidelines/reference/cookie-handling.md +63 -0
- package/skills/hono-opinionated-guidelines/reference/error-handling.md +69 -0
- package/skills/hono-opinionated-guidelines/reference/middleware-combine.md +47 -0
- package/skills/hono-opinionated-guidelines/reference/middleware-patterns.md +58 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-explicit-status-codes.md +61 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-inline-handlers.md +56 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-router-hierarchy.md +64 -0
- package/skills/hono-opinionated-guidelines/reference/openapi-spec-generation.md +57 -0
- package/skills/hono-opinionated-guidelines/reference/platform-runtime.md +41 -0
- package/skills/hono-opinionated-guidelines/reference/router-selection.md +34 -0
- package/skills/hono-opinionated-guidelines/reference/security-middleware.md +60 -0
- package/skills/hono-opinionated-guidelines/reference/validation-type-safety.md +43 -0
- package/skills/hono-opinionated-guidelines/reference/websocket-support.md +59 -0
- package/skills/insights-guidelines/SKILL.md +28 -0
- package/skills/insights-guidelines/reference/insights-extract.md +31 -0
- package/skills/insights-guidelines/reference/insights-integrate.md +35 -0
- package/skills/instruction-guidelines/SKILL.md +26 -0
- package/skills/instruction-guidelines/reference/assimilate.md +38 -0
- package/skills/instruction-guidelines/reference/simplify.md +46 -0
- package/skills/instruction-guidelines/reference/sync.md +41 -0
- package/skills/kubernetes-guidelines/SKILL.md +28 -0
- package/skills/kubernetes-guidelines/reference/configmaps-secrets.md +34 -0
- package/skills/kubernetes-guidelines/reference/deployments.md +55 -0
- package/skills/kubernetes-guidelines/reference/kustomize.md +41 -0
- package/skills/kubernetes-guidelines/reference/network-policies.md +53 -0
- package/skills/kubernetes-guidelines/reference/services.md +36 -0
- package/skills/kubernetes-guidelines/reference/validation.md +32 -0
- package/skills/lua-guidelines/SKILL.md +29 -0
- package/skills/lua-guidelines/reference/coroutines.md +66 -0
- package/skills/lua-guidelines/reference/error-handling.md +41 -0
- package/skills/lua-guidelines/reference/idiomatic-patterns.md +40 -0
- package/skills/lua-guidelines/reference/input-validation.md +42 -0
- package/skills/lua-guidelines/reference/local-variables.md +33 -0
- package/skills/lua-guidelines/reference/metatables.md +52 -0
- package/skills/lua-guidelines/reference/module-pattern.md +37 -0
- package/skills/lua-guidelines/reference/string-concatenation.md +31 -0
- package/skills/lua-opinionated-guidelines/SKILL.md +32 -0
- package/skills/lua-opinionated-guidelines/reference/cache-lookups.md +43 -0
- package/skills/lua-opinionated-guidelines/reference/coroutines.md +66 -0
- package/skills/lua-opinionated-guidelines/reference/error-handling.md +41 -0
- package/skills/lua-opinionated-guidelines/reference/idiomatic-patterns.md +40 -0
- package/skills/lua-opinionated-guidelines/reference/input-validation.md +42 -0
- package/skills/lua-opinionated-guidelines/reference/jit-friendly-tables.md +57 -0
- package/skills/lua-opinionated-guidelines/reference/local-variables.md +33 -0
- package/skills/lua-opinionated-guidelines/reference/metatables.md +52 -0
- package/skills/lua-opinionated-guidelines/reference/module-pattern.md +37 -0
- package/skills/lua-opinionated-guidelines/reference/string-concatenation.md +31 -0
- package/skills/moon-guidelines/SKILL.md +30 -0
- package/skills/moon-guidelines/reference/docker-multistage.md +42 -0
- package/skills/moon-guidelines/reference/project-constraints.md +25 -0
- package/skills/moon-guidelines/reference/query-language.md +27 -0
- package/skills/moon-guidelines/reference/tag-based-filtering.md +28 -0
- package/skills/moon-guidelines/reference/task-configuration.md +38 -0
- package/skills/moon-guidelines/reference/task-inheritance.md +30 -0
- package/skills/motion-react-guidelines/SKILL.md +66 -0
- package/skills/motion-react-guidelines/reference/3d-effects.md +35 -0
- package/skills/motion-react-guidelines/reference/entrance.md +36 -0
- package/skills/motion-react-guidelines/reference/exit.md +35 -0
- package/skills/motion-react-guidelines/reference/gestures.md +23 -0
- package/skills/motion-react-guidelines/reference/layout.md +39 -0
- package/skills/motion-react-guidelines/reference/motion-values.md +33 -0
- package/skills/motion-react-guidelines/reference/performance.md +32 -0
- package/skills/motion-react-guidelines/reference/scroll.md +38 -0
- package/skills/motion-react-guidelines/reference/spring-physics.md +40 -0
- package/skills/motion-react-guidelines/reference/stagger.md +34 -0
- package/skills/motion-react-guidelines/reference/svg-path.md +33 -0
- package/skills/motion-react-guidelines/reference/text-effects.md +39 -0
- package/skills/plan-guidelines/SKILL.md +56 -0
- package/skills/plan-guidelines/reference/code-align.md +23 -0
- package/skills/plan-guidelines/reference/code-barrels-remove.md +24 -0
- package/skills/plan-guidelines/reference/code-comments-remove.md +28 -0
- package/skills/plan-guidelines/reference/code-harden.md +30 -0
- package/skills/plan-guidelines/reference/code-shared-extract.md +25 -0
- package/skills/plan-guidelines/reference/code-simplify.md +33 -0
- package/skills/plan-guidelines/reference/code-template-extract.md +34 -0
- package/skills/plan-guidelines/reference/code-template-scaffold.md +36 -0
- package/skills/plan-guidelines/reference/general-research.md +35 -0
- package/skills/plan-guidelines/reference/plan-create.md +37 -0
- package/skills/plan-guidelines/reference/plan-tdd-create.md +44 -0
- package/skills/plan-guidelines/reference/todos.md +39 -0
- package/skills/presentation-guidelines/SKILL.md +25 -0
- package/skills/presentation-guidelines/reference/presentation-create.md +41 -0
- package/skills/presentation-guidelines/reference/presentation-motion-scaffold.md +38 -0
- package/skills/python-guidelines/SKILL.md +32 -0
- package/skills/python-guidelines/reference/async-await-patterns.md +62 -0
- package/skills/python-guidelines/reference/caching-functions.md +47 -0
- package/skills/python-guidelines/reference/dataclasses-type-hints.md +63 -0
- package/skills/python-guidelines/reference/exception-handling.md +72 -0
- package/skills/python-guidelines/reference/generators-comprehensions.md +54 -0
- package/skills/python-guidelines/reference/pathlib-file-ops.md +60 -0
- package/skills/python-guidelines/reference/resource-management.md +58 -0
- package/skills/python-guidelines/reference/string-formatting.md +41 -0
- package/skills/python-guidelines/reference/type-checking.md +47 -0
- package/skills/react-guidelines/SKILL.md +105 -0
- package/skills/react-guidelines/reference/accessibility.md +31 -0
- package/skills/react-guidelines/reference/activity-effect-event.md +42 -0
- package/skills/react-guidelines/reference/component-design.md +57 -0
- package/skills/react-guidelines/reference/hooks.md +39 -0
- package/skills/react-guidelines/reference/migration-anti-patterns.md +33 -0
- package/skills/react-guidelines/reference/migration-deprecations.md +109 -0
- package/skills/react-guidelines/reference/migration-paradigm-shifts.md +33 -0
- package/skills/react-guidelines/reference/migration-typescript.md +95 -0
- package/skills/react-guidelines/reference/new-hooks.md +94 -0
- package/skills/react-guidelines/reference/performance-optimization.md +41 -0
- package/skills/react-guidelines/reference/react-compiler.md +34 -0
- package/skills/react-guidelines/reference/server-components.md +99 -0
- package/skills/react-guidelines/reference/state-management.md +72 -0
- package/skills/react-guidelines/reference/suspense-streaming.md +36 -0
- package/skills/remotion-guidelines/SKILL.md +67 -0
- package/skills/remotion-guidelines/reference/animations.md +121 -0
- package/skills/remotion-guidelines/reference/assets.md +21 -0
- package/skills/remotion-guidelines/reference/captions.md +33 -0
- package/skills/remotion-guidelines/reference/charts.md +35 -0
- package/skills/remotion-guidelines/reference/compositions.md +40 -0
- package/skills/remotion-guidelines/reference/dom-measurement.md +82 -0
- package/skills/remotion-guidelines/reference/gifs.md +33 -0
- package/skills/remotion-guidelines/reference/lottie.md +41 -0
- package/skills/remotion-guidelines/reference/maps.md +26 -0
- package/skills/remotion-guidelines/reference/media.md +39 -0
- package/skills/remotion-guidelines/reference/mediabunny.md +28 -0
- package/skills/remotion-guidelines/reference/sequencing.md +44 -0
- package/skills/remotion-guidelines/reference/text.md +24 -0
- package/skills/remotion-guidelines/reference/three-d.md +33 -0
- package/skills/remotion-guidelines/reference/timing.md +22 -0
- package/skills/remotion-guidelines/reference/transitions.md +52 -0
- package/skills/shell-scripting-guidelines/SKILL.md +31 -0
- package/skills/shell-scripting-guidelines/reference/argument-parsing.md +67 -0
- package/skills/shell-scripting-guidelines/reference/common-patterns.md +46 -0
- package/skills/shell-scripting-guidelines/reference/error-handling.md +62 -0
- package/skills/shell-scripting-guidelines/reference/functions.md +66 -0
- package/skills/shell-scripting-guidelines/reference/idempotency.md +57 -0
- package/skills/shell-scripting-guidelines/reference/parameter-expansion.md +38 -0
- package/skills/shell-scripting-guidelines/reference/posix-compatibility.md +53 -0
- package/skills/shell-scripting-guidelines/reference/quoting.md +42 -0
- package/skills/shell-scripting-guidelines/reference/script-template.md +70 -0
- package/skills/shell-scripting-guidelines/reference/strict-mode.md +41 -0
- package/skills/shell-scripting-guidelines/reference/validation.md +30 -0
- package/skills/skill-guidelines/SKILL.md +33 -0
- package/skills/skill-guidelines/reference/assimilate.md +51 -0
- package/skills/skill-guidelines/reference/create.md +48 -0
- package/skills/skill-guidelines/reference/extract.md +48 -0
- package/skills/skill-guidelines/reference/simplify.md +56 -0
- package/skills/sql-postgresql-guidelines/SKILL.md +31 -0
- package/skills/sql-postgresql-guidelines/reference/constraints.md +47 -0
- package/skills/sql-postgresql-guidelines/reference/cte-patterns.md +42 -0
- package/skills/sql-postgresql-guidelines/reference/data-types.md +46 -0
- package/skills/sql-postgresql-guidelines/reference/indexing.md +45 -0
- package/skills/sql-postgresql-guidelines/reference/jsonb.md +54 -0
- package/skills/sql-postgresql-guidelines/reference/performance.md +46 -0
- package/skills/sql-postgresql-guidelines/reference/role-based-access.md +47 -0
- package/skills/sql-postgresql-guidelines/reference/row-level-security.md +66 -0
- package/skills/strudel-guidelines/SKILL.md +52 -0
- package/skills/strudel-guidelines/reference/arrangement.md +24 -0
- package/skills/strudel-guidelines/reference/conditionals.md +22 -0
- package/skills/strudel-guidelines/reference/effects.md +22 -0
- package/skills/strudel-guidelines/reference/genre-ambient.md +26 -0
- package/skills/strudel-guidelines/reference/genre-harsh.md +21 -0
- package/skills/strudel-guidelines/reference/genre-trance.md +23 -0
- package/skills/strudel-guidelines/reference/layering.md +22 -0
- package/skills/strudel-guidelines/reference/mini-notation.md +74 -0
- package/skills/strudel-guidelines/reference/modulation.md +22 -0
- package/skills/strudel-guidelines/reference/scales-harmony.md +20 -0
- package/skills/strudel-guidelines/reference/sounds.md +89 -0
- package/skills/strudel-guidelines/reference/tempo-timing.md +23 -0
- package/skills/terraform-guidelines/SKILL.md +28 -0
- package/skills/terraform-guidelines/reference/advanced-patterns.md +88 -0
- package/skills/terraform-guidelines/reference/locals.md +53 -0
- package/skills/terraform-guidelines/reference/module-definition.md +81 -0
- package/skills/terraform-guidelines/reference/module-structure.md +51 -0
- package/skills/terraform-guidelines/reference/remote-state.md +38 -0
- package/skills/terraform-guidelines/reference/root-module.md +71 -0
- package/skills/terraform-guidelines/reference/typed-variables.md +90 -0
- package/skills/threejs-guidelines/SKILL.md +38 -0
- package/skills/threejs-guidelines/reference/animation.md +26 -0
- package/skills/threejs-guidelines/reference/cameras-controls.md +26 -0
- package/skills/threejs-guidelines/reference/geometry.md +22 -0
- package/skills/threejs-guidelines/reference/interaction.md +25 -0
- package/skills/threejs-guidelines/reference/lighting-shadows.md +31 -0
- package/skills/threejs-guidelines/reference/loaders.md +29 -0
- package/skills/threejs-guidelines/reference/materials.md +25 -0
- package/skills/threejs-guidelines/reference/math.md +27 -0
- package/skills/threejs-guidelines/reference/node-materials.md +32 -0
- package/skills/threejs-guidelines/reference/patterns.md +29 -0
- package/skills/threejs-guidelines/reference/performance.md +24 -0
- package/skills/threejs-guidelines/reference/physics-vr.md +36 -0
- package/skills/threejs-guidelines/reference/postprocessing.md +26 -0
- package/skills/threejs-guidelines/reference/scene-fundamentals.md +26 -0
- package/skills/threejs-guidelines/reference/shaders.md +28 -0
- package/skills/threejs-guidelines/reference/textures.md +21 -0
- package/skills/threejs-guidelines/reference/webgpu.md +34 -0
- package/skills/typescript-guidelines/SKILL.md +37 -0
- package/skills/typescript-guidelines/reference/async-without-await.md +32 -0
- package/skills/typescript-guidelines/reference/avoid-barrel-exports.md +25 -0
- package/skills/typescript-guidelines/reference/avoid-eslint-disable.md +28 -0
- package/skills/typescript-guidelines/reference/avoid-reexports.md +26 -0
- package/skills/typescript-guidelines/reference/env-access-bracket-notation.md +29 -0
- package/skills/typescript-guidelines/reference/numeric-separator-enforcement.md +30 -0
- package/skills/typescript-guidelines/reference/template-literals-require-string-conversion.md +26 -0
- package/skills/typescript-guidelines/reference/unbound-method-references.md +32 -0
- package/skills/typescript-guidelines/reference/unnecessary-async-keywords.md +37 -0
- package/skills/typescript-to-lua-guidelines/SKILL.md +33 -0
- package/skills/typescript-to-lua-guidelines/reference/avoiding-heavy-features.md +41 -0
- package/skills/typescript-to-lua-guidelines/reference/coroutine-patterns.md +49 -0
- package/skills/typescript-to-lua-guidelines/reference/function-patterns.md +59 -0
- package/skills/typescript-to-lua-guidelines/reference/lua-interop.md +49 -0
- package/skills/typescript-to-lua-guidelines/reference/module-organization.md +42 -0
- package/skills/typescript-to-lua-guidelines/reference/multi-return-functions.md +47 -0
- package/skills/typescript-to-lua-guidelines/reference/namespaces-vs-classes.md +52 -0
- package/skills/typescript-to-lua-guidelines/reference/performance-tips.md +68 -0
- package/skills/typescript-to-lua-guidelines/reference/stable-tables.md +60 -0
- package/skills/typescript-to-lua-guidelines/reference/tsconfig.md +46 -0
- package/skills/typescript-to-lua-guidelines/reference/tstl-decorators.md +61 -0
- package/skills/typescript-to-lua-guidelines/reference/type-safety.md +79 -0
- package/skills/vitest-guidelines/SKILL.md +32 -0
- package/skills/vitest-guidelines/reference/cors-preflight-status-code.md +34 -0
- package/skills/vitest-guidelines/reference/http-testing.md +57 -0
- package/skills/vitest-guidelines/reference/json-response-type-safety.md +40 -0
- package/skills/vitest-guidelines/reference/mock-patterns.md +53 -0
- package/skills/vitest-guidelines/reference/project-references-path-resolution.md +36 -0
- package/skills/vitest-guidelines/reference/test-organization.md +25 -0
- package/skills/vitest-guidelines/reference/timestamp-testing.md +55 -0
- package/skills/vitest-guidelines/reference/type-safety.md +55 -0
- package/skills/vitest-guidelines/reference/typescript-config.md +43 -0
- package/skills/zod-guidelines/SKILL.md +33 -0
- package/skills/zod-guidelines/reference/default-values-output-type.md +63 -0
- package/skills/zod-guidelines/reference/migration-string-validators.md +38 -0
- package/skills/zod-guidelines/reference/migration-v4.md +46 -0
- package/skills/zod-guidelines/reference/schema-organization.md +73 -0
- package/skills/zod-guidelines/reference/validation-patterns.md +37 -0
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# module-definition: Module Definition Pattern
|
|
2
|
+
|
|
3
|
+
**Guideline:** Define reusable modules with typed variables, validation rules, computed locals, and explicit outputs
|
|
4
|
+
|
|
5
|
+
**Rationale:** Well-defined interfaces make modules composable and prevent configuration errors
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```hcl
|
|
10
|
+
# modules/network/variables.tf
|
|
11
|
+
variable "vpc_cidr" {
|
|
12
|
+
description = "CIDR block for VPC"
|
|
13
|
+
type = string
|
|
14
|
+
validation {
|
|
15
|
+
condition = can(cidrhost(var.vpc_cidr, 0))
|
|
16
|
+
error_message = "Must be valid IPv4 CIDR"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
variable "environment" {
|
|
21
|
+
description = "Environment name"
|
|
22
|
+
type = string
|
|
23
|
+
validation {
|
|
24
|
+
condition = contains(["dev", "staging", "prod"], var.environment)
|
|
25
|
+
error_message = "Must be dev, staging, or prod"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
variable "availability_zones" {
|
|
30
|
+
description = "List of availability zones"
|
|
31
|
+
type = list(string)
|
|
32
|
+
default = []
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# modules/network/main.tf
|
|
36
|
+
locals {
|
|
37
|
+
common_tags = merge(
|
|
38
|
+
var.tags,
|
|
39
|
+
{
|
|
40
|
+
Module = "network"
|
|
41
|
+
Environment = var.environment
|
|
42
|
+
ManagedBy = "terraform"
|
|
43
|
+
}
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
subnet_cidrs = [
|
|
47
|
+
for i, az in var.availability_zones :
|
|
48
|
+
cidrsubnet(var.vpc_cidr, 8, i)
|
|
49
|
+
]
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
resource "aws_vpc" "this" {
|
|
53
|
+
cidr_block = var.vpc_cidr
|
|
54
|
+
enable_dns_hostnames = true
|
|
55
|
+
enable_dns_support = true
|
|
56
|
+
|
|
57
|
+
tags = merge(local.common_tags, {
|
|
58
|
+
Name = "${var.environment}-vpc"
|
|
59
|
+
})
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# modules/network/outputs.tf
|
|
63
|
+
output "vpc_id" {
|
|
64
|
+
description = "ID of the VPC"
|
|
65
|
+
value = aws_vpc.this.id
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
output "vpc_cidr" {
|
|
69
|
+
description = "CIDR block of the VPC"
|
|
70
|
+
value = aws_vpc.this.cidr_block
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
**Techniques:**
|
|
75
|
+
- **Type constraints:** Specify all variable types to enable early validation
|
|
76
|
+
- **Validation blocks:** Add business logic constraints like CIDR format checking
|
|
77
|
+
- **Common locals:** Centralize shared tags and computed values for consistency
|
|
78
|
+
- **CIDR transformations:** Use cidrsubnet() in locals for flexible subnet allocation
|
|
79
|
+
- **Descriptive outputs:** Export all useful values with clear descriptions
|
|
80
|
+
- **Environment isolation:** Use tags and naming patterns for multi-environment support
|
|
81
|
+
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# module-structure: Module Organization
|
|
2
|
+
|
|
3
|
+
**Guideline:** Organize modules with separate directories for reusable modules and environment-specific configurations
|
|
4
|
+
|
|
5
|
+
**Rationale:** Clear separation between modules and environments enables reusability and environment isolation
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
terraform/
|
|
11
|
+
├── modules/
|
|
12
|
+
│ ├── network/
|
|
13
|
+
│ │ ├── main.tf
|
|
14
|
+
│ │ ├── variables.tf
|
|
15
|
+
│ │ ├── outputs.tf
|
|
16
|
+
│ │ └── README.md
|
|
17
|
+
│ ├── compute/
|
|
18
|
+
│ │ ├── main.tf
|
|
19
|
+
│ │ ├── variables.tf
|
|
20
|
+
│ │ ├── outputs.tf
|
|
21
|
+
│ │ └── README.md
|
|
22
|
+
│ └── database/
|
|
23
|
+
│ ├── main.tf
|
|
24
|
+
│ ├── variables.tf
|
|
25
|
+
│ ├── outputs.tf
|
|
26
|
+
│ └── README.md
|
|
27
|
+
└── environments/
|
|
28
|
+
├── dev/
|
|
29
|
+
│ ├── main.tf
|
|
30
|
+
│ ├── variables.tf
|
|
31
|
+
│ ├── terraform.tfvars
|
|
32
|
+
│ └── backend.tf
|
|
33
|
+
├── staging/
|
|
34
|
+
│ ├── main.tf
|
|
35
|
+
│ ├── variables.tf
|
|
36
|
+
│ ├── terraform.tfvars
|
|
37
|
+
│ └── backend.tf
|
|
38
|
+
└── prod/
|
|
39
|
+
├── main.tf
|
|
40
|
+
├── variables.tf
|
|
41
|
+
├── terraform.tfvars
|
|
42
|
+
└── backend.tf
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Techniques:**
|
|
46
|
+
- **Modules directory:** Group reusable infrastructure components by capability
|
|
47
|
+
- **Environments directory:** Create separate root modules for dev, staging, prod
|
|
48
|
+
- **Standard files:** Use main.tf, variables.tf, outputs.tf, backend.tf consistently
|
|
49
|
+
- **Module README:** Document each module's purpose, variables, and outputs
|
|
50
|
+
- **Relative sourcing:** Use relative paths in module sources for portability
|
|
51
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# remote-state: Remote State Configuration
|
|
2
|
+
|
|
3
|
+
**Guideline:** Store state remotely with encryption and locking, isolate per environment
|
|
4
|
+
|
|
5
|
+
**Rationale:** Remote state enables team collaboration and prevents concurrent modification conflicts
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```hcl
|
|
10
|
+
# environments/prod/backend.tf
|
|
11
|
+
terraform {
|
|
12
|
+
backend "s3" {
|
|
13
|
+
bucket = "myapp-terraform-state-prod"
|
|
14
|
+
key = "prod/terraform.tfstate"
|
|
15
|
+
region = "us-east-1"
|
|
16
|
+
encrypt = true
|
|
17
|
+
dynamodb_table = "terraform-state-lock-prod"
|
|
18
|
+
|
|
19
|
+
# Prevent accidental state deletion
|
|
20
|
+
lifecycle {
|
|
21
|
+
prevent_destroy = true
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
# Each environment has isolated state
|
|
27
|
+
# dev: s3://myapp-tf-state-dev/dev/terraform.tfstate
|
|
28
|
+
# staging: s3://myapp-tf-state-staging/staging/terraform.tfstate
|
|
29
|
+
# prod: s3://myapp-tf-state-prod/prod/terraform.tfstate
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Techniques:**
|
|
33
|
+
- **S3 backend:** Store state in versioned, encrypted S3 buckets
|
|
34
|
+
- **DynamoDB locking:** Use DynamoDB tables to prevent concurrent modifications
|
|
35
|
+
- **Encryption:** Enable server-side encryption on S3 backend buckets
|
|
36
|
+
- **Per-environment isolation:** Create separate state buckets for dev, staging, prod
|
|
37
|
+
- **State lifecycle:** Prevent accidental state deletion with versioning and backups
|
|
38
|
+
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# root-module: Root Module Pattern
|
|
2
|
+
|
|
3
|
+
**Guideline:** Keep root modules thin by composing child modules with provider config and environment-specific values
|
|
4
|
+
|
|
5
|
+
**Rationale:** Root modules orchestrate infrastructure without duplicating logic, modules remain reusable
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```hcl
|
|
10
|
+
# environments/prod/main.tf
|
|
11
|
+
terraform {
|
|
12
|
+
required_version = ">= 1.12"
|
|
13
|
+
|
|
14
|
+
required_providers {
|
|
15
|
+
aws = {
|
|
16
|
+
source = "hashicorp/aws"
|
|
17
|
+
version = "~> 5.0"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
provider "aws" {
|
|
23
|
+
region = var.aws_region
|
|
24
|
+
|
|
25
|
+
default_tags {
|
|
26
|
+
tags = {
|
|
27
|
+
Environment = "prod"
|
|
28
|
+
Project = "myapp"
|
|
29
|
+
ManagedBy = "terraform"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
locals {
|
|
35
|
+
availability_zones = ["${var.aws_region}a", "${var.aws_region}b", "${var.aws_region}c"]
|
|
36
|
+
|
|
37
|
+
common_tags = {
|
|
38
|
+
Project = "myapp"
|
|
39
|
+
Environment = "prod"
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
module "network" {
|
|
44
|
+
source = "../../modules/network"
|
|
45
|
+
|
|
46
|
+
vpc_cidr = "10.0.0.0/16"
|
|
47
|
+
environment = "prod"
|
|
48
|
+
availability_zones = local.availability_zones
|
|
49
|
+
tags = local.common_tags
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
module "compute" {
|
|
53
|
+
source = "../../modules/compute"
|
|
54
|
+
|
|
55
|
+
vpc_id = module.network.vpc_id
|
|
56
|
+
subnet_ids = module.network.public_subnet_ids
|
|
57
|
+
environment = "prod"
|
|
58
|
+
instance_type = "t3.medium"
|
|
59
|
+
desired_capacity = 3
|
|
60
|
+
tags = local.common_tags
|
|
61
|
+
}
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
**Techniques:**
|
|
65
|
+
- **Provider blocks:** Configure required providers with version constraints
|
|
66
|
+
- **Default tags:** Use provider default_tags to apply common tags to all resources
|
|
67
|
+
- **Thin root:** Root modules only compose child modules, no resource creation
|
|
68
|
+
- **Module composition:** Wire module outputs as inputs to dependent modules
|
|
69
|
+
- **Environment locals:** Compute availability zones and common tags once
|
|
70
|
+
- **Relative sourcing:** Use ../../modules/ paths for portable module references
|
|
71
|
+
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# typed-variables: Variable Types and Validation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use type constraints and validation blocks for all variables to catch configuration errors early
|
|
4
|
+
|
|
5
|
+
**Rationale:** Typed variables with validation provide immediate feedback and prevent invalid deployments
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```hcl
|
|
10
|
+
# String with validation
|
|
11
|
+
variable "environment" {
|
|
12
|
+
description = "Environment name"
|
|
13
|
+
type = string
|
|
14
|
+
|
|
15
|
+
validation {
|
|
16
|
+
condition = contains(["dev", "staging", "prod"], var.environment)
|
|
17
|
+
error_message = "Environment must be dev, staging, or prod"
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
# Number with constraints
|
|
22
|
+
variable "instance_count" {
|
|
23
|
+
description = "Number of instances"
|
|
24
|
+
type = number
|
|
25
|
+
default = 2
|
|
26
|
+
|
|
27
|
+
validation {
|
|
28
|
+
condition = var.instance_count >= 1 && var.instance_count <= 10
|
|
29
|
+
error_message = "Instance count must be between 1 and 10"
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
# Boolean
|
|
34
|
+
variable "enable_monitoring" {
|
|
35
|
+
description = "Enable detailed monitoring"
|
|
36
|
+
type = bool
|
|
37
|
+
default = true
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
# List
|
|
41
|
+
variable "allowed_cidr_blocks" {
|
|
42
|
+
description = "CIDR blocks allowed to access"
|
|
43
|
+
type = list(string)
|
|
44
|
+
default = []
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# Map
|
|
48
|
+
variable "tags" {
|
|
49
|
+
description = "Resource tags"
|
|
50
|
+
type = map(string)
|
|
51
|
+
default = {}
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
# Object with structure
|
|
55
|
+
variable "database_config" {
|
|
56
|
+
description = "Database configuration"
|
|
57
|
+
type = object({
|
|
58
|
+
instance_class = string
|
|
59
|
+
allocated_storage = number
|
|
60
|
+
engine_version = string
|
|
61
|
+
backup_retention = number
|
|
62
|
+
})
|
|
63
|
+
default = {
|
|
64
|
+
instance_class = "db.t3.micro"
|
|
65
|
+
allocated_storage = 20
|
|
66
|
+
engine_version = "15.4"
|
|
67
|
+
backup_retention = 7
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
# Optional values (Terraform 1.3+)
|
|
72
|
+
variable "optional_config" {
|
|
73
|
+
description = "Optional configuration"
|
|
74
|
+
type = object({
|
|
75
|
+
required_field = string
|
|
76
|
+
optional_field = optional(string, "default")
|
|
77
|
+
optional_number = optional(number)
|
|
78
|
+
})
|
|
79
|
+
}
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
**Techniques:**
|
|
83
|
+
- **Basic types:** Use string, number, bool, list, map for simple variables
|
|
84
|
+
- **Validation blocks:** Add business logic constraints like allowed values
|
|
85
|
+
- **Range validation:** Check numeric ranges with >= and <= operators
|
|
86
|
+
- **Complex types:** Use object() for structured configurations with nested fields
|
|
87
|
+
- **Optional fields:** Use optional(type, default) for flexible object schemas
|
|
88
|
+
- **Sensible defaults:** Provide practical defaults for common configurations
|
|
89
|
+
- **Early feedback:** Type and validation errors appear before plan phase
|
|
90
|
+
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: threejs-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.js/.ts` files with Three.js imports, `three` package usage, or 3D scene code. Use when building vanilla Three.js applications. Apply for scene setup, meshes, materials, lighting, loaders, animation, interaction, shaders, post-processing, performance optimization. Keywords: Three.js, WebGL, WebGPU, Scene, Renderer, Mesh, BufferGeometry, MeshStandardMaterial, GLTFLoader, Raycaster, ShaderMaterial, EffectComposer, InstancedMesh.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Three.js Coding Guidelines
|
|
8
|
+
|
|
9
|
+
Vanilla Three.js for scene setup, rendering, meshes, materials, lights, animation, interaction, and effects.
|
|
10
|
+
|
|
11
|
+
## Essentials
|
|
12
|
+
|
|
13
|
+
- **Scene structure** - Organize Object3D hierarchy; use Groups for logical organization, see [reference/scene-fundamentals.md](reference/scene-fundamentals.md)
|
|
14
|
+
- **Render loop** - Frame-rate independence with `clock.getDelta()`, see [reference/scene-fundamentals.md](reference/scene-fundamentals.md)
|
|
15
|
+
- **Disposal** - Dispose geometries, materials, textures to prevent memory leaks, see [reference/scene-fundamentals.md](reference/scene-fundamentals.md)
|
|
16
|
+
- **Pixel ratio** - Cap at 2 with `Math.min(devicePixelRatio, 2)`, see [reference/scene-fundamentals.md](reference/scene-fundamentals.md)
|
|
17
|
+
- **Color space** - Use `SRGBColorSpace` for colors, `NoColorSpace` for data, see [reference/textures.md](reference/textures.md)
|
|
18
|
+
- **Shadows** - Enable on renderer, light, mesh; keep frustum tight, see [reference/lighting-shadows.md](reference/lighting-shadows.md)
|
|
19
|
+
|
|
20
|
+
## Core Topics
|
|
21
|
+
|
|
22
|
+
- Read [reference/scene-fundamentals.md](reference/scene-fundamentals.md) - Scene, Renderer, Object3D, cleanup, render loop
|
|
23
|
+
- Read [reference/geometry.md](reference/geometry.md) - Shapes, BufferGeometry, custom geometry, instancing
|
|
24
|
+
- Read [reference/cameras-controls.md](reference/cameras-controls.md) - Cameras, OrbitControls, FlyControls, viewport
|
|
25
|
+
- Read [reference/materials.md](reference/materials.md) - PBR materials, ShaderMaterial, properties
|
|
26
|
+
- Read [reference/textures.md](reference/textures.md) - Loading, UV mapping, render targets, environment
|
|
27
|
+
- Read [reference/lighting-shadows.md](reference/lighting-shadows.md) - Lights, shadows, IBL, light probes
|
|
28
|
+
- Read [reference/animation.md](reference/animation.md) - Keyframes, skeletal, morph targets, AnimationMixer
|
|
29
|
+
- Read [reference/interaction.md](reference/interaction.md) - Raycasting, selection, drag, coordinate conversion
|
|
30
|
+
- Read [reference/loaders.md](reference/loaders.md) - GLTF, FBX, textures, HDR, compression
|
|
31
|
+
- Read [reference/shaders.md](reference/shaders.md) - GLSL shaders, uniforms, varyings
|
|
32
|
+
- Read [reference/postprocessing.md](reference/postprocessing.md) - Bloom, DOF, SSAO, custom effects
|
|
33
|
+
- Read [reference/performance.md](reference/performance.md) - InstancedMesh, LOD, culling, batching, profiling
|
|
34
|
+
- Read [reference/patterns.md](reference/patterns.md) - Architecture patterns, asset management, state machines
|
|
35
|
+
- Read [reference/math.md](reference/math.md) - Vector3, Matrix4, Quaternion, Box3, curves, MathUtils
|
|
36
|
+
- Read [reference/node-materials.md](reference/node-materials.md) - TSL (Three Shading Language), node-based materials
|
|
37
|
+
- Read [reference/physics-vr.md](reference/physics-vr.md) - Physics engines (Rapier, Cannon), WebXR (VR/AR)
|
|
38
|
+
- Read [reference/webgpu.md](reference/webgpu.md) - WebGPU renderer, compute shaders, modern GPU
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# animation: Animation System
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use AnimationMixer for GLTF keyframe animations; use clock.getDelta() for frame-rate independent procedural animation.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Mixer efficiently plays complex GLTF animations; delta time ensures consistent speed across frame rates.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
const mixer = new THREE.AnimationMixer(gltf.scene);
|
|
10
|
+
const clip = THREE.AnimationClip.findByName(gltf.animations, 'Walk');
|
|
11
|
+
const action = mixer.clipAction(clip);
|
|
12
|
+
action.play();
|
|
13
|
+
const clock = new THREE.Clock();
|
|
14
|
+
renderer.setAnimationLoop(() => {
|
|
15
|
+
mixer.update(clock.getDelta());
|
|
16
|
+
renderer.render(scene, camera);
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Techniques:**
|
|
21
|
+
- AnimationMixer: Create from scene root; plays multiple clips simultaneously
|
|
22
|
+
- AnimationAction: play(), stop(), reset(); loop modes (Repeat, Once, PingPong); timeScale for speed
|
|
23
|
+
- Blending: crossFadeTo(nextAction, duration) for smooth transitions; weight blending for layered animations
|
|
24
|
+
- Procedural: Use elapsed time with Math.sin/cos for smooth curves; delta time for frame-rate independence
|
|
25
|
+
- Keyframe creation: VectorKeyframeTrack (position), QuaternionKeyframeTrack (rotation), AnimationClip (combines tracks)
|
|
26
|
+
- Performance: Single mixer for multiple objects; stopAllAction() and uncacheRoot() for cleanup
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# filename: cameras-controls
|
|
2
|
+
|
|
3
|
+
**Guideline:** Choose camera type (Perspective, Orthographic, Cube); select controls matching interaction (OrbitControls, FlyControls, PointerLockControls).
|
|
4
|
+
|
|
5
|
+
**Rationale:** Proper camera frustum prevents z-fighting; tight near/far prevents clipping; controls must match intended interaction pattern.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
const camera = new THREE.PerspectiveCamera(75, w/h, 0.1, 1000);
|
|
10
|
+
camera.position.set(5, 5, 5);
|
|
11
|
+
|
|
12
|
+
const controls = new OrbitControls(camera, renderer.domElement);
|
|
13
|
+
controls.enableDamping = true;
|
|
14
|
+
controls.dampingFactor = 0.05;
|
|
15
|
+
controls.target.set(0, 0, 0);
|
|
16
|
+
controls.update();
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
**Techniques:**
|
|
20
|
+
- Camera types: PerspectiveCamera (3D standard), OrthographicCamera (CAD/isometric), CubeCamera (reflections)
|
|
21
|
+
- Near/far planes: Large scenes use `near=1, far=100000`; small scenes `near=0.001, far=100` to avoid z-fighting
|
|
22
|
+
- OrbitControls: `enableDamping=true` for smooth motion; set `minDistance`/`maxDistance` and polar angle limits
|
|
23
|
+
- FlyControls: Pass `clock.getDelta()` to `.update()` for frame-rate independence
|
|
24
|
+
- PointerLockControls: Call `.lock()` on click; check `.isLocked`; use `.moveForward()`, `.moveRight()`
|
|
25
|
+
- Multi-camera: `.setViewport()`, `.setScissor()`, render twice for split-screen/PIP
|
|
26
|
+
- Coordinate conversion: `.project()` for world→screen; `.unproject()` for screen→world
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# geometry: Geometry and BufferGeometry
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use built-in geometries for standard shapes; create efficient custom BufferGeometry with position/UV/indices/normals; use InstancedMesh.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Built-ins are optimized; proper BufferGeometry avoids redundant data; InstancedMesh enables thousands of copies in one draw call.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
const geometry = new THREE.BufferGeometry();
|
|
10
|
+
geometry.setAttribute('position', new THREE.BufferAttribute(positions, 3));
|
|
11
|
+
geometry.setAttribute('uv', new THREE.BufferAttribute(uvs, 2));
|
|
12
|
+
geometry.setIndex(new THREE.BufferAttribute(indices, 1));
|
|
13
|
+
geometry.computeVertexNormals();
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
**Techniques:**
|
|
17
|
+
- Built-ins: BoxGeometry, SphereGeometry, PlaneGeometry, CylinderGeometry, IcosahedronGeometry, etc.
|
|
18
|
+
- Path-based: LatheGeometry (vases), TubeGeometry (splines), ExtrudeGeometry (2D extrude), TextGeometry (fonts)
|
|
19
|
+
- Custom BufferGeometry: Position (required), UV, indices (reuse vertices), normals, bounds
|
|
20
|
+
- InstancedMesh: Per-instance transforms via setMatrixAt(); per-instance colors via setColorAt()
|
|
21
|
+
- Optimization: Merge geometries with BufferGeometryUtils; dispose with geometry.dispose()
|
|
22
|
+
- Morph targets: Blend multiple shape deformations with morphTargetInfluences
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# interaction: Raycasting and User Interaction
|
|
2
|
+
|
|
3
|
+
**Guideline:** Convert screen to normalized device coordinates, then raycast; cache raycaster instance and track state for hover/drag.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Raycasting picks objects; state tracking enables hover highlights and drag interactions; coordinate conversion is essential.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
const raycaster = new THREE.Raycaster();
|
|
10
|
+
const pointer = new THREE.Vector2();
|
|
11
|
+
window.addEventListener('pointermove', (e) => {
|
|
12
|
+
pointer.x = (e.clientX / innerWidth) * 2 - 1;
|
|
13
|
+
pointer.y = -(e.clientY / innerHeight) * 2 + 1;
|
|
14
|
+
raycaster.setFromCamera(pointer, camera);
|
|
15
|
+
const hits = raycaster.intersectObjects(scene.children, true);
|
|
16
|
+
if (hits.length > 0) console.log(hits[0].object, hits[0].point);
|
|
17
|
+
});
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Techniques:**
|
|
21
|
+
- NDC conversion: `pointer.x = (clientX / width) * 2 - 1`, `pointer.y = -(clientY / height) * 2 + 1`
|
|
22
|
+
- Intersection properties: object, point (world), distance, uv, face, instanceId
|
|
23
|
+
- Hover effects: Track state, restore original color on exit
|
|
24
|
+
- Drag implementation: pointerdown to start, pointermove to update, pointerup to release
|
|
25
|
+
- Performance: Filter interactive objects before raycast; don't raycast every frame on heavy scenes
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# filename: lighting-shadows
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use light types appropriate to scene; keep shadow frustums tight; leverage IBL (Environment maps) for realistic ambient lighting.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Lighting creates atmosphere; tight shadow frustums improve quality; IBL is more efficient than many point lights for PBR.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
renderer.shadowMap.enabled = true;
|
|
10
|
+
renderer.shadowMap.type = THREE.PCFSoftShadowMap;
|
|
11
|
+
|
|
12
|
+
const dirLight = new THREE.DirectionalLight(0xffffff, 1);
|
|
13
|
+
dirLight.castShadow = true;
|
|
14
|
+
dirLight.shadow.camera.left = -10;
|
|
15
|
+
dirLight.shadow.camera.right = 10;
|
|
16
|
+
mesh.castShadow = true;
|
|
17
|
+
mesh.receiveShadow = true;
|
|
18
|
+
|
|
19
|
+
new RGBELoader().load('env.hdr', (tex) => {
|
|
20
|
+
tex.mapping = THREE.EquirectangularReflectionMapping;
|
|
21
|
+
scene.environment = tex;
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
**Techniques:**
|
|
26
|
+
- Light types: AmbientLight (fill), HemisphereLight (sky/ground outdoors), DirectionalLight (sun), PointLight (bulb), SpotLight (flashlight)
|
|
27
|
+
- Shadow types: PCFSoftShadowMap (best quality); tight frustum (camera.left/right/top/bottom) and mapSize (512-2048)
|
|
28
|
+
- Shadow bias: `.bias = -0.0001`, `.normalBias = 0.02` to fix acne/peter-panning
|
|
29
|
+
- IBL: Load HDR with RGBELoader; set `scene.environment` and `scene.background`
|
|
30
|
+
- Performance: Limit to 3-5 lights; use contact shadows or baked lighting for static scenes
|
|
31
|
+
- Helpers: DirectionalLightHelper, PointLightHelper, CameraHelper for debug
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# filename: loaders
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use GLTFLoader with Draco compression for 3D models; wrap loaders in async/await; use LoadingManager for progress tracking.
|
|
4
|
+
|
|
5
|
+
**Rationale:** GLTF/GLB is web standard; Draco reduces file size 90%+; async prevents UI blocking; manager centralizes progress.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
async function loadModel(url) {
|
|
10
|
+
return new Promise((resolve, reject) => {
|
|
11
|
+
new GLTFLoader().load(url, resolve, undefined, reject);
|
|
12
|
+
});
|
|
13
|
+
}
|
|
14
|
+
const gltf = await loadModel('model.glb');
|
|
15
|
+
scene.add(gltf.scene);
|
|
16
|
+
|
|
17
|
+
// With Draco compression
|
|
18
|
+
const dracoLoader = new DRACOLoader();
|
|
19
|
+
dracoLoader.setDecoderPath('https://www.gstatic.com/draco/v1.5.6/');
|
|
20
|
+
new GLTFLoader().setDRACOLoader(dracoLoader).load('model.glb', ...);
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Techniques:**
|
|
24
|
+
- GLTFLoader: Primary format; animations in `gltf.animations`; use `traverse()` for shadow/material setup
|
|
25
|
+
- Draco: Reduce geometry size 90%+; requires decoder path setup
|
|
26
|
+
- KTX2 textures: Compressed texture format via `ktx2Loader.setTranscoderPath()`
|
|
27
|
+
- LoadingManager: Centralize `onProgress`/`onLoad`/`onError` across multiple loaders
|
|
28
|
+
- Parallel loading: `Promise.all([loadModel(), loadModel()])` for concurrent assets
|
|
29
|
+
- Export best practices: Enable Draco/KTX2 in 3D tools; use `gltf-transform` CLI for compression
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# filename: materials
|
|
2
|
+
|
|
3
|
+
**Guideline:** Choose material type based on performance needs; reuse material instances; handle transparency with proper depth writes and render order.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Material complexity directly impacts framerate; fewer unique materials reduce draw calls; transparency requires depth-aware rendering.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
const pbr = new THREE.MeshStandardMaterial({
|
|
10
|
+
color: 0xffffff,
|
|
11
|
+
roughness: 0.5,
|
|
12
|
+
metalness: 0.0,
|
|
13
|
+
map: texture,
|
|
14
|
+
normalMap: normalTex,
|
|
15
|
+
envMap: envTex
|
|
16
|
+
});
|
|
17
|
+
// Reuse: mesh1.material = pbr; mesh2.material = pbr;
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Techniques:**
|
|
21
|
+
- Material types: MeshBasicMaterial (fastest, unlit), Lambert (matte), Phong (shiny), Standard/Physical (PBR realistic)
|
|
22
|
+
- PBR properties: roughness 0=mirror/1=diffuse; metalness 0=dielectric/1=metal; use maps for per-pixel variation
|
|
23
|
+
- Transparency: `.alphaTest` for hard edges (fast); `.transparent=true` + `.depthWrite=false` + `.renderOrder` for smooth (slow)
|
|
24
|
+
- Blending: `AdditiveBlending` for glow/fire; `MultiplyBlending` for shadows
|
|
25
|
+
- Performance: Material pooling with Map; reuse instances; use `onBeforeCompile()` for shader hacks; dispose() to prevent leaks
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# filename: math
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use Three.js math classes (Vector3, Matrix4, Quaternion) and reuse instances to avoid garbage collection in animation loops.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Three.js math classes are GPU-optimized; allocating new instances every frame causes GC stalls and framerate drops.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
// Reuse pattern: Define once, mutate in loop
|
|
10
|
+
const v3_1 = new THREE.Vector3();
|
|
11
|
+
for (let i = 0; i < objects.length; i++) {
|
|
12
|
+
v3_1.copy(objects[i].position).normalize();
|
|
13
|
+
// Use v3_1...
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// Vector operations
|
|
17
|
+
v.add(other); v.multiplyScalar(2); v.lerp(target, 0.5);
|
|
18
|
+
// Quaternion: q.slerp(target, t); Matrix4: m.compose(pos, quat, scale);
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Techniques:**
|
|
22
|
+
- Vector3: `.set()`, `.copy()`, `.add()`, `.multiplyScalar()`, `.normalize()`, `.dot()`, `.cross()`, `.lerp()`
|
|
23
|
+
- Quaternion: `.setFromAxisAngle()`, `.slerp()` for smooth rotation interpolation avoiding gimbal lock
|
|
24
|
+
- Matrix4: `.compose()` combines position/quaternion/scale; use `.invert()` for transforms
|
|
25
|
+
- Color: `.setHSL()`, `.lerp()` for smooth color transitions
|
|
26
|
+
- Bounding volumes: Box3/Sphere for collision detection with `.intersectsBox()`, `.containsPoint()`
|
|
27
|
+
- MathUtils: `degToRad()`, `lerp()`, `clamp()`, `smoothstep()` for common operations
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
# filename: node-materials
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use TSL (Three Shading Language) for materials that work across WebGL and WebGPU; compose shader nodes instead of writing GLSL.
|
|
4
|
+
|
|
5
|
+
**Rationale:** TSL provides type-safe, composable nodes compiling to GLSL (WebGL) and WGSL (WebGPU); supports future renderers without code changes.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
import {float, vec3, mix, sin, uniform} from 'three/tsl';
|
|
10
|
+
|
|
11
|
+
const timeUniform = uniform(float, 'time');
|
|
12
|
+
const material = new THREE.MeshStandardNodeMaterial({
|
|
13
|
+
color: mix(
|
|
14
|
+
vec3(1.0, 0.0, 0.0),
|
|
15
|
+
vec3(0.0, 0.0, 1.0),
|
|
16
|
+
sin(timeUniform).mul(0.5).add(0.5)
|
|
17
|
+
),
|
|
18
|
+
});
|
|
19
|
+
timeUniform.value = clock.getElapsedTime();
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Techniques:**
|
|
23
|
+
- TSL nodes: `float()`, `vec2/3/4()`, `sin()`, `cos()`, `mix()`, `step()`, `normalize()`
|
|
24
|
+
- Uniforms: `uniform(type, name)` for runtime control; update `.value` each frame
|
|
25
|
+
- Varyings: `varying(type)` for vertex→fragment data passing
|
|
26
|
+
- Functions: `Fn([args], returnType, ({params}) => {...})` for reusable shader logic
|
|
27
|
+
- Textures: `texture(textureObject)` for sampling; `storageTexture()` for compute read/write
|
|
28
|
+
- Positions: `positionLocal`, `positionWorld`, `normalWorld` for vertex data
|
|
29
|
+
- Material types: MeshBasicNodeMaterial, MeshStandardNodeMaterial, MeshPhysicalNodeMaterial
|
|
30
|
+
- Lighting: `lightingContext()` for advanced PBR lighting effects
|
|
31
|
+
- Composition: Operators like `.mul()`, `.add()`, `.dot()`, `.cross()` chain naturally
|
|
32
|
+
- WebGPU: TSL materials compile to WGSL automatically; works with both renderers
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# filename: patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Organize scenes in Groups; implement proper cleanup to prevent memory leaks; use delta time for frame-rate independent updates.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Hierarchical organization enables efficient transforms; cleanup prevents GPU memory exhaustion; delta time ensures consistent movement across devices.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
```javascript
|
|
9
|
+
const scene = new THREE.Scene();
|
|
10
|
+
const clock = new THREE.Clock();
|
|
11
|
+
const world = new THREE.Group();
|
|
12
|
+
world.add(player, enemies, effects);
|
|
13
|
+
scene.add(world);
|
|
14
|
+
|
|
15
|
+
function animate() {
|
|
16
|
+
const delta = clock.getDelta();
|
|
17
|
+
player.position.x += moveSpeed * delta;
|
|
18
|
+
mesh.rotation.y += angularVelocity * delta;
|
|
19
|
+
renderer.render(scene, camera);
|
|
20
|
+
}
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Techniques:**
|
|
24
|
+
- Scene hierarchy: Group objects (world → player/enemies/effects) for batch transforms
|
|
25
|
+
- Frame-rate independence: Multiply movement by `clock.getDelta()`; use `getElapsedTime()` for animations
|
|
26
|
+
- Cleanup pattern: Dispose geometry/materials; `mixer.stopAllAction()`, remove listeners, call on `beforeunload`
|
|
27
|
+
- Object pooling: Reuse bullets/particles with `.visible` flag instead of create/destroy for performance
|
|
28
|
+
- Component pattern: Encapsulate entities (Player class with update/takeDamage methods)
|
|
29
|
+
- Event bus: Centralize game events for decoupled communication between systems
|