@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,43 @@
|
|
|
1
|
+
# cache-lookups: Cache Table Lookups
|
|
2
|
+
|
|
3
|
+
**Guideline:** Cache repeated table field accesses in local variables to improve performance.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Table lookups are slower than local variable access. Caching reduces redundant table accesses, especially in hot paths and loops.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ❌ Bad - repeated table lookups
|
|
11
|
+
function update_position(entity, dt)
|
|
12
|
+
entity.x = entity.x + entity.velocity_x * dt
|
|
13
|
+
entity.y = entity.y + entity.velocity_y * dt
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
-- ✅ Good - cached lookups
|
|
17
|
+
function update_position(entity, dt)
|
|
18
|
+
local x = entity.x
|
|
19
|
+
local y = entity.y
|
|
20
|
+
local vx = entity.velocity_x
|
|
21
|
+
local vy = entity.velocity_y
|
|
22
|
+
|
|
23
|
+
entity.x = x + vx * dt
|
|
24
|
+
entity.y = y + vy * dt
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
-- ✅ Good - cache module table
|
|
28
|
+
local math_sin = math.sin
|
|
29
|
+
local math_cos = math.cos
|
|
30
|
+
|
|
31
|
+
function rotate_point(x, y, angle)
|
|
32
|
+
local cos_a = math_cos(angle)
|
|
33
|
+
local sin_a = math_sin(angle)
|
|
34
|
+
return x * cos_a - y * sin_a,
|
|
35
|
+
x * sin_a + y * cos_a
|
|
36
|
+
end
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
**Techniques:**
|
|
40
|
+
- Store frequently accessed table fields in locals
|
|
41
|
+
- Cache standard library functions (math.sin, etc.)
|
|
42
|
+
- Especially important in loops and hot paths
|
|
43
|
+
- Balance readability vs performance
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
# coroutines: Coroutines for Cooperative Tasks
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use coroutines for cooperative multitasking, timed actions, and state machines.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Coroutines enable writing sequential code for asynchronous operations without callbacks. Ideal for game timers, animations, and task scheduling.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- Coroutine for timed actions
|
|
11
|
+
function create_timer(duration)
|
|
12
|
+
return coroutine.create(function()
|
|
13
|
+
local elapsed = 0
|
|
14
|
+
while elapsed < duration do
|
|
15
|
+
local dt = coroutine.yield()
|
|
16
|
+
elapsed = elapsed + dt
|
|
17
|
+
end
|
|
18
|
+
return true -- Completed
|
|
19
|
+
end)
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
-- Task manager
|
|
23
|
+
local TimerManager = {}
|
|
24
|
+
|
|
25
|
+
function TimerManager:new()
|
|
26
|
+
return setmetatable({timers = {}}, {__index = self})
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
function TimerManager:add_timer(duration, callback)
|
|
30
|
+
local timer = {
|
|
31
|
+
coro = create_timer(duration),
|
|
32
|
+
callback = callback
|
|
33
|
+
}
|
|
34
|
+
table.insert(self.timers, timer)
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
function TimerManager:update(dt)
|
|
38
|
+
local i = 1
|
|
39
|
+
while i <= #self.timers do
|
|
40
|
+
local timer = self.timers[i]
|
|
41
|
+
local ok, done = coroutine.resume(timer.coro, dt)
|
|
42
|
+
|
|
43
|
+
if done then
|
|
44
|
+
timer.callback()
|
|
45
|
+
table.remove(self.timers, i)
|
|
46
|
+
else
|
|
47
|
+
i = i + 1
|
|
48
|
+
end
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
-- Usage
|
|
53
|
+
local manager = TimerManager:new()
|
|
54
|
+
manager:add_timer(2.0, function()
|
|
55
|
+
print("Timer fired after 2 seconds")
|
|
56
|
+
end)
|
|
57
|
+
|
|
58
|
+
-- In game loop
|
|
59
|
+
manager:update(dt)
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
**Techniques:**
|
|
63
|
+
- Create coroutine with `coroutine.create`
|
|
64
|
+
- Use `coroutine.yield()` to pause execution
|
|
65
|
+
- Resume with `coroutine.resume(coro, args)`
|
|
66
|
+
- Check status with return values or `coroutine.status`
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# error-handling: Error Handling
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use explicit error return values (value, error) pattern instead of exceptions for expected failures.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Follows Lua conventions. Makes error handling explicit and visible. More appropriate for recoverable errors than `assert()`.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Protected call with error handling
|
|
11
|
+
local function load_config(path)
|
|
12
|
+
local f, err = io.open(path, "r")
|
|
13
|
+
if not f then
|
|
14
|
+
return nil, "Failed to open file: " .. err
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
local content = f:read("*all")
|
|
18
|
+
f:close()
|
|
19
|
+
|
|
20
|
+
local config, err = parse_config(content)
|
|
21
|
+
if not config then
|
|
22
|
+
return nil, "Failed to parse config: " .. err
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
return config
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
-- Usage
|
|
29
|
+
local config, err = load_config("config.lua")
|
|
30
|
+
if not config then
|
|
31
|
+
print("Error loading config:", err)
|
|
32
|
+
-- Use defaults
|
|
33
|
+
config = get_default_config()
|
|
34
|
+
end
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Techniques:**
|
|
38
|
+
- Return `nil, error_message` on failure
|
|
39
|
+
- Return value on success
|
|
40
|
+
- Check first return value before using
|
|
41
|
+
- Use `pcall` for protecting risky operations
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# idiomatic-patterns: Idiomatic Patterns
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use Lua's idiomatic patterns for common operations like ternary expressions, default values, and safe navigation.
|
|
4
|
+
|
|
5
|
+
**Rationale:** These patterns are widely recognized in Lua community, concise, and leverage Lua's truthiness semantics effectively.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Ternary operator pattern
|
|
11
|
+
local value = condition and true_value or false_value
|
|
12
|
+
|
|
13
|
+
-- ✅ Default value pattern
|
|
14
|
+
local x = config.x or 0
|
|
15
|
+
local name = user.name or "Anonymous"
|
|
16
|
+
|
|
17
|
+
-- ✅ Safe navigation
|
|
18
|
+
local value = obj and obj.field and obj.field.nested
|
|
19
|
+
|
|
20
|
+
-- ✅ Multiple return values
|
|
21
|
+
local ok, result = pcall(risky_function)
|
|
22
|
+
if ok then
|
|
23
|
+
use_result(result)
|
|
24
|
+
else
|
|
25
|
+
handle_error(result)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
-- ✅ Swap variables
|
|
29
|
+
a, b = b, a
|
|
30
|
+
|
|
31
|
+
-- ✅ Unpack table
|
|
32
|
+
local x, y, z = unpack(position)
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
**Techniques:**
|
|
36
|
+
- Use `and`/`or` for conditional expressions
|
|
37
|
+
- Use `or` for default values
|
|
38
|
+
- Use `and` chain for safe navigation
|
|
39
|
+
- Leverage multiple return values
|
|
40
|
+
- Use tuple assignment for swapping
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# input-validation: Input Validation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Validate function arguments for type, range, and correctness using assertions.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Lua is dynamically typed. Explicit validation catches errors early, provides clear error messages, and documents expectations.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Good - validate inputs
|
|
11
|
+
function M.clamp(value, min, max)
|
|
12
|
+
assert(type(value) == "number", "value must be a number")
|
|
13
|
+
assert(type(min) == "number", "min must be a number")
|
|
14
|
+
assert(type(max) == "number", "max must be a number")
|
|
15
|
+
assert(min <= max, "min must be <= max")
|
|
16
|
+
|
|
17
|
+
if value < min then return min end
|
|
18
|
+
if value > max then return max end
|
|
19
|
+
return value
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
-- ✅ Good - type checking
|
|
23
|
+
function M.divide(a, b)
|
|
24
|
+
assert(type(a) == "number", "a must be a number")
|
|
25
|
+
assert(type(b) == "number", "b must be a number")
|
|
26
|
+
assert(b ~= 0, "division by zero")
|
|
27
|
+
return a / b
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
-- ✅ Good - range checking
|
|
31
|
+
function M.set_volume(volume)
|
|
32
|
+
assert(type(volume) == "number", "volume must be a number")
|
|
33
|
+
assert(volume >= 0 and volume <= 1, "volume must be between 0 and 1")
|
|
34
|
+
-- Implementation
|
|
35
|
+
end
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
**Techniques:**
|
|
39
|
+
- Use `assert()` with descriptive messages
|
|
40
|
+
- Check types with `type()` function
|
|
41
|
+
- Validate numeric ranges and constraints
|
|
42
|
+
- Place validations at function start
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# jit-friendly-tables: JIT-Friendly Table Operations
|
|
2
|
+
|
|
3
|
+
**Guideline:** Keep table shapes stable by pre-allocating all fields and avoid adding fields after creation.
|
|
4
|
+
|
|
5
|
+
**Rationale:** LuaJIT optimizes based on table shape. Adding fields later causes shape changes that prevent JIT compilation and reduce performance.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Good - stable tables
|
|
11
|
+
local function create_entity(x, y, type)
|
|
12
|
+
-- Pre-allocate all fields
|
|
13
|
+
return {
|
|
14
|
+
x = x,
|
|
15
|
+
y = y,
|
|
16
|
+
type = type,
|
|
17
|
+
velocity_x = 0,
|
|
18
|
+
velocity_y = 0,
|
|
19
|
+
health = 100,
|
|
20
|
+
active = true
|
|
21
|
+
}
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
-- ✅ Good - pre-allocated array
|
|
25
|
+
local function create_array(size)
|
|
26
|
+
local arr = {}
|
|
27
|
+
for i = 1, size do
|
|
28
|
+
arr[i] = 0
|
|
29
|
+
end
|
|
30
|
+
return arr
|
|
31
|
+
end
|
|
32
|
+
|
|
33
|
+
-- ❌ Bad - unstable table (fields added after creation)
|
|
34
|
+
local function create_entity_bad(x, y)
|
|
35
|
+
local entity = {x = x, y = y}
|
|
36
|
+
-- Adding fields later hurts JIT
|
|
37
|
+
entity.velocity_x = 0
|
|
38
|
+
entity.velocity_y = 0
|
|
39
|
+
return entity
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
-- ❌ Bad - using pairs in hot path
|
|
43
|
+
for k, v in pairs(entities) do -- Slow
|
|
44
|
+
update_entity(v)
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
-- ✅ Good - numeric for loop
|
|
48
|
+
for i = 1, #entities do -- Fast
|
|
49
|
+
update_entity(entities[i])
|
|
50
|
+
end
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Techniques:**
|
|
54
|
+
- Define all fields in table literal or constructor
|
|
55
|
+
- Pre-allocate arrays with known size
|
|
56
|
+
- Use numeric for loops instead of `pairs` for arrays
|
|
57
|
+
- Avoid sparse arrays
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# local-variables: Always Use Local Variables
|
|
2
|
+
|
|
3
|
+
**Guideline:** Declare all variables as `local` to avoid implicit globals.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Global variables pollute the namespace, create hard-to-find bugs, and are slower to access than local variables. Locals are also JIT-friendly.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ✅ Good - all local
|
|
11
|
+
local function calculate(a, b)
|
|
12
|
+
local result = a + b
|
|
13
|
+
local squared = result * result
|
|
14
|
+
return squared
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
local value = calculate(3, 4)
|
|
18
|
+
|
|
19
|
+
-- ❌ Bad - implicit globals
|
|
20
|
+
function calculate(a, b)
|
|
21
|
+
result = a + b -- Global!
|
|
22
|
+
squared = result * result -- Global!
|
|
23
|
+
return squared
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
value = calculate(3, 4) -- Global!
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Techniques:**
|
|
30
|
+
- Prefix all variable declarations with `local`
|
|
31
|
+
- Prefix all function declarations with `local`
|
|
32
|
+
- Only export through module return table
|
|
33
|
+
- Use linters to catch missing `local` keywords
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
# metatables: Metatable Pattern for Simple OO
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use metatables with `__index` for simple object-oriented programming when needed.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Provides class-like behavior with inheritance and methods while remaining JIT-friendly. Simpler than complex OO frameworks.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- vector.lua
|
|
11
|
+
local Vector = {}
|
|
12
|
+
Vector.__index = Vector
|
|
13
|
+
|
|
14
|
+
-- Constructor
|
|
15
|
+
function Vector:new(x, y)
|
|
16
|
+
local instance = {
|
|
17
|
+
x = x or 0,
|
|
18
|
+
y = y or 0
|
|
19
|
+
}
|
|
20
|
+
return setmetatable(instance, self)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
-- Methods
|
|
24
|
+
function Vector:length()
|
|
25
|
+
return (self.x * self.x + self.y * self.y) ^ 0.5
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
function Vector:normalize()
|
|
29
|
+
local len = self:length()
|
|
30
|
+
if len == 0 then return self end
|
|
31
|
+
self.x = self.x / len
|
|
32
|
+
self.y = self.y / len
|
|
33
|
+
return self
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
function Vector:add(other)
|
|
37
|
+
return Vector:new(self.x + other.x, self.y + other.y)
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
-- Usage
|
|
41
|
+
local v1 = Vector:new(3, 4)
|
|
42
|
+
local len = v1:length() -- 5
|
|
43
|
+
local v2 = v1:add(Vector:new(1, 1))
|
|
44
|
+
|
|
45
|
+
return Vector
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Techniques:**
|
|
49
|
+
- Create table with `__index` pointing to itself
|
|
50
|
+
- Use constructor pattern with `setmetatable`
|
|
51
|
+
- Define methods using colon syntax
|
|
52
|
+
- Pre-allocate all fields in constructor
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# module-pattern: Module Pattern
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use table-based module pattern with local module table and single return statement.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Provides clean encapsulation, avoids global namespace pollution, and creates predictable module structure that's easy to reason about.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- math2d.lua
|
|
11
|
+
local M = {}
|
|
12
|
+
|
|
13
|
+
-- Simple function in module
|
|
14
|
+
function M.length(x, y)
|
|
15
|
+
return (x * x + y * y) ^ 0.5
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
function M.distance(x1, y1, x2, y2)
|
|
19
|
+
local dx = x2 - x1
|
|
20
|
+
local dy = y2 - y1
|
|
21
|
+
return M.length(dx, dy)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
function M.normalize(x, y)
|
|
25
|
+
local len = M.length(x, y)
|
|
26
|
+
if len == 0 then return 0, 0 end
|
|
27
|
+
return x / len, y / len
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
return M
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
**Techniques:**
|
|
34
|
+
- Create local module table `local M = {}`
|
|
35
|
+
- Define functions as `M.function_name`
|
|
36
|
+
- Return module table at end
|
|
37
|
+
- One module per file
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# string-concatenation: String Concatenation
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `table.concat()` for building strings in loops instead of repeated concatenation.
|
|
4
|
+
|
|
5
|
+
**Rationale:** String concatenation with `..` creates new string objects each time. For loops, this creates many intermediate strings. Table concatenation is O(n) instead of O(n²).
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```lua
|
|
10
|
+
-- ❌ Bad - repeated concatenation creates many strings
|
|
11
|
+
local str = ""
|
|
12
|
+
for i = 1, 1000 do
|
|
13
|
+
str = str .. tostring(i) .. ","
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
-- ✅ Good - table concatenation
|
|
17
|
+
local parts = {}
|
|
18
|
+
for i = 1, 1000 do
|
|
19
|
+
parts[i] = tostring(i)
|
|
20
|
+
end
|
|
21
|
+
local str = table.concat(parts, ",")
|
|
22
|
+
|
|
23
|
+
-- ✅ Good - string.format for simple cases
|
|
24
|
+
local message = string.format("Player %s scored %d points", name, score)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
**Techniques:**
|
|
28
|
+
- Build array of string parts
|
|
29
|
+
- Use `table.concat(parts, separator)`
|
|
30
|
+
- Use `string.format()` for simple interpolation
|
|
31
|
+
- Avoid `..` in loops
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: moon-guidelines
|
|
3
|
+
description: >-
|
|
4
|
+
Trigger on `.moon/`, `moon.yml` files in project config. Use when working with moonrepo for monorepo task management. Apply for task configuration, project tagging, task inheritance. Keywords: moon, monorepo, .moon/tasks, tags, task inheritance, project queries, task caching, language toolchains.
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Moon Build System Guidelines
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
|
|
11
|
+
- Moon ≥ 1.0, Node.js for JavaScript/TypeScript projects.
|
|
12
|
+
|
|
13
|
+
## Essentials
|
|
14
|
+
|
|
15
|
+
- **Task configuration** - Define in `.moon/tasks/*.yml` for auto-inheritance, see [reference/task-configuration.md](reference/task-configuration.md), [reference/task-inheritance.md](reference/task-inheritance.md)
|
|
16
|
+
- **Tags** - Use for categorization, filtering, boundaries, inheritance, see [reference/tag-based-filtering.md](reference/tag-based-filtering.md)
|
|
17
|
+
- **Execution** - `project:task`, `#tag:task`, `:task` (all), `--query`, `--affected`
|
|
18
|
+
- **Querying** - Query projects/tasks by tags, language, or query language, see [reference/query-language.md](reference/query-language.md)
|
|
19
|
+
- **Configuration** - Projects use `moon.yml`, workspace uses `.moon/workspace.yml`
|
|
20
|
+
- **Toolchain** - Moon manages language toolchains, configured in workspace
|
|
21
|
+
- **Caching** - Built-in task caching with output definitions, see [reference/task-configuration.md](reference/task-configuration.md)
|
|
22
|
+
|
|
23
|
+
## Progressive disclosure
|
|
24
|
+
|
|
25
|
+
- Read [reference/task-configuration.md](reference/task-configuration.md) - When defining or modifying task configurations
|
|
26
|
+
- Read [reference/tag-based-filtering.md](reference/tag-based-filtering.md) - When filtering projects or tasks by tags
|
|
27
|
+
- Read [reference/query-language.md](reference/query-language.md) - When using advanced query syntax
|
|
28
|
+
- Read [reference/task-inheritance.md](reference/task-inheritance.md) - When setting up task inheritance patterns
|
|
29
|
+
- Read [reference/project-constraints.md](reference/project-constraints.md) - When enforcing project boundaries
|
|
30
|
+
- Read [reference/docker-multistage.md](reference/docker-multistage.md) - When building Docker images with moon scaffold
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# docker-multistage: Moon Docker Scaffold Pattern
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use moon's docker scaffold command in multistage Dockerfiles for efficient monorepo builds.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Moon's scaffold command extracts only the necessary workspace files and dependencies, reducing build context and enabling efficient layer caching.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```dockerfile
|
|
10
|
+
# Base stage
|
|
11
|
+
FROM node:22-alpine AS base
|
|
12
|
+
WORKDIR /app
|
|
13
|
+
RUN npm install -g @moonrepo/cli
|
|
14
|
+
|
|
15
|
+
# Skeleton stage
|
|
16
|
+
FROM base AS skeleton
|
|
17
|
+
COPY . .
|
|
18
|
+
RUN moon docker scaffold my-service
|
|
19
|
+
|
|
20
|
+
# Build stage
|
|
21
|
+
FROM base AS build
|
|
22
|
+
COPY --from=skeleton /app/.moon/docker/workspace .
|
|
23
|
+
RUN npm ci
|
|
24
|
+
COPY --from=skeleton /app/.moon/docker/sources .
|
|
25
|
+
RUN moon run my-service:build
|
|
26
|
+
RUN moon docker prune
|
|
27
|
+
|
|
28
|
+
# Runtime stage
|
|
29
|
+
FROM gcr.io/distroless/nodejs22-debian12:nonroot AS runtime
|
|
30
|
+
WORKDIR /app
|
|
31
|
+
COPY --from=build --chown=65532:65532 /app/node_modules ./node_modules
|
|
32
|
+
COPY --from=build --chown=65532:65532 /app/packages ./packages
|
|
33
|
+
WORKDIR /app/packages/my-service
|
|
34
|
+
CMD ["dist/src/server.js"]
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
**Techniques:**
|
|
38
|
+
- moon docker scaffold: Extracts workspace config and package dependencies
|
|
39
|
+
- moon docker prune: Removes dev dependencies and build artifacts
|
|
40
|
+
- Skeleton stage: Separates dependency resolution from source copying
|
|
41
|
+
- Distroless runtime: Minimal production image with nonroot user
|
|
42
|
+
- Layer ordering: Dependencies before sources for cache efficiency
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# project-constraints: Enforce Architectural Boundaries
|
|
2
|
+
|
|
3
|
+
**Guideline:** Define tag-based constraints in workspace to enforce dependency rules between projects.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Tag-based constraints prevent architectural violations by restricting which project tags can depend on others, enforcing clear module boundaries in monorepos.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
# .moon/workspace.yml
|
|
11
|
+
constraints:
|
|
12
|
+
tagRelationships:
|
|
13
|
+
frontend: [frontend, shared]
|
|
14
|
+
backend: [backend, shared]
|
|
15
|
+
tenant-example: [tenant-example, shared]
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
**Techniques:**
|
|
19
|
+
- tagRelationships: Define which tags can depend on which tags
|
|
20
|
+
- Validation: Constraints checked during project graph creation and task execution
|
|
21
|
+
- Violations: Prevent execution if dependencies violate constraints
|
|
22
|
+
- Frontend tags: Can depend on frontend and shared tags only
|
|
23
|
+
- Tenant isolation: Each tenant can depend only on own tenant and shared
|
|
24
|
+
- moon check: Validate constraints without running tasks
|
|
25
|
+
- Tag refactoring: Update moon.yml tags to align with constraints
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# query-language: Advanced Project and Task Filtering
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use Moon Query Language (MQL) for advanced filtering of projects and tasks.
|
|
4
|
+
|
|
5
|
+
**Rationale:** MQL allows precise selection of projects using language, type, tags, and other criteria for targeted task execution and querying.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Query projects by language and type
|
|
11
|
+
moon query projects "language=javascript && projectType=library"
|
|
12
|
+
|
|
13
|
+
# Run build for typescript projects
|
|
14
|
+
moon run :build --query "language=typescript"
|
|
15
|
+
|
|
16
|
+
# Complex filtering
|
|
17
|
+
moon run :test --query "(language=javascript || language=typescript) && projectType=application"
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Techniques:**
|
|
21
|
+
- Operators: `=` (equals), `!=` (not), `~` (regex), `!~` (not regex), `&&` (AND), `||` (OR)
|
|
22
|
+
- Project fields: language, projectType, tags, projectName, projectAlias, projectSource
|
|
23
|
+
- #tag:task syntax: Use for simple single-tag filtering
|
|
24
|
+
- --query flag: Use for complex multi-criterion conditions
|
|
25
|
+
- Performance: Prefer exact matches (`=`) over regex when possible
|
|
26
|
+
- Parentheses: Group conditions for complex boolean logic
|
|
27
|
+
- Field types: language=javascript|typescript, projectType=library|application
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
# tag-based-filtering: Filter Tasks by Project Tags
|
|
2
|
+
|
|
3
|
+
**Guideline:** Use `#tag:task` syntax to run tasks for all projects matching a specific tag.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Tag-based filtering enables efficient execution of tasks across related projects without listing each individually, supporting tenant isolation and feature organization.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
# Run build for all frontend projects
|
|
11
|
+
moon run '#frontend:build'
|
|
12
|
+
|
|
13
|
+
# Run tests for tenant-specific projects
|
|
14
|
+
moon run '#tenant-example:test'
|
|
15
|
+
moon run '#tenant-other:lint'
|
|
16
|
+
|
|
17
|
+
# Multiple tags with query
|
|
18
|
+
moon run :build --query "tags~frontend|backend"
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
**Techniques:**
|
|
22
|
+
- #tag:task syntax: Target all projects with specific tag
|
|
23
|
+
- Tenant tags: Use #tenant-NAME:task for tenant-specific execution
|
|
24
|
+
- Multiple tags: Combine with --query and regex for complex filtering
|
|
25
|
+
- Task inheritance: Define .moon/tasks/tag-*.yml for tag-specific tasks
|
|
26
|
+
- Project tags: Assign tags in moon.yml for filtering categorization
|
|
27
|
+
- Scoped execution: Run across multiple projects without enumeration
|
|
28
|
+
- Override behavior: Project-level tasks override tag-inherited tasks
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# task-configuration: Define Inherited Tasks
|
|
2
|
+
|
|
3
|
+
**Guideline:** Define tasks in `.moon/tasks/*.yml` files with inputs, outputs, and dependencies for automatic inheritance by projects.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Centralized task configuration prevents duplication and ensures consistent task execution across projects of the same type or language.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
# .moon/tasks/node.yml - Inherited by all Node.js projects
|
|
11
|
+
tasks:
|
|
12
|
+
build:
|
|
13
|
+
command: 'vite build'
|
|
14
|
+
inputs: [src/**, vite.config.ts]
|
|
15
|
+
outputs: [dist]
|
|
16
|
+
|
|
17
|
+
typecheck:
|
|
18
|
+
command: 'tsc --noEmit'
|
|
19
|
+
inputs: [src/**, tsconfig.json]
|
|
20
|
+
deps: ['~:build']
|
|
21
|
+
|
|
22
|
+
test:
|
|
23
|
+
command: 'vitest run'
|
|
24
|
+
inputs: [src/**, vitest.config.ts]
|
|
25
|
+
options:
|
|
26
|
+
runInCI: true
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Techniques:**
|
|
30
|
+
- command: Shell command to execute
|
|
31
|
+
- inputs: Files/globs affecting caching and task invalidation
|
|
32
|
+
- outputs: Directories/files produced, cached and restored
|
|
33
|
+
- deps: Task dependencies using ~:task syntax
|
|
34
|
+
- options: runInCI, persistent, optional settings
|
|
35
|
+
- env: Environment variables for task execution
|
|
36
|
+
- platform: Constraint (node, system) for execution environment
|
|
37
|
+
- Inheritance: Tasks inherit to projects based on language/type matching
|
|
38
|
+
- Override: Project moon.yml can override or extend inherited tasks
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# task-inheritance: Task Inheritance Hierarchy
|
|
2
|
+
|
|
3
|
+
**Guideline:** Define tasks at appropriate levels (global, type, language, tag, project) with later definitions overriding earlier ones.
|
|
4
|
+
|
|
5
|
+
**Rationale:** Hierarchical task inheritance allows global defaults with project-specific customizations, reducing configuration duplication while maintaining flexibility.
|
|
6
|
+
|
|
7
|
+
**Example:**
|
|
8
|
+
|
|
9
|
+
```yaml
|
|
10
|
+
# .moon/tasks/node.yml - Type-based inheritance
|
|
11
|
+
tasks:
|
|
12
|
+
install:
|
|
13
|
+
command: 'npm install'
|
|
14
|
+
inputs: [package.json, package-lock.json]
|
|
15
|
+
|
|
16
|
+
# moon.yml - Project override
|
|
17
|
+
tasks:
|
|
18
|
+
install:
|
|
19
|
+
command: 'npm ci --frozen-lockfile'
|
|
20
|
+
inputs: [package.json, package-lock.json]
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Techniques:**
|
|
24
|
+
- Inheritance order: Global → type → language → tag → project (later overrides)
|
|
25
|
+
- Type-based: .moon/tasks/node.yml, .moon/tasks/rust.yml for runtime types
|
|
26
|
+
- Language-based: .moon/tasks/javascript.yml, .moon/tasks/typescript.yml
|
|
27
|
+
- Tag-based: .moon/tasks/tag-TAGNAME.yml for tag-specific tasks
|
|
28
|
+
- Merging: Project tasks merge with inherited tasks
|
|
29
|
+
- Complete override: Redefine entire task in moon.yml to fully replace
|
|
30
|
+
- Selective override: Define only fields you need to change
|