@nextsparkjs/ai-workflow 0.1.0-beta.100
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/LICENSE +21 -0
- package/README.md +115 -0
- package/claude/_docs/workflows-optimizations.md +359 -0
- package/claude/agents/api-tester.md +634 -0
- package/claude/agents/architecture-supervisor.md +1351 -0
- package/claude/agents/backend-developer.md +997 -0
- package/claude/agents/backend-validator.md +417 -0
- package/claude/agents/bdd-docs-writer.md +737 -0
- package/claude/agents/block-developer.md +677 -0
- package/claude/agents/code-reviewer.md +1432 -0
- package/claude/agents/db-developer.md +721 -0
- package/claude/agents/db-validator.md +407 -0
- package/claude/agents/demo-video-generator.md +493 -0
- package/claude/agents/documentation-writer.md +1268 -0
- package/claude/agents/frontend-developer.md +1234 -0
- package/claude/agents/frontend-validator.md +777 -0
- package/claude/agents/functional-validator.md +630 -0
- package/claude/agents/mock-analyst.md +387 -0
- package/claude/agents/product-manager.md +963 -0
- package/claude/agents/qa-automation.md +1762 -0
- package/claude/agents/release-manager.md +634 -0
- package/claude/agents/selectors-translator.md +262 -0
- package/claude/agents/unit-test-writer.md +785 -0
- package/claude/agents/visual-comparator.md +329 -0
- package/claude/agents/workflow-maintainer.md +352 -0
- package/claude/commands/do/README.md +88 -0
- package/claude/commands/do/create-api.md +64 -0
- package/claude/commands/do/create-entity.md +66 -0
- package/claude/commands/do/create-migration.md +64 -0
- package/claude/commands/do/create-plugin.md +56 -0
- package/claude/commands/do/create-theme.md +70 -0
- package/claude/commands/do/mock-data.md +67 -0
- package/claude/commands/do/reset-db.md +71 -0
- package/claude/commands/do/setup-scheduled-action.md +75 -0
- package/claude/commands/do/sync-code-review.md +117 -0
- package/claude/commands/do/update-selectors.md +112 -0
- package/claude/commands/do/use-skills.md +90 -0
- package/claude/commands/do/validate-blocks.md +69 -0
- package/claude/commands/how-to/README.md +261 -0
- package/claude/commands/how-to/add-metadata.md +692 -0
- package/claude/commands/how-to/add-taxonomies.md +806 -0
- package/claude/commands/how-to/add-translations.md +571 -0
- package/claude/commands/how-to/create-api.md +577 -0
- package/claude/commands/how-to/create-block.md +575 -0
- package/claude/commands/how-to/create-child-entities.md +771 -0
- package/claude/commands/how-to/create-entity.md +597 -0
- package/claude/commands/how-to/create-migrations.md +605 -0
- package/claude/commands/how-to/create-plugin.md +654 -0
- package/claude/commands/how-to/customize-app.md +481 -0
- package/claude/commands/how-to/customize-dashboard.md +553 -0
- package/claude/commands/how-to/customize-theme.md +438 -0
- package/claude/commands/how-to/define-features-flows.md +632 -0
- package/claude/commands/how-to/deploy.md +507 -0
- package/claude/commands/how-to/handle-file-uploads.md +746 -0
- package/claude/commands/how-to/implement-search.md +1001 -0
- package/claude/commands/how-to/install-plugins.md +352 -0
- package/claude/commands/how-to/manage-test-coverage.md +984 -0
- package/claude/commands/how-to/run-tests.md +400 -0
- package/claude/commands/how-to/set-app-languages.md +601 -0
- package/claude/commands/how-to/set-plans-and-permissions.md +575 -0
- package/claude/commands/how-to/set-scheduled-actions.md +527 -0
- package/claude/commands/how-to/set-user-roles-and-permissions.md +550 -0
- package/claude/commands/how-to/setup-authentication.md +388 -0
- package/claude/commands/how-to/setup-claude-code.md +440 -0
- package/claude/commands/how-to/setup-database.md +274 -0
- package/claude/commands/how-to/setup-email-providers.md +598 -0
- package/claude/commands/how-to/setup-mobile-dev.md +627 -0
- package/claude/commands/how-to/start.md +500 -0
- package/claude/commands/how-to/use-devtools.md +639 -0
- package/claude/commands/how-to/use-superadmin.md +622 -0
- package/claude/commands/session/README.md +193 -0
- package/claude/commands/session/block-create.md +190 -0
- package/claude/commands/session/block-list.md +203 -0
- package/claude/commands/session/block-update.md +192 -0
- package/claude/commands/session/block-validate.md +218 -0
- package/claude/commands/session/changelog.md +115 -0
- package/claude/commands/session/close.md +225 -0
- package/claude/commands/session/commit.md +174 -0
- package/claude/commands/session/db-entity.md +206 -0
- package/claude/commands/session/db-fix.md +212 -0
- package/claude/commands/session/db-sample.md +206 -0
- package/claude/commands/session/demo.md +178 -0
- package/claude/commands/session/doc-bdd.md +207 -0
- package/claude/commands/session/doc-feature.md +218 -0
- package/claude/commands/session/doc-read.md +225 -0
- package/claude/commands/session/execute.md +204 -0
- package/claude/commands/session/explain.md +202 -0
- package/claude/commands/session/fix-bug.md +210 -0
- package/claude/commands/session/fix-build.md +182 -0
- package/claude/commands/session/fix-test.md +189 -0
- package/claude/commands/session/pending.md +232 -0
- package/claude/commands/session/refine.md +188 -0
- package/claude/commands/session/resume.md +192 -0
- package/claude/commands/session/review.md +192 -0
- package/claude/commands/session/scope-change.md +181 -0
- package/claude/commands/session/start-blocks.md +347 -0
- package/claude/commands/session/start.md +604 -0
- package/claude/commands/session/status.md +169 -0
- package/claude/commands/session/test-fix.md +221 -0
- package/claude/commands/session/test-run.md +203 -0
- package/claude/commands/session/test-write.md +242 -0
- package/claude/commands/session/validate.md +162 -0
- package/claude/config/context.json +40 -0
- package/claude/config/github.json +69 -0
- package/claude/config/github.schema.json +106 -0
- package/claude/config/team.json +46 -0
- package/claude/config/team.schema.json +106 -0
- package/claude/config/workspace.json +43 -0
- package/claude/config/workspace.schema.json +75 -0
- package/claude/skills/README.md +228 -0
- package/claude/skills/accessibility/SKILL.md +573 -0
- package/claude/skills/api-bypass-layers/SKILL.md +550 -0
- package/claude/skills/asana-integration/SKILL.md +499 -0
- package/claude/skills/better-auth/SKILL.md +666 -0
- package/claude/skills/billing-subscriptions/SKILL.md +660 -0
- package/claude/skills/block-decision-matrix/SKILL.md +359 -0
- package/claude/skills/clickup-integration/SKILL.md +434 -0
- package/claude/skills/core-theme-responsibilities/SKILL.md +485 -0
- package/claude/skills/create-plugin/SKILL.md +425 -0
- package/claude/skills/create-theme/SKILL.md +331 -0
- package/claude/skills/cypress-api/SKILL.md +511 -0
- package/claude/skills/cypress-api/scripts/generate-api-controller.py +329 -0
- package/claude/skills/cypress-api/scripts/generate-api-test.py +930 -0
- package/claude/skills/cypress-e2e/SKILL.md +526 -0
- package/claude/skills/cypress-e2e/scripts/extract-selectors.py +383 -0
- package/claude/skills/cypress-e2e/scripts/generate-uat-test.py +788 -0
- package/claude/skills/cypress-selectors/SKILL.md +309 -0
- package/claude/skills/cypress-selectors/scripts/extract-missing.py +243 -0
- package/claude/skills/cypress-selectors/scripts/generate-block-selectors.py +283 -0
- package/claude/skills/cypress-selectors/scripts/validate-selectors.py +145 -0
- package/claude/skills/database-migrations/SKILL.md +335 -0
- package/claude/skills/database-migrations/scripts/generate-sample-data.py +284 -0
- package/claude/skills/database-migrations/scripts/validate-migration.py +323 -0
- package/claude/skills/design-system/SKILL.md +682 -0
- package/claude/skills/documentation/SKILL.md +540 -0
- package/claude/skills/entity-api/SKILL.md +482 -0
- package/claude/skills/entity-system/SKILL.md +635 -0
- package/claude/skills/entity-system/scripts/generate-child-migration.py +298 -0
- package/claude/skills/entity-system/scripts/generate-metas-migration.py +233 -0
- package/claude/skills/entity-system/scripts/generate-migration.py +382 -0
- package/claude/skills/entity-system/scripts/generate-sample-data.py +418 -0
- package/claude/skills/entity-system/scripts/scaffold-entity.py +661 -0
- package/claude/skills/github/SKILL.md +467 -0
- package/claude/skills/i18n-nextintl/SKILL.md +302 -0
- package/claude/skills/i18n-nextintl/scripts/add-translation.py +243 -0
- package/claude/skills/i18n-nextintl/scripts/extract-hardcoded.py +246 -0
- package/claude/skills/i18n-nextintl/scripts/validate-translations.py +260 -0
- package/claude/skills/impact-analysis/SKILL.md +203 -0
- package/claude/skills/jest-unit/SKILL.md +306 -0
- package/claude/skills/jest-unit/references/component-testing.md +371 -0
- package/claude/skills/jest-unit/references/mocking-patterns.md +380 -0
- package/claude/skills/jest-unit/references/service-hook-testing.md +454 -0
- package/claude/skills/jira-integration/SKILL.md +539 -0
- package/claude/skills/media-library/SKILL.md +743 -0
- package/claude/skills/mock-analysis/SKILL.md +276 -0
- package/claude/skills/monorepo-architecture/SKILL.md +162 -0
- package/claude/skills/nextjs-api-development/SKILL.md +364 -0
- package/claude/skills/nextjs-api-development/scripts/generate-crud-tests.py +456 -0
- package/claude/skills/nextjs-api-development/scripts/scaffold-endpoint.py +481 -0
- package/claude/skills/nextjs-api-development/scripts/validate-api.py +283 -0
- package/claude/skills/notion-integration/SKILL.md +641 -0
- package/claude/skills/npm-development-workflow/SKILL.md +480 -0
- package/claude/skills/page-builder-blocks/SKILL.md +530 -0
- package/claude/skills/page-builder-blocks/scripts/scaffold-block.py +444 -0
- package/claude/skills/permissions-system/SKILL.md +619 -0
- package/claude/skills/plugins/SKILL.md +340 -0
- package/claude/skills/plugins/references/plugin-templates.md +414 -0
- package/claude/skills/plugins/references/plugin-testing.md +353 -0
- package/claude/skills/plugins/references/plugin-types.md +198 -0
- package/claude/skills/plugins/scripts/scaffold-plugin.py +443 -0
- package/claude/skills/pom-patterns/SKILL.md +452 -0
- package/claude/skills/pom-patterns/scripts/generate-pom.py +392 -0
- package/claude/skills/rate-limiting/SKILL.md +342 -0
- package/claude/skills/react-best-practices/AGENTS.md +2410 -0
- package/claude/skills/react-best-practices/README.md +123 -0
- package/claude/skills/react-best-practices/SKILL.md +125 -0
- package/claude/skills/react-best-practices/metadata.json +15 -0
- package/claude/skills/react-best-practices/rules/_sections.md +46 -0
- package/claude/skills/react-best-practices/rules/_template.md +28 -0
- package/claude/skills/react-best-practices/rules/advanced-event-handler-refs.md +55 -0
- package/claude/skills/react-best-practices/rules/advanced-use-latest.md +49 -0
- package/claude/skills/react-best-practices/rules/async-api-routes.md +38 -0
- package/claude/skills/react-best-practices/rules/async-defer-await.md +80 -0
- package/claude/skills/react-best-practices/rules/async-dependencies.md +36 -0
- package/claude/skills/react-best-practices/rules/async-parallel.md +28 -0
- package/claude/skills/react-best-practices/rules/async-suspense-boundaries.md +99 -0
- package/claude/skills/react-best-practices/rules/bundle-barrel-imports.md +59 -0
- package/claude/skills/react-best-practices/rules/bundle-conditional.md +31 -0
- package/claude/skills/react-best-practices/rules/bundle-defer-third-party.md +49 -0
- package/claude/skills/react-best-practices/rules/bundle-dynamic-imports.md +35 -0
- package/claude/skills/react-best-practices/rules/bundle-preload.md +50 -0
- package/claude/skills/react-best-practices/rules/client-event-listeners.md +74 -0
- package/claude/skills/react-best-practices/rules/client-localstorage-schema.md +71 -0
- package/claude/skills/react-best-practices/rules/client-passive-event-listeners.md +48 -0
- package/claude/skills/react-best-practices/rules/client-swr-dedup.md +56 -0
- package/claude/skills/react-best-practices/rules/js-batch-dom-css.md +82 -0
- package/claude/skills/react-best-practices/rules/js-cache-function-results.md +80 -0
- package/claude/skills/react-best-practices/rules/js-cache-property-access.md +28 -0
- package/claude/skills/react-best-practices/rules/js-cache-storage.md +70 -0
- package/claude/skills/react-best-practices/rules/js-combine-iterations.md +32 -0
- package/claude/skills/react-best-practices/rules/js-early-exit.md +50 -0
- package/claude/skills/react-best-practices/rules/js-hoist-regexp.md +45 -0
- package/claude/skills/react-best-practices/rules/js-index-maps.md +37 -0
- package/claude/skills/react-best-practices/rules/js-length-check-first.md +49 -0
- package/claude/skills/react-best-practices/rules/js-min-max-loop.md +82 -0
- package/claude/skills/react-best-practices/rules/js-set-map-lookups.md +24 -0
- package/claude/skills/react-best-practices/rules/js-tosorted-immutable.md +57 -0
- package/claude/skills/react-best-practices/rules/rendering-activity.md +26 -0
- package/claude/skills/react-best-practices/rules/rendering-animate-svg-wrapper.md +47 -0
- package/claude/skills/react-best-practices/rules/rendering-conditional-render.md +40 -0
- package/claude/skills/react-best-practices/rules/rendering-content-visibility.md +38 -0
- package/claude/skills/react-best-practices/rules/rendering-hoist-jsx.md +46 -0
- package/claude/skills/react-best-practices/rules/rendering-hydration-no-flicker.md +82 -0
- package/claude/skills/react-best-practices/rules/rendering-svg-precision.md +28 -0
- package/claude/skills/react-best-practices/rules/rerender-defer-reads.md +39 -0
- package/claude/skills/react-best-practices/rules/rerender-dependencies.md +45 -0
- package/claude/skills/react-best-practices/rules/rerender-derived-state.md +29 -0
- package/claude/skills/react-best-practices/rules/rerender-functional-setstate.md +74 -0
- package/claude/skills/react-best-practices/rules/rerender-lazy-state-init.md +58 -0
- package/claude/skills/react-best-practices/rules/rerender-memo.md +44 -0
- package/claude/skills/react-best-practices/rules/rerender-transitions.md +40 -0
- package/claude/skills/react-best-practices/rules/server-after-nonblocking.md +73 -0
- package/claude/skills/react-best-practices/rules/server-cache-lru.md +41 -0
- package/claude/skills/react-best-practices/rules/server-cache-react.md +76 -0
- package/claude/skills/react-best-practices/rules/server-parallel-fetching.md +83 -0
- package/claude/skills/react-best-practices/rules/server-serialization.md +38 -0
- package/claude/skills/react-patterns/SKILL.md +688 -0
- package/claude/skills/registry-system/SKILL.md +331 -0
- package/claude/skills/scheduled-actions/SKILL.md +671 -0
- package/claude/skills/scope-enforcement/SKILL.md +542 -0
- package/claude/skills/scope-enforcement/scripts/validate-scope.py +357 -0
- package/claude/skills/server-actions/SKILL.md +493 -0
- package/claude/skills/service-layer/SKILL.md +587 -0
- package/claude/skills/session-management/SKILL.md +266 -0
- package/claude/skills/session-management/scripts/create-session.py +166 -0
- package/claude/skills/session-management/scripts/iteration-close.sh +105 -0
- package/claude/skills/session-management/scripts/iteration-init.sh +180 -0
- package/claude/skills/session-management/scripts/session-archive.sh +87 -0
- package/claude/skills/session-management/scripts/session-close.sh +133 -0
- package/claude/skills/session-management/scripts/session-init.sh +225 -0
- package/claude/skills/session-management/scripts/session-list.sh +163 -0
- package/claude/skills/session-management/scripts/split-plan.sh +116 -0
- package/claude/skills/shadcn-components/SKILL.md +586 -0
- package/claude/skills/shadcn-theming/SKILL.md +446 -0
- package/claude/skills/suspense-loading/SKILL.md +280 -0
- package/claude/skills/tailwind-theming/SKILL.md +507 -0
- package/claude/skills/tanstack-query/SKILL.md +608 -0
- package/claude/skills/test-coverage/SKILL.md +239 -0
- package/claude/skills/web-design-guidelines/SKILL.md +39 -0
- package/claude/skills/zod-validation/SKILL.md +537 -0
- package/claude/templates/blocks/progress.md +86 -0
- package/claude/templates/iteration/changes.md +61 -0
- package/claude/templates/iteration/progress.md +55 -0
- package/claude/templates/log.md +31 -0
- package/claude/templates/story/context.md +77 -0
- package/claude/templates/story/pendings.md +37 -0
- package/claude/templates/story/plan.md +299 -0
- package/claude/templates/story/requirements.md +109 -0
- package/claude/templates/story/scope.json +10 -0
- package/claude/templates/story/tests.md +91 -0
- package/claude/templates/task/progress.md +58 -0
- package/claude/templates/task/requirements.md +54 -0
- package/claude/workflows/README.md +154 -0
- package/claude/workflows/blocks.md +614 -0
- package/claude/workflows/story.md +1207 -0
- package/claude/workflows/task.md +927 -0
- package/claude/workflows/tweak.md +527 -0
- package/cursor/.gitkeep +0 -0
- package/package.json +35 -0
- package/scripts/postinstall.mjs +198 -0
- package/scripts/setup.mjs +282 -0
- package/scripts/sync.mjs +209 -0
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: registry-system
|
|
3
|
+
description: |
|
|
4
|
+
Auto-generated registry system for this Next.js application.
|
|
5
|
+
Covers Data-Only pattern, zero dynamic imports policy, registry structure, and rebuild process.
|
|
6
|
+
Use this skill when working with registries or understanding import patterns.
|
|
7
|
+
allowed-tools: Read, Glob, Grep
|
|
8
|
+
version: 1.0.0
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Registry System Skill
|
|
12
|
+
|
|
13
|
+
Patterns for working with the auto-generated registry system that provides O(1) lookups for blocks, entities, themes, and more.
|
|
14
|
+
|
|
15
|
+
## Architecture Overview
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
REGISTRY SYSTEM (Pre-built at build time):
|
|
19
|
+
|
|
20
|
+
core/lib/registries/
|
|
21
|
+
├── block-registry.ts # BLOCK_REGISTRY - Page builder blocks
|
|
22
|
+
├── entity-registry.ts # ENTITY_REGISTRY - Entity configurations
|
|
23
|
+
├── entity-registry.client.ts # Client-safe entity registry
|
|
24
|
+
├── theme-registry.ts # THEME_REGISTRY - Theme configurations
|
|
25
|
+
├── plugin-registry.ts # PLUGIN_REGISTRY - Plugin configurations
|
|
26
|
+
├── namespace-registry.ts # NAMESPACE_REGISTRY - Route namespaces
|
|
27
|
+
├── scope-registry.ts # SCOPE_REGISTRY - API scopes
|
|
28
|
+
├── route-handlers.ts # ROUTE_HANDLERS - API route handlers
|
|
29
|
+
├── middleware-registry.ts # MIDDLEWARE_REGISTRY - Middleware configs
|
|
30
|
+
├── permissions-registry.ts # PERMISSIONS_REGISTRY - Permission matrix
|
|
31
|
+
├── billing-registry.ts # BILLING_REGISTRY - Plans and billing
|
|
32
|
+
├── translation-registry.ts # TRANSLATION_REGISTRY - i18n configs
|
|
33
|
+
├── testing-registry.ts # TESTING_REGISTRY - Test fixtures
|
|
34
|
+
├── docs-registry.ts # DOCS_REGISTRY - Documentation index
|
|
35
|
+
└── index.ts # Unified exports
|
|
36
|
+
|
|
37
|
+
Build script: node core/scripts/build/registry.mjs
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
> **📍 Context-Aware Paths:** Registries are auto-generated from core + theme. In consumer projects,
|
|
41
|
+
> theme configs go in `contents/themes/{theme}/config/`. Core registries are read-only.
|
|
42
|
+
> See `core-theme-responsibilities` skill for complete rules.
|
|
43
|
+
|
|
44
|
+
## When to Use This Skill
|
|
45
|
+
|
|
46
|
+
- Understanding registry patterns
|
|
47
|
+
- Importing from registries correctly
|
|
48
|
+
- Debugging registry generation issues
|
|
49
|
+
- Working with entity, block, or theme configurations
|
|
50
|
+
- Avoiding dynamic import violations
|
|
51
|
+
|
|
52
|
+
## Key Concepts
|
|
53
|
+
|
|
54
|
+
### Data-Only Pattern
|
|
55
|
+
|
|
56
|
+
```
|
|
57
|
+
Registries = Data (pre-computed, static)
|
|
58
|
+
Services = Logic (methods that use registries)
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
**Registries provide:**
|
|
62
|
+
- O(1) lookups by key
|
|
63
|
+
- Type-safe TypeScript interfaces
|
|
64
|
+
- Pre-computed at build time
|
|
65
|
+
- Zero runtime I/O
|
|
66
|
+
|
|
67
|
+
**Services provide:**
|
|
68
|
+
- Business logic methods
|
|
69
|
+
- Filtering and querying
|
|
70
|
+
- Validation and transformation
|
|
71
|
+
|
|
72
|
+
### Performance Impact
|
|
73
|
+
|
|
74
|
+
| Approach | Time | Notes |
|
|
75
|
+
|----------|------|-------|
|
|
76
|
+
| Dynamic Import | ~140ms | Per operation, I/O bound |
|
|
77
|
+
| Static Registry | ~6ms | O(1) lookup |
|
|
78
|
+
| **Improvement** | **~17,255x** | Build-time vs runtime |
|
|
79
|
+
|
|
80
|
+
## Import Patterns
|
|
81
|
+
|
|
82
|
+
### Correct Usage
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// ✅ CORRECT - Import from registries
|
|
86
|
+
import { BLOCK_REGISTRY } from '@/core/lib/registries/block-registry'
|
|
87
|
+
import { ENTITY_REGISTRY } from '@/core/lib/registries/entity-registry'
|
|
88
|
+
import { THEME_REGISTRY } from '@/core/lib/registries/theme-registry'
|
|
89
|
+
|
|
90
|
+
// Access by key
|
|
91
|
+
const heroBlock = BLOCK_REGISTRY['hero']
|
|
92
|
+
const customerEntity = ENTITY_REGISTRY['customers']
|
|
93
|
+
|
|
94
|
+
// ✅ CORRECT - Use services for logic
|
|
95
|
+
import { BlockService } from '@/core/lib/services/block.service'
|
|
96
|
+
import { EntityTypeService } from '@/core/lib/services/entity-type.service'
|
|
97
|
+
|
|
98
|
+
const heroConfig = BlockService.getBySlug('hero')
|
|
99
|
+
const allEntities = EntityTypeService.getAll()
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Forbidden Patterns
|
|
103
|
+
|
|
104
|
+
```typescript
|
|
105
|
+
// ❌ FORBIDDEN - Direct imports from @/contents
|
|
106
|
+
import { hero } from '@/contents/themes/default/blocks/hero'
|
|
107
|
+
import { customerEntityConfig } from '@/contents/themes/default/entities/customers'
|
|
108
|
+
import * as theme from '@/contents/themes/default'
|
|
109
|
+
|
|
110
|
+
// ❌ FORBIDDEN - Dynamic imports from @/contents
|
|
111
|
+
const module = await import('@/contents/themes/default/blocks/hero')
|
|
112
|
+
const config = await import(`@/contents/themes/${themeName}/config`)
|
|
113
|
+
|
|
114
|
+
// ❌ FORBIDDEN - Dynamic registry imports
|
|
115
|
+
const { ENTITY_REGISTRY } = await import('@/core/lib/registries/entity-registry')
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Available Registries
|
|
119
|
+
|
|
120
|
+
| Registry | Key Type | Value Type | Purpose |
|
|
121
|
+
|----------|----------|------------|---------|
|
|
122
|
+
| `BLOCK_REGISTRY` | slug | `BlockConfig` | Page builder blocks |
|
|
123
|
+
| `ENTITY_REGISTRY` | slug | `EntityRegistryEntry` | Entity configurations |
|
|
124
|
+
| `THEME_REGISTRY` | name | `ThemeConfig` | Theme settings |
|
|
125
|
+
| `PLUGIN_REGISTRY` | name | `PluginConfig` | Plugin configurations |
|
|
126
|
+
| `NAMESPACE_REGISTRY` | namespace | `NamespaceConfig` | Route namespaces |
|
|
127
|
+
| `SCOPE_REGISTRY` | scope | `ScopeConfig` | API permission scopes |
|
|
128
|
+
| `PERMISSIONS_REGISTRY` | permission | `PermissionConfig` | Permission definitions |
|
|
129
|
+
| `BILLING_REGISTRY` | planSlug | `PlanConfig` | Billing plans |
|
|
130
|
+
| `MIDDLEWARE_REGISTRY` | name | `MiddlewareConfig` | Route middlewares |
|
|
131
|
+
| `ROUTE_HANDLERS` | path | `RouteHandler` | API route handlers |
|
|
132
|
+
|
|
133
|
+
## Registry Structure
|
|
134
|
+
|
|
135
|
+
### Typical Registry File
|
|
136
|
+
|
|
137
|
+
```typescript
|
|
138
|
+
/**
|
|
139
|
+
* Auto-generated Entity Registry
|
|
140
|
+
* Generated at: 2025-12-30T21:56:23.717Z
|
|
141
|
+
* Entities discovered: 4
|
|
142
|
+
* DO NOT EDIT - This file is auto-generated by scripts/build-registry.mjs
|
|
143
|
+
*/
|
|
144
|
+
|
|
145
|
+
// 1. Static imports (generated)
|
|
146
|
+
import { customerEntityConfig } from '@/contents/themes/default/entities/customers/customers.config'
|
|
147
|
+
import { taskEntityConfig } from '@/contents/themes/default/entities/tasks/tasks.config'
|
|
148
|
+
|
|
149
|
+
// 2. TypeScript interface
|
|
150
|
+
export interface EntityRegistryEntry {
|
|
151
|
+
name: string
|
|
152
|
+
config: EntityConfig
|
|
153
|
+
tableName?: string
|
|
154
|
+
relativePath: string
|
|
155
|
+
depth: number
|
|
156
|
+
parent: string | null
|
|
157
|
+
children: string[]
|
|
158
|
+
source: 'core' | 'theme' | 'plugin'
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
// 3. Main registry object
|
|
162
|
+
export const ENTITY_REGISTRY: Record<string, EntityRegistryEntry> = {
|
|
163
|
+
'customers': {
|
|
164
|
+
name: 'customers',
|
|
165
|
+
config: customerEntityConfig,
|
|
166
|
+
tableName: 'customers',
|
|
167
|
+
relativePath: 'customers',
|
|
168
|
+
depth: 0,
|
|
169
|
+
parent: null,
|
|
170
|
+
children: [],
|
|
171
|
+
source: 'theme'
|
|
172
|
+
},
|
|
173
|
+
// ... more entries
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
// 4. Type export
|
|
177
|
+
export type EntityName = keyof typeof ENTITY_REGISTRY
|
|
178
|
+
|
|
179
|
+
// 5. Metadata
|
|
180
|
+
export const ENTITY_METADATA = {
|
|
181
|
+
totalEntities: 4,
|
|
182
|
+
generatedAt: '2025-12-30T21:56:23.717Z',
|
|
183
|
+
entities: ['customers', 'pages', 'posts', 'tasks']
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Rebuild Command
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# One-time build (default)
|
|
191
|
+
node core/scripts/build/registry.mjs
|
|
192
|
+
|
|
193
|
+
# Watch mode (auto-rebuild on changes)
|
|
194
|
+
node core/scripts/build/registry.mjs --watch
|
|
195
|
+
|
|
196
|
+
# Build with verbose output
|
|
197
|
+
node core/scripts/build/registry.mjs --verbose
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
**When to rebuild:**
|
|
201
|
+
- After adding/removing entities
|
|
202
|
+
- After adding/removing blocks
|
|
203
|
+
- After modifying entity configs
|
|
204
|
+
- After changing theme configurations
|
|
205
|
+
- After adding/removing plugins
|
|
206
|
+
|
|
207
|
+
## Allowed Exceptions
|
|
208
|
+
|
|
209
|
+
### 1. i18n/Translations (Lazy-load per locale)
|
|
210
|
+
```typescript
|
|
211
|
+
const messages = await import(`@/core/messages/${locale}/${namespace}.json`)
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
### 2. React Code-Splitting (>100KB components)
|
|
215
|
+
```typescript
|
|
216
|
+
const HeavyChart = lazy(() => import('./HeavyChart'))
|
|
217
|
+
```
|
|
218
|
+
|
|
219
|
+
### 3. Type-Only Imports (Eliminated at compile)
|
|
220
|
+
```typescript
|
|
221
|
+
export type Messages = typeof import('./es/index.ts').default
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
### 4. Build Scripts Only (Development)
|
|
225
|
+
```typescript
|
|
226
|
+
// core/scripts/build-theme.ts
|
|
227
|
+
const config = await import(`./${themeName}/theme.config`)
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
### 5. Development Tools (NODE_ENV gated)
|
|
231
|
+
```typescript
|
|
232
|
+
if (process.env.NODE_ENV === 'development') {
|
|
233
|
+
const benchmark = await import('./dev-tools/benchmark')
|
|
234
|
+
}
|
|
235
|
+
```
|
|
236
|
+
|
|
237
|
+
### 6. Heavy User-Triggered Libraries (>500KB)
|
|
238
|
+
```typescript
|
|
239
|
+
export async function extractTextFromPDF(file: File) {
|
|
240
|
+
const pdfjsLib = await import('pdfjs-dist') // ~2MB, only when needed
|
|
241
|
+
}
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
## Using Services with Registries
|
|
245
|
+
|
|
246
|
+
### BlockService
|
|
247
|
+
|
|
248
|
+
```typescript
|
|
249
|
+
import { BlockService } from '@/core/lib/services/block.service'
|
|
250
|
+
|
|
251
|
+
// Get block by slug
|
|
252
|
+
const hero = BlockService.getBySlug('hero')
|
|
253
|
+
|
|
254
|
+
// Get all blocks
|
|
255
|
+
const blocks = BlockService.getAll()
|
|
256
|
+
|
|
257
|
+
// Get blocks by category
|
|
258
|
+
const heroBlocks = BlockService.getByCategory('hero')
|
|
259
|
+
|
|
260
|
+
// Get blocks by scope
|
|
261
|
+
const pageBlocks = BlockService.getByScope('pages')
|
|
262
|
+
```
|
|
263
|
+
|
|
264
|
+
### EntityTypeService
|
|
265
|
+
|
|
266
|
+
```typescript
|
|
267
|
+
import { EntityTypeService } from '@/core/lib/services/entity-type.service'
|
|
268
|
+
|
|
269
|
+
// Get entity config
|
|
270
|
+
const customerConfig = EntityTypeService.getBySlug('customers')
|
|
271
|
+
|
|
272
|
+
// Get all entities
|
|
273
|
+
const entities = EntityTypeService.getAll()
|
|
274
|
+
|
|
275
|
+
// Check if entity exists
|
|
276
|
+
const exists = EntityTypeService.exists('customers')
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
## Anti-Patterns
|
|
280
|
+
|
|
281
|
+
```typescript
|
|
282
|
+
// NEVER: Import directly from contents
|
|
283
|
+
import { hero } from '@/contents/themes/default/blocks/hero'
|
|
284
|
+
|
|
285
|
+
// CORRECT: Use registry
|
|
286
|
+
import { BLOCK_REGISTRY } from '@/core/lib/registries/block-registry'
|
|
287
|
+
const hero = BLOCK_REGISTRY['hero']
|
|
288
|
+
|
|
289
|
+
// NEVER: Dynamic import from contents
|
|
290
|
+
const block = await import(`@/contents/themes/${theme}/blocks/${slug}`)
|
|
291
|
+
|
|
292
|
+
// CORRECT: Use service
|
|
293
|
+
import { BlockService } from '@/core/lib/services/block.service'
|
|
294
|
+
const block = BlockService.getBySlug(slug)
|
|
295
|
+
|
|
296
|
+
// NEVER: Modify registry files manually
|
|
297
|
+
// Registry files have "DO NOT EDIT" header
|
|
298
|
+
|
|
299
|
+
// CORRECT: Modify source files and rebuild
|
|
300
|
+
// node core/scripts/build/registry.mjs
|
|
301
|
+
|
|
302
|
+
// NEVER: Store logic in registries
|
|
303
|
+
export const ENTITY_REGISTRY = {
|
|
304
|
+
customers: {
|
|
305
|
+
validate: (data) => { ... } // Logic doesn't belong here!
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// CORRECT: Logic goes in services
|
|
310
|
+
export class CustomerService {
|
|
311
|
+
static validate(data: CreateCustomer) { ... }
|
|
312
|
+
}
|
|
313
|
+
```
|
|
314
|
+
|
|
315
|
+
## Checklist
|
|
316
|
+
|
|
317
|
+
Before working with registries:
|
|
318
|
+
|
|
319
|
+
- [ ] Importing from `@/core/lib/registries/` not `@/contents/`
|
|
320
|
+
- [ ] Using services for logic, registries for data
|
|
321
|
+
- [ ] Rebuilding after config changes (`node core/scripts/build/registry.mjs`)
|
|
322
|
+
- [ ] Not modifying auto-generated registry files
|
|
323
|
+
- [ ] Using typed registry keys (e.g., `ENTITY_REGISTRY['customers']`)
|
|
324
|
+
- [ ] Checking registry exists before accessing (or using services)
|
|
325
|
+
|
|
326
|
+
## Related Skills
|
|
327
|
+
|
|
328
|
+
- **`monorepo-architecture`** - Package hierarchy, dependency rules, Model B distribution
|
|
329
|
+
- `entity-system` - Entity configuration patterns
|
|
330
|
+
- `page-builder-blocks` - Block configuration patterns
|
|
331
|
+
- `service-layer` - Service patterns with registries
|