@claudetools/tools 0.8.10 → 0.9.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.
Files changed (76) hide show
  1. package/dist/codedna/generators/astro.d.ts +18 -0
  2. package/dist/codedna/generators/astro.js +91 -0
  3. package/dist/codedna/generators/authjs.d.ts +18 -0
  4. package/dist/codedna/generators/authjs.js +68 -0
  5. package/dist/codedna/generators/better-auth.d.ts +18 -0
  6. package/dist/codedna/generators/better-auth.js +62 -0
  7. package/dist/codedna/generators/drizzle-orm.d.ts +18 -0
  8. package/dist/codedna/generators/drizzle-orm.js +65 -0
  9. package/dist/codedna/generators/elysia-api.d.ts +12 -0
  10. package/dist/codedna/generators/elysia-api.js +64 -0
  11. package/dist/codedna/generators/hono-api.d.ts +12 -0
  12. package/dist/codedna/generators/hono-api.js +64 -0
  13. package/dist/codedna/generators/lucia-auth.d.ts +18 -0
  14. package/dist/codedna/generators/lucia-auth.js +69 -0
  15. package/dist/codedna/generators/prisma.d.ts +18 -0
  16. package/dist/codedna/generators/prisma.js +64 -0
  17. package/dist/codedna/generators/react-router-v7.d.ts +18 -0
  18. package/dist/codedna/generators/react-router-v7.js +77 -0
  19. package/dist/codedna/generators/react19-shadcn.d.ts +21 -0
  20. package/dist/codedna/generators/react19-shadcn.js +367 -0
  21. package/dist/codedna/generators/sveltekit.d.ts +18 -0
  22. package/dist/codedna/generators/sveltekit.js +73 -0
  23. package/dist/codedna/generators/tanstack-start-drizzle.d.ts +92 -0
  24. package/dist/codedna/generators/tanstack-start-drizzle.js +824 -0
  25. package/dist/codedna/generators/trpc-api.d.ts +12 -0
  26. package/dist/codedna/generators/trpc-api.js +64 -0
  27. package/dist/codedna/index.d.ts +31 -0
  28. package/dist/codedna/index.js +39 -0
  29. package/dist/codedna/kappa-api-generator.d.ts +89 -0
  30. package/dist/codedna/kappa-api-generator.js +493 -0
  31. package/dist/codedna/kappa-ast.d.ts +552 -0
  32. package/dist/codedna/kappa-ast.js +141 -0
  33. package/dist/codedna/kappa-cli.d.ts +2 -0
  34. package/dist/codedna/kappa-cli.js +302 -0
  35. package/dist/codedna/kappa-component-generator.d.ts +47 -0
  36. package/dist/codedna/kappa-component-generator.js +295 -0
  37. package/dist/codedna/kappa-design-generator.d.ts +52 -0
  38. package/dist/codedna/kappa-design-generator.js +365 -0
  39. package/dist/codedna/kappa-drizzle-generator.d.ts +45 -0
  40. package/dist/codedna/kappa-drizzle-generator.js +355 -0
  41. package/dist/codedna/kappa-form-generator.d.ts +51 -0
  42. package/dist/codedna/kappa-form-generator.js +319 -0
  43. package/dist/codedna/kappa-lexer.d.ts +268 -0
  44. package/dist/codedna/kappa-lexer.js +757 -0
  45. package/dist/codedna/kappa-page-generator.d.ts +57 -0
  46. package/dist/codedna/kappa-page-generator.js +338 -0
  47. package/dist/codedna/kappa-parser.d.ts +261 -0
  48. package/dist/codedna/kappa-parser.js +2547 -0
  49. package/dist/codedna/kappa-provenance.d.ts +101 -0
  50. package/dist/codedna/kappa-provenance.js +199 -0
  51. package/dist/codedna/kappa-types-generator.d.ts +37 -0
  52. package/dist/codedna/kappa-types-generator.js +159 -0
  53. package/dist/codedna/kappa-validator.d.ts +86 -0
  54. package/dist/codedna/kappa-validator.js +638 -0
  55. package/dist/codedna/kappa-zod-generator.d.ts +32 -0
  56. package/dist/codedna/kappa-zod-generator.js +216 -0
  57. package/dist/handlers/codedna-handlers.d.ts +1 -1
  58. package/dist/handlers/kappa-handlers.d.ts +116 -0
  59. package/dist/handlers/kappa-handlers.js +465 -0
  60. package/dist/handlers/tool-handlers.js +121 -0
  61. package/dist/templates/claude-md.d.ts +1 -1
  62. package/dist/templates/claude-md.js +166 -9
  63. package/dist/tools.js +199 -0
  64. package/docs/research/2026-01-02-codedna-il-specification.md +639 -0
  65. package/docs/research/2026-01-02-codedna-v2-research.md +943 -0
  66. package/docs/research/2026-01-02-computation-foundations.md +564 -0
  67. package/docs/research/2026-01-02-hardware-description.md +814 -0
  68. package/docs/research/2026-01-02-kappa-specification.md +697 -0
  69. package/docs/research/2026-01-02-kappa-tanstack-example.md +527 -0
  70. package/docs/research/2026-01-02-kappa-v2-synthesis.md +406 -0
  71. package/docs/research/2026-01-02-kappa-v2.5-specification.md +1218 -0
  72. package/docs/research/2026-01-02-kappa-v3-specification.md +1864 -0
  73. package/docs/research/2026-01-02-kappa-whitepaper.md +662 -0
  74. package/docs/research/2026-01-02-logic-constraint.md +731 -0
  75. package/docs/research/2026-01-02-quantum-computation.md +635 -0
  76. package/package.json +4 -2
@@ -0,0 +1,757 @@
1
+ // =============================================================================
2
+ // Kappa v2.5 Lexer
3
+ // =============================================================================
4
+ //
5
+ // Chevrotain-based lexer for tokenizing Kappa specification language.
6
+ // Uses word boundary assertions to prevent partial matching issues.
7
+ //
8
+ // Reference: docs/research/2026-01-02-kappa-v2.5-specification.md
9
+ //
10
+ import { createToken, Lexer } from 'chevrotain';
11
+ // =============================================================================
12
+ // Token Categories
13
+ // =============================================================================
14
+ // Whitespace and comments (skipped)
15
+ export const WhiteSpace = createToken({
16
+ name: 'WhiteSpace',
17
+ pattern: /\s+/,
18
+ group: Lexer.SKIPPED,
19
+ });
20
+ export const LineComment = createToken({
21
+ name: 'LineComment',
22
+ // Negative lookahead: don't match if followed by hex color (6 or 8 hex digits)
23
+ pattern: /#(?![0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?\b)[^\n\r]*/,
24
+ group: Lexer.SKIPPED,
25
+ });
26
+ // =============================================================================
27
+ // Literals (must come before keywords)
28
+ // =============================================================================
29
+ // String literal (double-quoted)
30
+ export const StringLiteral = createToken({
31
+ name: 'StringLiteral',
32
+ pattern: /"(?:[^"\\]|\\.)*"/,
33
+ });
34
+ // Hex color literal
35
+ export const HexColor = createToken({
36
+ name: 'HexColor',
37
+ pattern: /#[0-9a-fA-F]{6}(?:[0-9a-fA-F]{2})?/,
38
+ });
39
+ // CSS function (e.g., cubic-bezier(...))
40
+ export const CSSFunctionLiteral = createToken({
41
+ name: 'CSSFunctionLiteral',
42
+ pattern: /cubic-bezier\([^)]+\)/,
43
+ });
44
+ // Duration literal (e.g., 7d, 1h, 30m, 15s)
45
+ export const DurationLiteral = createToken({
46
+ name: 'DurationLiteral',
47
+ pattern: /\d+[dhms]\b/,
48
+ });
49
+ // Size literal (e.g., 64mb, 1gb)
50
+ export const SizeLiteral = createToken({
51
+ name: 'SizeLiteral',
52
+ pattern: /\d+(?:kb|mb|gb)\b/i,
53
+ });
54
+ // Rate limit literal (e.g., 10/minute, 100/hour)
55
+ export const RateLimitLiteral = createToken({
56
+ name: 'RateLimitLiteral',
57
+ pattern: /\d+\/(?:second|minute|hour|day)\b/,
58
+ });
59
+ // CSS unit value (e.g., 0.5rem, 4px)
60
+ export const CSSValueLiteral = createToken({
61
+ name: 'CSSValueLiteral',
62
+ pattern: /\d+(?:\.\d+)?(?:rem|em|px|%)/,
63
+ });
64
+ // Decimal number
65
+ export const DecimalLiteral = createToken({
66
+ name: 'DecimalLiteral',
67
+ pattern: /\d+\.\d+/,
68
+ });
69
+ // Integer number
70
+ export const IntegerLiteral = createToken({
71
+ name: 'IntegerLiteral',
72
+ pattern: /\d+/,
73
+ });
74
+ // =============================================================================
75
+ // Operators (before keywords)
76
+ // =============================================================================
77
+ // Effect arrow: -[DB, Auth]->
78
+ export const EffectArrowStart = createToken({
79
+ name: 'EffectArrowStart',
80
+ pattern: /-\[/,
81
+ });
82
+ export const EffectArrowEnd = createToken({
83
+ name: 'EffectArrowEnd',
84
+ pattern: /\]->/,
85
+ });
86
+ // Simple arrow: ->
87
+ export const Arrow = createToken({
88
+ name: 'Arrow',
89
+ pattern: /->/,
90
+ });
91
+ // Range operator: ..
92
+ export const Range = createToken({
93
+ name: 'Range',
94
+ pattern: /\.\./,
95
+ });
96
+ // Alias for range in constraints
97
+ export const DotDot = Range;
98
+ // =============================================================================
99
+ // Multi-word Keywords (before their shorter prefixes)
100
+ // =============================================================================
101
+ export const TanstackStart = createToken({ name: 'TanstackStart', pattern: /tanstack-start\b/ });
102
+ export const TailwindOnly = createToken({ name: 'TailwindOnly', pattern: /tailwind-only\b/ });
103
+ export const DefaultComposition = createToken({ name: 'DefaultComposition', pattern: /default_composition\b/ });
104
+ export const FontFamily = createToken({ name: 'FontFamily', pattern: /font_family\b/ });
105
+ export const FontMono = createToken({ name: 'FontMono', pattern: /font_mono\b/ });
106
+ export const HasMany = createToken({ name: 'HasMany', pattern: /has_many\b/ });
107
+ export const HasOne = createToken({ name: 'HasOne', pattern: /has_one\b/ });
108
+ export const BelongsTo = createToken({ name: 'BelongsTo', pattern: /belongs_to\b/ });
109
+ export const ManyToMany = createToken({ name: 'ManyToMany', pattern: /many_to_many\b/ });
110
+ export const OnCreate = createToken({ name: 'OnCreate', pattern: /on_create\b/ });
111
+ export const OnUpdate = createToken({ name: 'OnUpdate', pattern: /on_update\b/ });
112
+ export const OnDelete = createToken({ name: 'OnDelete', pattern: /on_delete\b/ });
113
+ export const OnAbandon = createToken({ name: 'OnAbandon', pattern: /on_abandon\b/ });
114
+ export const OnSuccess = createToken({ name: 'OnSuccess', pattern: /on_success\b/ });
115
+ export const OnError = createToken({ name: 'OnError', pattern: /on_error\b/ });
116
+ export const RateLimit = createToken({ name: 'RateLimit', pattern: /rate_limit\b/ });
117
+ export const WaitFor = createToken({ name: 'WaitFor', pattern: /wait_for\b/ });
118
+ export const SkipIf = createToken({ name: 'SkipIf', pattern: /skip_if\b/ });
119
+ export const SendEmail = createToken({ name: 'SendEmail', pattern: /send_email\b/ });
120
+ export const LogAudit = createToken({ name: 'LogAudit', pattern: /log_audit\b/ });
121
+ export const TransferOwnership = createToken({ name: 'TransferOwnership', pattern: /transfer_ownership\b/ });
122
+ export const RequireReverification = createToken({ name: 'RequireReverification', pattern: /require_reverification\b/ });
123
+ // =============================================================================
124
+ // Keywords with longer variants (longer first)
125
+ // =============================================================================
126
+ // Hash group
127
+ export const Hashed = createToken({ name: 'Hashed', pattern: /hashed\b/ });
128
+ export const Hash = createToken({ name: 'Hash', pattern: /hash\b/ });
129
+ // Can group
130
+ export const Cannot = createToken({ name: 'Cannot', pattern: /cannot\b/ });
131
+ export const Can = createToken({ name: 'Can', pattern: /can\b/ });
132
+ // As group
133
+ export const Astro = createToken({ name: 'Astro', pattern: /astro\b/ });
134
+ export const As = createToken({ name: 'As', pattern: /as\b/ });
135
+ // Time group
136
+ export const Timestamp = createToken({ name: 'Timestamp', pattern: /timestamp\b/ });
137
+ export const Timeout = createToken({ name: 'Timeout', pattern: /timeout\b/ });
138
+ export const Time = createToken({ name: 'Time', pattern: /time\b/ });
139
+ // Check group
140
+ export const Checkbox = createToken({ name: 'Checkbox', pattern: /checkbox\b/ });
141
+ export const Check = createToken({ name: 'Check', pattern: /check\b/ });
142
+ // Action group
143
+ export const Actions = createToken({ name: 'Actions', pattern: /actions\b/ });
144
+ export const Action = createToken({ name: 'Action', pattern: /action\b/ });
145
+ // Next group
146
+ export const Nextjs = createToken({ name: 'Nextjs', pattern: /next\b/ }); // Note: 'next' matches Next.js stack
147
+ export const Next = createToken({ name: 'Next', pattern: /next\b/ });
148
+ // Actually these would conflict - let's use different approach
149
+ // Load group
150
+ export const Loading = createToken({ name: 'Loading', pattern: /loading\b/ });
151
+ export const Load = createToken({ name: 'Load', pattern: /load\b/ });
152
+ // Text group
153
+ export const Textarea = createToken({ name: 'Textarea', pattern: /textarea\b/ });
154
+ export const Text = createToken({ name: 'Text', pattern: /text\b/ });
155
+ // Dark group
156
+ export const Darken = createToken({ name: 'Darken', pattern: /darken\b/ });
157
+ export const Dark = createToken({ name: 'Dark', pattern: /dark\b/ });
158
+ // =============================================================================
159
+ // Block Keywords
160
+ // =============================================================================
161
+ export const Project = createToken({ name: 'Project', pattern: /project\b/ });
162
+ export const Entity = createToken({ name: 'Entity', pattern: /entity\b/ });
163
+ export const Auth = createToken({ name: 'Auth', pattern: /auth\b/ });
164
+ export const Api = createToken({ name: 'Api', pattern: /api\b/ });
165
+ export const Journey = createToken({ name: 'Journey', pattern: /journey\b/ });
166
+ export const Page = createToken({ name: 'Page', pattern: /page\b/ });
167
+ export const Component = createToken({ name: 'Component', pattern: /component\b/ });
168
+ export const Form = createToken({ name: 'Form', pattern: /form\b/ });
169
+ export const Design = createToken({ name: 'Design', pattern: /design\b/ });
170
+ // =============================================================================
171
+ // Auth Keywords
172
+ // =============================================================================
173
+ export const Jwt = createToken({ name: 'Jwt', pattern: /jwt\b/ });
174
+ export const Session = createToken({ name: 'Session', pattern: /session\b/ });
175
+ export const Oauth = createToken({ name: 'Oauth', pattern: /oauth\b/ });
176
+ export const Secret = createToken({ name: 'Secret', pattern: /secret\b/ });
177
+ export const Issuer = createToken({ name: 'Issuer', pattern: /issuer\b/ });
178
+ export const Audience = createToken({ name: 'Audience', pattern: /audience\b/ });
179
+ export const Expires = createToken({ name: 'Expires', pattern: /expires\b/ });
180
+ export const Refresh = createToken({ name: 'Refresh', pattern: /refresh\b/ });
181
+ export const Argon2id = createToken({ name: 'Argon2id', pattern: /argon2id\b/ });
182
+ export const Bcrypt = createToken({ name: 'Bcrypt', pattern: /bcrypt\b/ });
183
+ export const Memory = createToken({ name: 'Memory', pattern: /memory\b/ });
184
+ export const Iterations = createToken({ name: 'Iterations', pattern: /iterations\b/ });
185
+ export const Parallelism = createToken({ name: 'Parallelism', pattern: /parallelism\b/ });
186
+ export const Rounds = createToken({ name: 'Rounds', pattern: /rounds\b/ });
187
+ // =============================================================================
188
+ // Entity Keywords
189
+ // =============================================================================
190
+ export const Through = createToken({ name: 'Through', pattern: /through\b/ });
191
+ export const Cascade = createToken({ name: 'Cascade', pattern: /cascade\b/ });
192
+ export const Where = createToken({ name: 'Where', pattern: /where\b/ });
193
+ export const Unless = createToken({ name: 'Unless', pattern: /unless\b/ });
194
+ export const To = createToken({ name: 'To', pattern: /to\b/ });
195
+ export const Index = createToken({ name: 'Index', pattern: /index\b/ });
196
+ // =============================================================================
197
+ // Field Modifiers
198
+ // =============================================================================
199
+ export const Primary = createToken({ name: 'Primary', pattern: /primary\b/ });
200
+ export const Unique = createToken({ name: 'Unique', pattern: /unique\b/ });
201
+ export const Auto = createToken({ name: 'Auto', pattern: /auto\b/ });
202
+ export const Immutable = createToken({ name: 'Immutable', pattern: /immutable\b/ });
203
+ export const Internal = createToken({ name: 'Internal', pattern: /internal\b/ });
204
+ export const Optional = createToken({ name: 'Optional', pattern: /optional\b/ });
205
+ // =============================================================================
206
+ // Type Keywords
207
+ // =============================================================================
208
+ export const String = createToken({ name: 'String', pattern: /string\b/ });
209
+ export const Int = createToken({ name: 'Int', pattern: /int\b/ });
210
+ export const Float = createToken({ name: 'Float', pattern: /float\b/ });
211
+ export const Bool = createToken({ name: 'Bool', pattern: /bool\b/ });
212
+ export const Email = createToken({ name: 'Email', pattern: /email\b/ });
213
+ export const Url = createToken({ name: 'Url', pattern: /url\b/ });
214
+ export const Uuid = createToken({ name: 'Uuid', pattern: /uuid\b/ });
215
+ export const Phone = createToken({ name: 'Phone', pattern: /phone\b/ });
216
+ export const Slug = createToken({ name: 'Slug', pattern: /slug\b/ });
217
+ export const Markdown = createToken({ name: 'Markdown', pattern: /markdown\b/ });
218
+ export const Json = createToken({ name: 'Json', pattern: /json\b/ });
219
+ export const Date = createToken({ name: 'Date', pattern: /date\b/ });
220
+ export const Duration = createToken({ name: 'Duration', pattern: /duration\b/ });
221
+ export const Void = createToken({ name: 'Void', pattern: /void\b/ });
222
+ // =============================================================================
223
+ // API Keywords
224
+ // =============================================================================
225
+ export const Crud = createToken({ name: 'Crud', pattern: /crud\b/ });
226
+ export const Throws = createToken({ name: 'Throws', pattern: /throws\b/ });
227
+ export const Audit = createToken({ name: 'Audit', pattern: /audit\b/ });
228
+ export const Cache = createToken({ name: 'Cache', pattern: /cache\b/ });
229
+ export const Deprecated = createToken({ name: 'Deprecated', pattern: /deprecated\b/ });
230
+ export const Filter = createToken({ name: 'Filter', pattern: /filter\b/ });
231
+ export const Scope = createToken({ name: 'Scope', pattern: /scope\b/ });
232
+ export const Always = createToken({ name: 'Always', pattern: /always\b/ });
233
+ export const Never = createToken({ name: 'Never', pattern: /never\b/ });
234
+ // =============================================================================
235
+ // Effect Keywords (PascalCase - special handling)
236
+ // =============================================================================
237
+ export const DB = createToken({ name: 'DB', pattern: /DB\b/ });
238
+ export const AuthEffect = createToken({ name: 'AuthEffect', pattern: /Auth\b/ });
239
+ export const EmailEffect = createToken({ name: 'EmailEffect', pattern: /Email\b/ });
240
+ export const ErrorEffect = createToken({ name: 'ErrorEffect', pattern: /Error\b/ });
241
+ export const AuditEffect = createToken({ name: 'AuditEffect', pattern: /Audit\b/ });
242
+ export const Queue = createToken({ name: 'Queue', pattern: /Queue\b/ });
243
+ export const CacheEffect = createToken({ name: 'CacheEffect', pattern: /Cache\b/ });
244
+ export const External = createToken({ name: 'External', pattern: /External\b/ });
245
+ // =============================================================================
246
+ // Journey Keywords
247
+ // =============================================================================
248
+ export const Actor = createToken({ name: 'Actor', pattern: /actor\b/ });
249
+ export const Steps = createToken({ name: 'Steps', pattern: /steps\b/ });
250
+ export const Skippable = createToken({ name: 'Skippable', pattern: /skippable\b/ });
251
+ export const Complete = createToken({ name: 'Complete', pattern: /complete\b/ });
252
+ export const Track = createToken({ name: 'Track', pattern: /track\b/ });
253
+ export const Condition = createToken({ name: 'Condition', pattern: /condition\b/ });
254
+ // =============================================================================
255
+ // Page Keywords
256
+ // =============================================================================
257
+ export const Route = createToken({ name: 'Route', pattern: /route\b/ });
258
+ export const Guard = createToken({ name: 'Guard', pattern: /guard\b/ });
259
+ export const Layout = createToken({ name: 'Layout', pattern: /layout\b/ });
260
+ export const Title = createToken({ name: 'Title', pattern: /title\b/ });
261
+ export const Meta = createToken({ name: 'Meta', pattern: /meta\b/ });
262
+ export const Loader = createToken({ name: 'Loader', pattern: /loader\b/ });
263
+ // =============================================================================
264
+ // Component Keywords
265
+ // =============================================================================
266
+ export const Props = createToken({ name: 'Props', pattern: /props\b/ });
267
+ export const Structure = createToken({ name: 'Structure', pattern: /structure\b/ });
268
+ export const Variants = createToken({ name: 'Variants', pattern: /variants\b/ });
269
+ export const Compound = createToken({ name: 'Compound', pattern: /compound\b/ });
270
+ export const State = createToken({ name: 'State', pattern: /state\b/ });
271
+ export const Handlers = createToken({ name: 'Handlers', pattern: /handlers\b/ });
272
+ // =============================================================================
273
+ // Form Keywords
274
+ // =============================================================================
275
+ export const Fields = createToken({ name: 'Fields', pattern: /fields\b/ });
276
+ export const Submit = createToken({ name: 'Submit', pattern: /submit\b/ });
277
+ export const Label = createToken({ name: 'Label', pattern: /label\b/ });
278
+ export const Placeholder = createToken({ name: 'Placeholder', pattern: /placeholder\b/ });
279
+ export const Validation = createToken({ name: 'Validation', pattern: /validation\b/ });
280
+ export const Validate = createToken({ name: 'Validate', pattern: /validate\b/ });
281
+ export const Required = createToken({ name: 'Required', pattern: /required\b/ });
282
+ export const Options = createToken({ name: 'Options', pattern: /options\b/ });
283
+ export const From = createToken({ name: 'From', pattern: /from\b/ });
284
+ export const Button = createToken({ name: 'Button', pattern: /button\b/ });
285
+ export const Row = createToken({ name: 'Row', pattern: /row\b/ });
286
+ export const Columns = createToken({ name: 'Columns', pattern: /columns\b/ });
287
+ export const Rows = createToken({ name: 'Rows', pattern: /rows\b/ });
288
+ // Form field types
289
+ export const Password = createToken({ name: 'Password', pattern: /password\b/ });
290
+ export const Number = createToken({ name: 'Number', pattern: /number\b/ });
291
+ export const Select = createToken({ name: 'Select', pattern: /select\b/ });
292
+ export const Multiselect = createToken({ name: 'Multiselect', pattern: /multiselect\b/ });
293
+ export const Radio = createToken({ name: 'Radio', pattern: /radio\b/ });
294
+ export const File = createToken({ name: 'File', pattern: /file\b/ });
295
+ // =============================================================================
296
+ // Design Keywords
297
+ // =============================================================================
298
+ export const Colors = createToken({ name: 'Colors', pattern: /colors\b/ });
299
+ export const Typography = createToken({ name: 'Typography', pattern: /typography\b/ });
300
+ export const Scale = createToken({ name: 'Scale', pattern: /scale\b/ });
301
+ export const Weight = createToken({ name: 'Weight', pattern: /weight\b/ });
302
+ export const Spacing = createToken({ name: 'Spacing', pattern: /spacing\b/ });
303
+ export const Unit = createToken({ name: 'Unit', pattern: /unit\b/ });
304
+ export const Borders = createToken({ name: 'Borders', pattern: /borders\b/ });
305
+ export const Radius = createToken({ name: 'Radius', pattern: /radius\b/ });
306
+ export const Width = createToken({ name: 'Width', pattern: /width\b/ });
307
+ export const Color = createToken({ name: 'Color', pattern: /color\b/ });
308
+ export const Shadows = createToken({ name: 'Shadows', pattern: /shadows\b/ });
309
+ export const Motion = createToken({ name: 'Motion', pattern: /motion\b/ });
310
+ export const Easing = createToken({ name: 'Easing', pattern: /easing\b/ });
311
+ export const Lighten = createToken({ name: 'Lighten', pattern: /lighten\b/ });
312
+ export const Alpha = createToken({ name: 'Alpha', pattern: /alpha\b/ });
313
+ export const Animation = createToken({ name: 'Animation', pattern: /animation\b/ });
314
+ // =============================================================================
315
+ // Project Keywords
316
+ // =============================================================================
317
+ export const Version = createToken({ name: 'Version', pattern: /version\b/ });
318
+ export const Stack = createToken({ name: 'Stack', pattern: /stack\b/ });
319
+ export const Database = createToken({ name: 'Database', pattern: /database\b/ });
320
+ export const Ui = createToken({ name: 'Ui', pattern: /ui\b/ });
321
+ // Stack values
322
+ export const Remix = createToken({ name: 'Remix', pattern: /remix\b/ });
323
+ export const Sveltekit = createToken({ name: 'Sveltekit', pattern: /sveltekit\b/ });
324
+ export const Express = createToken({ name: 'Express', pattern: /express\b/ });
325
+ export const Hono = createToken({ name: 'Hono', pattern: /hono\b/ });
326
+ export const Elysia = createToken({ name: 'Elysia', pattern: /elysia\b/ });
327
+ // Database values
328
+ export const Postgres = createToken({ name: 'Postgres', pattern: /postgres\b/ });
329
+ export const Mysql = createToken({ name: 'Mysql', pattern: /mysql\b/ });
330
+ export const Sqlite = createToken({ name: 'Sqlite', pattern: /sqlite\b/ });
331
+ export const Turso = createToken({ name: 'Turso', pattern: /turso\b/ });
332
+ export const Mongodb = createToken({ name: 'Mongodb', pattern: /mongodb\b/ });
333
+ // UI values
334
+ export const Shadcn = createToken({ name: 'Shadcn', pattern: /shadcn\b/ });
335
+ export const Mui = createToken({ name: 'Mui', pattern: /mui\b/ });
336
+ export const Chakra = createToken({ name: 'Chakra', pattern: /chakra\b/ });
337
+ // =============================================================================
338
+ // Lifecycle Action Keywords
339
+ // =============================================================================
340
+ export const Enqueue = createToken({ name: 'Enqueue', pattern: /enqueue\b/ });
341
+ export const Anonymize = createToken({ name: 'Anonymize', pattern: /anonymize\b/ });
342
+ export const Template = createToken({ name: 'Template', pattern: /template\b/ });
343
+ export const Job = createToken({ name: 'Job', pattern: /job\b/ });
344
+ export const Notify = createToken({ name: 'Notify', pattern: /notify\b/ });
345
+ export const Webhook = createToken({ name: 'Webhook', pattern: /webhook\b/ });
346
+ // =============================================================================
347
+ // Refresh Strategy Values
348
+ // =============================================================================
349
+ export const Sliding = createToken({ name: 'Sliding', pattern: /sliding\b/ });
350
+ export const Fixed = createToken({ name: 'Fixed', pattern: /fixed\b/ });
351
+ export const None = createToken({ name: 'None', pattern: /none\b/ });
352
+ // =============================================================================
353
+ // Cascade Values
354
+ // =============================================================================
355
+ export const Delete = createToken({ name: 'Delete', pattern: /delete\b/ });
356
+ export const Nullify = createToken({ name: 'Nullify', pattern: /nullify\b/ });
357
+ export const Restrict = createToken({ name: 'Restrict', pattern: /restrict\b/ });
358
+ // =============================================================================
359
+ // Capability Actions
360
+ // =============================================================================
361
+ export const Create = createToken({ name: 'Create', pattern: /create\b/ });
362
+ export const Read = createToken({ name: 'Read', pattern: /read\b/ });
363
+ export const Update = createToken({ name: 'Update', pattern: /update\b/ });
364
+ export const Invite = createToken({ name: 'Invite', pattern: /invite\b/ });
365
+ export const List = createToken({ name: 'List', pattern: /list\b/ });
366
+ // =============================================================================
367
+ // Boolean Literals
368
+ // =============================================================================
369
+ export const True = createToken({ name: 'True', pattern: /true\b/ });
370
+ export const False = createToken({ name: 'False', pattern: /false\b/ });
371
+ // =============================================================================
372
+ // Env Function
373
+ // =============================================================================
374
+ export const Env = createToken({ name: 'Env', pattern: /env\b/ });
375
+ // =============================================================================
376
+ // Identifiers
377
+ // =============================================================================
378
+ // Pascal case identifier (for entity/type names)
379
+ export const PascalIdentifier = createToken({
380
+ name: 'PascalIdentifier',
381
+ pattern: /[A-Z][a-zA-Z0-9]*/,
382
+ });
383
+ // Camel/snake case identifier (for field names, etc.)
384
+ export const Identifier = createToken({
385
+ name: 'Identifier',
386
+ pattern: /[a-z_][a-zA-Z0-9_]*/,
387
+ });
388
+ // SCREAMING_SNAKE_CASE identifier (for environment variables, etc.)
389
+ // Must have 2+ uppercase letters OR contain underscore (to avoid matching single letters like U from User)
390
+ export const ConstantIdentifier = createToken({
391
+ name: 'ConstantIdentifier',
392
+ pattern: /([A-Z]{2,}[A-Z0-9_]*|[A-Z][A-Z0-9]*_[A-Z0-9_]*)/,
393
+ });
394
+ // =============================================================================
395
+ // Punctuation
396
+ // =============================================================================
397
+ export const LBrace = createToken({ name: 'LBrace', pattern: /{/ });
398
+ export const RBrace = createToken({ name: 'RBrace', pattern: /}/ });
399
+ export const LParen = createToken({ name: 'LParen', pattern: /\(/ });
400
+ export const RParen = createToken({ name: 'RParen', pattern: /\)/ });
401
+ export const LBracket = createToken({ name: 'LBracket', pattern: /\[/ });
402
+ export const RBracket = createToken({ name: 'RBracket', pattern: /]/ });
403
+ export const Colon = createToken({ name: 'Colon', pattern: /:/ });
404
+ export const Comma = createToken({ name: 'Comma', pattern: /,/ });
405
+ export const Dot = createToken({ name: 'Dot', pattern: /\./ });
406
+ export const Pipe = createToken({ name: 'Pipe', pattern: /\|/ });
407
+ export const Ampersand = createToken({ name: 'Ampersand', pattern: /&/ });
408
+ export const Question = createToken({ name: 'Question', pattern: /\?/ });
409
+ export const Equals = createToken({ name: 'Equals', pattern: /=/ });
410
+ export const At = createToken({ name: 'At', pattern: /@/ });
411
+ // =============================================================================
412
+ // Token Order
413
+ // =============================================================================
414
+ // IMPORTANT: Order matters! Longer/more specific patterns must come first.
415
+ // All keyword patterns use \b word boundary to prevent partial matching.
416
+ export const allTokens = [
417
+ // Whitespace and comments first
418
+ WhiteSpace,
419
+ LineComment,
420
+ // Multi-character operators
421
+ EffectArrowStart,
422
+ EffectArrowEnd,
423
+ Arrow,
424
+ Range,
425
+ // Literals (before keywords)
426
+ StringLiteral,
427
+ HexColor,
428
+ CSSFunctionLiteral,
429
+ DurationLiteral,
430
+ SizeLiteral,
431
+ RateLimitLiteral,
432
+ CSSValueLiteral,
433
+ DecimalLiteral,
434
+ IntegerLiteral,
435
+ // Multi-word compound keywords (before their components)
436
+ TanstackStart,
437
+ TailwindOnly,
438
+ DefaultComposition,
439
+ FontFamily,
440
+ FontMono,
441
+ HasMany,
442
+ HasOne,
443
+ BelongsTo,
444
+ ManyToMany,
445
+ OnCreate,
446
+ OnUpdate,
447
+ OnDelete,
448
+ OnAbandon,
449
+ OnSuccess,
450
+ OnError,
451
+ RateLimit,
452
+ WaitFor,
453
+ SkipIf,
454
+ SendEmail,
455
+ LogAudit,
456
+ TransferOwnership,
457
+ RequireReverification,
458
+ // Keywords with longer variants (longer first to avoid conflicts)
459
+ Timestamp,
460
+ Timeout,
461
+ Textarea,
462
+ Checkbox,
463
+ Multiselect,
464
+ Sveltekit,
465
+ Argon2id,
466
+ Hashed,
467
+ Cannot,
468
+ Astro,
469
+ Actions,
470
+ Loading,
471
+ Darken,
472
+ // Effect keywords (PascalCase)
473
+ DB,
474
+ AuthEffect,
475
+ EmailEffect,
476
+ ErrorEffect,
477
+ AuditEffect,
478
+ Queue,
479
+ CacheEffect,
480
+ External,
481
+ // Block keywords
482
+ Project,
483
+ Entity,
484
+ Auth,
485
+ Api,
486
+ Journey,
487
+ Page,
488
+ Component,
489
+ Form,
490
+ Design,
491
+ // Auth keywords
492
+ Jwt,
493
+ Session,
494
+ Oauth,
495
+ Secret,
496
+ Issuer,
497
+ Audience,
498
+ Expires,
499
+ Refresh,
500
+ Hash,
501
+ Bcrypt,
502
+ Memory,
503
+ Iterations,
504
+ Parallelism,
505
+ Rounds,
506
+ Sliding,
507
+ Fixed,
508
+ None,
509
+ // Entity keywords
510
+ Through,
511
+ Cascade,
512
+ Can,
513
+ Where,
514
+ Unless,
515
+ To,
516
+ As,
517
+ Index,
518
+ // Field modifiers
519
+ Primary,
520
+ Unique,
521
+ Auto,
522
+ Immutable,
523
+ Internal,
524
+ Optional,
525
+ // Type keywords
526
+ String,
527
+ Int,
528
+ Float,
529
+ Bool,
530
+ Email,
531
+ Url,
532
+ Uuid,
533
+ Phone,
534
+ Slug,
535
+ Markdown,
536
+ Json,
537
+ Time,
538
+ Date,
539
+ Duration,
540
+ Void,
541
+ // API keywords
542
+ Crud,
543
+ Throws,
544
+ Check,
545
+ Audit,
546
+ Cache,
547
+ Deprecated,
548
+ Filter,
549
+ Scope,
550
+ Always,
551
+ Never,
552
+ // Journey keywords
553
+ Actor,
554
+ Steps,
555
+ Action,
556
+ Next,
557
+ Skippable,
558
+ Complete,
559
+ Track,
560
+ Condition,
561
+ // Page keywords
562
+ Route,
563
+ Guard,
564
+ Loader,
565
+ Load,
566
+ Layout,
567
+ Title,
568
+ Meta,
569
+ // Component keywords
570
+ Props,
571
+ Structure,
572
+ Variants,
573
+ Compound,
574
+ State,
575
+ Handlers,
576
+ // Form keywords
577
+ Fields,
578
+ Submit,
579
+ Label,
580
+ Placeholder,
581
+ Validation,
582
+ Validate,
583
+ Required,
584
+ Options,
585
+ From,
586
+ Button,
587
+ Loading,
588
+ Row,
589
+ Rows,
590
+ Columns,
591
+ Text,
592
+ Password,
593
+ Number,
594
+ Select,
595
+ Radio,
596
+ File,
597
+ // Design keywords
598
+ Colors,
599
+ Dark,
600
+ Typography,
601
+ Scale,
602
+ Weight,
603
+ Spacing,
604
+ Unit,
605
+ Borders,
606
+ Radius,
607
+ Width,
608
+ Color,
609
+ Shadows,
610
+ Motion,
611
+ Easing,
612
+ Lighten,
613
+ Alpha,
614
+ Animation,
615
+ // Project keywords
616
+ Version,
617
+ Stack,
618
+ Database,
619
+ Ui,
620
+ // Stack values
621
+ Remix,
622
+ Express,
623
+ Hono,
624
+ Elysia,
625
+ // Database values
626
+ Postgres,
627
+ Mysql,
628
+ Sqlite,
629
+ Turso,
630
+ Mongodb,
631
+ // UI values
632
+ Shadcn,
633
+ Mui,
634
+ Chakra,
635
+ // Lifecycle actions
636
+ Enqueue,
637
+ Anonymize,
638
+ Template,
639
+ Job,
640
+ Notify,
641
+ Webhook,
642
+ // Cascade values
643
+ Delete,
644
+ Nullify,
645
+ Restrict,
646
+ // Capability actions
647
+ Create,
648
+ Read,
649
+ Update,
650
+ Invite,
651
+ List,
652
+ // Boolean literals
653
+ True,
654
+ False,
655
+ // Env function
656
+ Env,
657
+ // Identifiers (last - catch-all)
658
+ ConstantIdentifier, // Before PascalIdentifier for SCREAMING_SNAKE_CASE matching
659
+ PascalIdentifier,
660
+ Identifier,
661
+ // Punctuation
662
+ LBrace,
663
+ RBrace,
664
+ LParen,
665
+ RParen,
666
+ LBracket,
667
+ RBracket,
668
+ Colon,
669
+ Comma,
670
+ Dot,
671
+ Pipe,
672
+ Ampersand,
673
+ Question,
674
+ Equals,
675
+ At,
676
+ ];
677
+ // =============================================================================
678
+ // Lexer Instance
679
+ // =============================================================================
680
+ export const KappaLexer = new Lexer(allTokens);
681
+ /**
682
+ * Tokenize Kappa source code
683
+ */
684
+ export function tokenize(source) {
685
+ const result = KappaLexer.tokenize(source);
686
+ if (result.errors.length > 0) {
687
+ const errors = result.errors.map(err => ({
688
+ message: err.message,
689
+ line: err.line,
690
+ column: err.column,
691
+ length: err.length,
692
+ }));
693
+ return { success: false, errors, tokens: result.tokens };
694
+ }
695
+ return { success: true, tokens: result.tokens, errors: [] };
696
+ }
697
+ // =============================================================================
698
+ // Token Groups for Parser
699
+ // =============================================================================
700
+ /**
701
+ * All block-level keywords
702
+ */
703
+ export const BlockKeywords = [
704
+ Project,
705
+ Entity,
706
+ Auth,
707
+ Api,
708
+ Journey,
709
+ Page,
710
+ Component,
711
+ Form,
712
+ Design,
713
+ ];
714
+ /**
715
+ * All type keywords
716
+ */
717
+ export const TypeKeywords = [
718
+ String,
719
+ Int,
720
+ Float,
721
+ Bool,
722
+ Email,
723
+ Url,
724
+ Uuid,
725
+ Phone,
726
+ Slug,
727
+ Markdown,
728
+ Json,
729
+ Timestamp,
730
+ Date,
731
+ Time,
732
+ Duration,
733
+ Void,
734
+ ];
735
+ /**
736
+ * All field modifier keywords
737
+ */
738
+ export const FieldModifierKeywords = [
739
+ Primary,
740
+ Unique,
741
+ Auto,
742
+ Immutable,
743
+ Internal,
744
+ Hashed,
745
+ ];
746
+ /**
747
+ * All effect keywords
748
+ */
749
+ export const EffectKeywords = [
750
+ DB,
751
+ AuthEffect,
752
+ EmailEffect,
753
+ AuditEffect,
754
+ Queue,
755
+ CacheEffect,
756
+ External,
757
+ ];