@typecad/cuttlefish 0.1.0-alpha.1

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 (377) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +79 -0
  3. package/dist/api/board-types.d.ts +1 -0
  4. package/dist/api/board-types.js +4 -0
  5. package/dist/api/capabilities.d.ts +12 -0
  6. package/dist/api/capabilities.js +1 -0
  7. package/dist/api/config.d.ts +120 -0
  8. package/dist/api/config.js +7 -0
  9. package/dist/api/index.d.ts +5 -0
  10. package/dist/api/index.js +2 -0
  11. package/dist/api/schema/builder.d.ts +14 -0
  12. package/dist/api/schema/builder.js +15 -0
  13. package/dist/api/schema/index.d.ts +2 -0
  14. package/dist/api/schema/index.js +1 -0
  15. package/dist/api/schema/types.d.ts +257 -0
  16. package/dist/api/schema/types.js +4 -0
  17. package/dist/api/shared/async-runtime-static.d.ts +8 -0
  18. package/dist/api/shared/async-runtime-static.js +201 -0
  19. package/dist/api/shared/async-types.d.ts +42 -0
  20. package/dist/api/shared/async-types.js +8 -0
  21. package/dist/api/shared/board-resolver.d.ts +12 -0
  22. package/dist/api/shared/board-resolver.js +7 -0
  23. package/dist/api/shared/cpp-type-ir.d.ts +229 -0
  24. package/dist/api/shared/cpp-type-ir.js +672 -0
  25. package/dist/api/shared/display-adapter.d.ts +12 -0
  26. package/dist/api/shared/display-adapter.js +145 -0
  27. package/dist/api/shared/display-adapters/eink-mono.d.ts +2 -0
  28. package/dist/api/shared/display-adapters/eink-mono.js +53 -0
  29. package/dist/api/shared/display-adapters/sdl.d.ts +2 -0
  30. package/dist/api/shared/display-adapters/sdl.js +452 -0
  31. package/dist/api/shared/display-adapters/ssd1309.d.ts +2 -0
  32. package/dist/api/shared/display-adapters/ssd1309.js +136 -0
  33. package/dist/api/shared/display-adapters/st7796.d.ts +2 -0
  34. package/dist/api/shared/display-adapters/st7796.js +132 -0
  35. package/dist/api/shared/display-capabilities.d.ts +45 -0
  36. package/dist/api/shared/display-capabilities.js +54 -0
  37. package/dist/api/shared/display-op-ir.d.ts +62 -0
  38. package/dist/api/shared/display-op-ir.js +19 -0
  39. package/dist/api/shared/display-profile.d.ts +265 -0
  40. package/dist/api/shared/display-profile.js +338 -0
  41. package/dist/api/shared/graphics-strategy.d.ts +29 -0
  42. package/dist/api/shared/graphics-strategy.js +11 -0
  43. package/dist/api/shared/hal-op-ir.d.ts +393 -0
  44. package/dist/api/shared/hal-op-ir.js +18 -0
  45. package/dist/api/shared/index.d.ts +26 -0
  46. package/dist/api/shared/index.js +21 -0
  47. package/dist/api/shared/ir-core.d.ts +363 -0
  48. package/dist/api/shared/ir-core.js +8 -0
  49. package/dist/api/shared/ir-declarations.d.ts +201 -0
  50. package/dist/api/shared/ir-declarations.js +26 -0
  51. package/dist/api/shared/ir.d.ts +85 -0
  52. package/dist/api/shared/ir.js +13 -0
  53. package/dist/api/shared/platform-strategy.d.ts +402 -0
  54. package/dist/api/shared/platform-strategy.js +14 -0
  55. package/dist/api/shared/polyfill-helper-registry.d.ts +11 -0
  56. package/dist/api/shared/polyfill-helper-registry.js +86 -0
  57. package/dist/api/shared/polyfill-types.d.ts +33 -0
  58. package/dist/api/shared/polyfill-types.js +76 -0
  59. package/dist/api/shared/promise-runtime.d.ts +10 -0
  60. package/dist/api/shared/promise-runtime.js +244 -0
  61. package/dist/api/shared/snprintf-types.d.ts +29 -0
  62. package/dist/api/shared/snprintf-types.js +8 -0
  63. package/dist/api/shared/string-method-registry.d.ts +53 -0
  64. package/dist/api/shared/string-method-registry.js +168 -0
  65. package/dist/api/shared/toolchain-types.d.ts +63 -0
  66. package/dist/api/shared/toolchain-types.js +71 -0
  67. package/dist/api/shared/types.d.ts +50 -0
  68. package/dist/api/shared/types.js +6 -0
  69. package/dist/ast/parse.d.ts +2 -0
  70. package/dist/ast/parse.js +4 -0
  71. package/dist/cache.d.ts +26 -0
  72. package/dist/cache.js +95 -0
  73. package/dist/cli-utils.d.ts +37 -0
  74. package/dist/cli-utils.js +250 -0
  75. package/dist/cli.d.ts +2 -0
  76. package/dist/cli.js +635 -0
  77. package/dist/config-loader.d.ts +78 -0
  78. package/dist/config-loader.js +508 -0
  79. package/dist/config-schema.d.ts +233 -0
  80. package/dist/config-schema.js +83 -0
  81. package/dist/create/board-checklist.d.ts +2 -0
  82. package/dist/create/board-checklist.js +52 -0
  83. package/dist/create/board-codegen.d.ts +9 -0
  84. package/dist/create/board-codegen.js +238 -0
  85. package/dist/create/board-generators.d.ts +12 -0
  86. package/dist/create/board-generators.js +652 -0
  87. package/dist/create/board-spec.d.ts +640 -0
  88. package/dist/create/board-spec.js +215 -0
  89. package/dist/create/eslint-rules-template.d.ts +2 -0
  90. package/dist/create/eslint-rules-template.js +672 -0
  91. package/dist/create/index.d.ts +11 -0
  92. package/dist/create/index.js +8 -0
  93. package/dist/create/init-scaffold.d.ts +27 -0
  94. package/dist/create/init-scaffold.js +150 -0
  95. package/dist/create/init-templates.d.ts +24 -0
  96. package/dist/create/init-templates.js +379 -0
  97. package/dist/create/init-wizard.d.ts +8 -0
  98. package/dist/create/init-wizard.js +168 -0
  99. package/dist/debug/breakpoint-loader.d.ts +24 -0
  100. package/dist/debug/breakpoint-loader.js +137 -0
  101. package/dist/debug/index.d.ts +3 -0
  102. package/dist/debug/index.js +7 -0
  103. package/dist/debug/preprocessor.d.ts +9 -0
  104. package/dist/debug/preprocessor.js +214 -0
  105. package/dist/debug/types.d.ts +32 -0
  106. package/dist/debug/types.js +6 -0
  107. package/dist/diagnostics/diagnostics-report.d.ts +51 -0
  108. package/dist/diagnostics/diagnostics-report.js +333 -0
  109. package/dist/diagnostics/json-schema.d.ts +138 -0
  110. package/dist/diagnostics/json-schema.js +27 -0
  111. package/dist/diagnostics/md-writer.d.ts +10 -0
  112. package/dist/diagnostics/md-writer.js +336 -0
  113. package/dist/diagnostics/mermaid-builder.d.ts +65 -0
  114. package/dist/diagnostics/mermaid-builder.js +681 -0
  115. package/dist/emit/cpp-emitter.d.ts +6 -0
  116. package/dist/emit/cpp-emitter.js +48 -0
  117. package/dist/emit/emitters/class-emitter.d.ts +2 -0
  118. package/dist/emit/emitters/class-emitter.js +523 -0
  119. package/dist/emit/emitters/emitter-context.d.ts +174 -0
  120. package/dist/emit/emitters/emitter-context.js +1 -0
  121. package/dist/emit/emitters/entrypoint-synthesizer.d.ts +2 -0
  122. package/dist/emit/emitters/entrypoint-synthesizer.js +175 -0
  123. package/dist/emit/emitters/function-emitter-impl.d.ts +19 -0
  124. package/dist/emit/emitters/function-emitter-impl.js +428 -0
  125. package/dist/emit/emitters/line-appender.d.ts +15 -0
  126. package/dist/emit/emitters/line-appender.js +344 -0
  127. package/dist/emit/emitters/namespace-emitter.d.ts +2 -0
  128. package/dist/emit/emitters/namespace-emitter.js +324 -0
  129. package/dist/emit/emitters/output-finalizer.d.ts +4 -0
  130. package/dist/emit/emitters/output-finalizer.js +267 -0
  131. package/dist/emit/emitters/setup.d.ts +3 -0
  132. package/dist/emit/emitters/setup.js +851 -0
  133. package/dist/emit/emitters/top-level-prep.d.ts +2 -0
  134. package/dist/emit/emitters/top-level-prep.js +706 -0
  135. package/dist/emit/emitters/type-decl-emitter.d.ts +2 -0
  136. package/dist/emit/emitters/type-decl-emitter.js +251 -0
  137. package/dist/emit/emitters/ui-emitter.d.ts +21 -0
  138. package/dist/emit/emitters/ui-emitter.js +564 -0
  139. package/dist/emit/enum-emitter.d.ts +1 -0
  140. package/dist/emit/enum-emitter.js +1 -0
  141. package/dist/emit/expression-renderer.d.ts +283 -0
  142. package/dist/emit/expression-renderer.js +1477 -0
  143. package/dist/emit/native-helpers-emitter.d.ts +11 -0
  144. package/dist/emit/native-helpers-emitter.js +34 -0
  145. package/dist/emit/route-hal-op.d.ts +5 -0
  146. package/dist/emit/route-hal-op.js +13 -0
  147. package/dist/emit/snprintf-helpers.d.ts +17 -0
  148. package/dist/emit/snprintf-helpers.js +462 -0
  149. package/dist/emit/statement-renderer.d.ts +189 -0
  150. package/dist/emit/statement-renderer.js +948 -0
  151. package/dist/emit/utils/async-state-machine.d.ts +42 -0
  152. package/dist/emit/utils/async-state-machine.js +343 -0
  153. package/dist/emit/utils/comment-helpers.d.ts +20 -0
  154. package/dist/emit/utils/comment-helpers.js +31 -0
  155. package/dist/emit/utils/cpp-helpers.d.ts +47 -0
  156. package/dist/emit/utils/cpp-helpers.js +85 -0
  157. package/dist/emit/utils/include-resolver.d.ts +58 -0
  158. package/dist/emit/utils/include-resolver.js +155 -0
  159. package/dist/emit/utils/index.d.ts +8 -0
  160. package/dist/emit/utils/index.js +12 -0
  161. package/dist/emit/utils/type-inference.d.ts +159 -0
  162. package/dist/emit/utils/type-inference.js +559 -0
  163. package/dist/eslint-check.d.ts +10 -0
  164. package/dist/eslint-check.js +102 -0
  165. package/dist/framework-package.d.ts +10 -0
  166. package/dist/framework-package.js +58 -0
  167. package/dist/framework-registry.d.ts +39 -0
  168. package/dist/framework-registry.js +30 -0
  169. package/dist/incremental-cache.d.ts +116 -0
  170. package/dist/incremental-cache.js +335 -0
  171. package/dist/ir/adc-range-validation.d.ts +11 -0
  172. package/dist/ir/adc-range-validation.js +250 -0
  173. package/dist/ir/ast-node-utils.d.ts +8 -0
  174. package/dist/ir/ast-node-utils.js +32 -0
  175. package/dist/ir/board-pin-utils.d.ts +13 -0
  176. package/dist/ir/board-pin-utils.js +65 -0
  177. package/dist/ir/board-resolver.d.ts +36 -0
  178. package/dist/ir/board-resolver.js +437 -0
  179. package/dist/ir/build-ir-state.d.ts +167 -0
  180. package/dist/ir/build-ir-state.js +306 -0
  181. package/dist/ir/build-ir.d.ts +2 -0
  182. package/dist/ir/build-ir.js +808 -0
  183. package/dist/ir/call-graph.d.ts +35 -0
  184. package/dist/ir/call-graph.js +194 -0
  185. package/dist/ir/compile-time-only.d.ts +2 -0
  186. package/dist/ir/compile-time-only.js +16 -0
  187. package/dist/ir/declaration-builders.d.ts +9 -0
  188. package/dist/ir/declaration-builders.js +608 -0
  189. package/dist/ir/entry-points.d.ts +30 -0
  190. package/dist/ir/entry-points.js +191 -0
  191. package/dist/ir/expression-to-ir.d.ts +5 -0
  192. package/dist/ir/expression-to-ir.js +2249 -0
  193. package/dist/ir/extract-property-chain.d.ts +10 -0
  194. package/dist/ir/extract-property-chain.js +30 -0
  195. package/dist/ir/feature-prescan.d.ts +3 -0
  196. package/dist/ir/feature-prescan.js +43 -0
  197. package/dist/ir/feature-registry.d.ts +30 -0
  198. package/dist/ir/feature-registry.js +816 -0
  199. package/dist/ir/filter.d.ts +7 -0
  200. package/dist/ir/filter.js +85 -0
  201. package/dist/ir/function-builder.d.ts +19 -0
  202. package/dist/ir/function-builder.js +670 -0
  203. package/dist/ir/hal/hal-emitter.d.ts +62 -0
  204. package/dist/ir/hal/hal-emitter.js +735 -0
  205. package/dist/ir/hal/hal-parser.d.ts +61 -0
  206. package/dist/ir/hal/hal-parser.js +473 -0
  207. package/dist/ir/hal/hal-plugins.d.ts +34 -0
  208. package/dist/ir/hal/hal-plugins.js +706 -0
  209. package/dist/ir/hal-resolver.d.ts +5 -0
  210. package/dist/ir/hal-resolver.js +5 -0
  211. package/dist/ir/heap-analysis.d.ts +8 -0
  212. package/dist/ir/heap-analysis.js +350 -0
  213. package/dist/ir/heap-array-validation.d.ts +24 -0
  214. package/dist/ir/heap-array-validation.js +29 -0
  215. package/dist/ir/identifier-collector.d.ts +18 -0
  216. package/dist/ir/identifier-collector.js +439 -0
  217. package/dist/ir/interrupt-analysis.d.ts +39 -0
  218. package/dist/ir/interrupt-analysis.js +467 -0
  219. package/dist/ir/memory-budget-validation.d.ts +10 -0
  220. package/dist/ir/memory-budget-validation.js +86 -0
  221. package/dist/ir/namespace-builder.d.ts +7 -0
  222. package/dist/ir/namespace-builder.js +152 -0
  223. package/dist/ir/ownership-analysis.d.ts +9 -0
  224. package/dist/ir/ownership-analysis.js +1207 -0
  225. package/dist/ir/peripheral-ownership.d.ts +3 -0
  226. package/dist/ir/peripheral-ownership.js +152 -0
  227. package/dist/ir/peripheral-symbols.d.ts +7 -0
  228. package/dist/ir/peripheral-symbols.js +57 -0
  229. package/dist/ir/peripheral-usage.d.ts +54 -0
  230. package/dist/ir/peripheral-usage.js +691 -0
  231. package/dist/ir/peripheral-validation.d.ts +8 -0
  232. package/dist/ir/peripheral-validation.js +77 -0
  233. package/dist/ir/pin-alias-conflict.d.ts +4 -0
  234. package/dist/ir/pin-alias-conflict.js +34 -0
  235. package/dist/ir/pin-capability-validation.d.ts +6 -0
  236. package/dist/ir/pin-capability-validation.js +413 -0
  237. package/dist/ir/pin-mode-validation.d.ts +10 -0
  238. package/dist/ir/pin-mode-validation.js +301 -0
  239. package/dist/ir/pin-safety.d.ts +11 -0
  240. package/dist/ir/pin-safety.js +58 -0
  241. package/dist/ir/program-analysis.d.ts +44 -0
  242. package/dist/ir/program-analysis.js +589 -0
  243. package/dist/ir/pulldown-validation.d.ts +7 -0
  244. package/dist/ir/pulldown-validation.js +49 -0
  245. package/dist/ir/pwm-timer-sharing.d.ts +4 -0
  246. package/dist/ir/pwm-timer-sharing.js +93 -0
  247. package/dist/ir/reachability.d.ts +68 -0
  248. package/dist/ir/reachability.js +224 -0
  249. package/dist/ir/register-decorators.d.ts +6 -0
  250. package/dist/ir/register-decorators.js +49 -0
  251. package/dist/ir/render-expr.d.ts +4 -0
  252. package/dist/ir/render-expr.js +127 -0
  253. package/dist/ir/resource-analysis.d.ts +19 -0
  254. package/dist/ir/resource-analysis.js +153 -0
  255. package/dist/ir/statement-to-ir.d.ts +23 -0
  256. package/dist/ir/statement-to-ir.js +349 -0
  257. package/dist/ir/symbol-table.d.ts +68 -0
  258. package/dist/ir/symbol-table.js +179 -0
  259. package/dist/ir/symbol-types.d.ts +56 -0
  260. package/dist/ir/symbol-types.js +107 -0
  261. package/dist/ir/timer0-pwm-timing-conflict.d.ts +4 -0
  262. package/dist/ir/timer0-pwm-timing-conflict.js +71 -0
  263. package/dist/ir/timing-validation.d.ts +7 -0
  264. package/dist/ir/timing-validation.js +95 -0
  265. package/dist/ir/transformers/array-methods.d.ts +8 -0
  266. package/dist/ir/transformers/array-methods.js +493 -0
  267. package/dist/ir/transformers/call-statement.d.ts +5 -0
  268. package/dist/ir/transformers/call-statement.js +758 -0
  269. package/dist/ir/transformers/callback-context-registry.d.ts +20 -0
  270. package/dist/ir/transformers/callback-context-registry.js +55 -0
  271. package/dist/ir/transformers/canvas-lowering.d.ts +42 -0
  272. package/dist/ir/transformers/canvas-lowering.js +249 -0
  273. package/dist/ir/transformers/control-flow.d.ts +8 -0
  274. package/dist/ir/transformers/control-flow.js +508 -0
  275. package/dist/ir/transformers/expressions.d.ts +7 -0
  276. package/dist/ir/transformers/expressions.js +406 -0
  277. package/dist/ir/transformers/hal-call-resolver.d.ts +29 -0
  278. package/dist/ir/transformers/hal-call-resolver.js +274 -0
  279. package/dist/ir/transformers/hal-emit-helpers.d.ts +14 -0
  280. package/dist/ir/transformers/hal-emit-helpers.js +63 -0
  281. package/dist/ir/transformers/namespace-methods.d.ts +20 -0
  282. package/dist/ir/transformers/namespace-methods.js +110 -0
  283. package/dist/ir/transformers/register-assignment.d.ts +5 -0
  284. package/dist/ir/transformers/register-assignment.js +56 -0
  285. package/dist/ir/transformers/ui-call-resolver.d.ts +149 -0
  286. package/dist/ir/transformers/ui-call-resolver.js +1136 -0
  287. package/dist/ir/transformers/ui-callback-lowering.d.ts +62 -0
  288. package/dist/ir/transformers/ui-callback-lowering.js +623 -0
  289. package/dist/ir/transformers/ui-mount.d.ts +20 -0
  290. package/dist/ir/transformers/ui-mount.js +35 -0
  291. package/dist/ir/transformers/ui-reactive.d.ts +68 -0
  292. package/dist/ir/transformers/ui-reactive.js +129 -0
  293. package/dist/ir/transformers/variables.d.ts +14 -0
  294. package/dist/ir/transformers/variables.js +1045 -0
  295. package/dist/ir/try-catch-validation.d.ts +26 -0
  296. package/dist/ir/try-catch-validation.js +128 -0
  297. package/dist/ir/type-resolution.d.ts +31 -0
  298. package/dist/ir/type-resolution.js +977 -0
  299. package/dist/ir/ui-element-auto-wire.d.ts +50 -0
  300. package/dist/ir/ui-element-auto-wire.js +218 -0
  301. package/dist/ir/unit-suspicion-validation.d.ts +12 -0
  302. package/dist/ir/unit-suspicion-validation.js +296 -0
  303. package/dist/ir/utils/walk-ir.d.ts +6 -0
  304. package/dist/ir/utils/walk-ir.js +162 -0
  305. package/dist/ir/validation-orchestrator.d.ts +4 -0
  306. package/dist/ir/validation-orchestrator.js +45 -0
  307. package/dist/libdef/base-class-resolver.d.ts +23 -0
  308. package/dist/libdef/base-class-resolver.js +50 -0
  309. package/dist/libdef/cpp-to-decl.d.ts +34 -0
  310. package/dist/libdef/cpp-to-decl.js +584 -0
  311. package/dist/libdef/header-parser.d.ts +53 -0
  312. package/dist/libdef/header-parser.js +269 -0
  313. package/dist/libdef/registry.d.ts +10 -0
  314. package/dist/libdef/registry.js +142 -0
  315. package/dist/mapping/peripheral-names.d.ts +23 -0
  316. package/dist/mapping/peripheral-names.js +63 -0
  317. package/dist/mapping/source-map.d.ts +46 -0
  318. package/dist/mapping/source-map.js +207 -0
  319. package/dist/orchestrator/dts-generator.d.ts +17 -0
  320. package/dist/orchestrator/dts-generator.js +83 -0
  321. package/dist/orchestrator/graph-builder.d.ts +18 -0
  322. package/dist/orchestrator/graph-builder.js +218 -0
  323. package/dist/orchestrator/semantic-facts-verifier.d.ts +38 -0
  324. package/dist/orchestrator/semantic-facts-verifier.js +121 -0
  325. package/dist/orchestrator/semantic-facts.d.ts +141 -0
  326. package/dist/orchestrator/semantic-facts.js +652 -0
  327. package/dist/orchestrator/type-checker.d.ts +39 -0
  328. package/dist/orchestrator/type-checker.js +760 -0
  329. package/dist/platform/async-runtime.d.ts +8 -0
  330. package/dist/platform/async-runtime.js +26 -0
  331. package/dist/platform/generic-strategy.d.ts +101 -0
  332. package/dist/platform/generic-strategy.js +289 -0
  333. package/dist/platform/index.d.ts +4 -0
  334. package/dist/platform/index.js +9 -0
  335. package/dist/platform/registry.d.ts +21 -0
  336. package/dist/platform/registry.js +42 -0
  337. package/dist/platform/toolchain.d.ts +4 -0
  338. package/dist/platform/toolchain.js +43 -0
  339. package/dist/preview/client.d.ts +1 -0
  340. package/dist/preview/client.js +137 -0
  341. package/dist/preview/server.d.ts +5 -0
  342. package/dist/preview/server.js +199 -0
  343. package/dist/profiler/index.d.ts +28 -0
  344. package/dist/profiler/index.js +28 -0
  345. package/dist/profiler/profiler.d.ts +95 -0
  346. package/dist/profiler/profiler.js +338 -0
  347. package/dist/profiler/types.d.ts +87 -0
  348. package/dist/profiler/types.js +12 -0
  349. package/dist/stores/display-profile-store.d.ts +16 -0
  350. package/dist/stores/display-profile-store.js +48 -0
  351. package/dist/stores/theme-store.d.ts +13 -0
  352. package/dist/stores/theme-store.js +30 -0
  353. package/dist/testing.d.ts +45 -0
  354. package/dist/testing.js +47 -0
  355. package/dist/transpile/resolution.d.ts +29 -0
  356. package/dist/transpile/resolution.js +282 -0
  357. package/dist/transpile.d.ts +3 -0
  358. package/dist/transpile.js +722 -0
  359. package/dist/types.d.ts +217 -0
  360. package/dist/types.js +1 -0
  361. package/dist/ui/ui-bridge.d.ts +4 -0
  362. package/dist/ui/ui-bridge.js +34 -0
  363. package/dist/ui-hook.d.ts +84 -0
  364. package/dist/ui-hook.js +45 -0
  365. package/dist/utils/cli.d.ts +3 -0
  366. package/dist/utils/cli.js +463 -0
  367. package/dist/utils/fs.d.ts +4 -0
  368. package/dist/utils/fs.js +23 -0
  369. package/dist/utils/logger.d.ts +2 -0
  370. package/dist/utils/logger.js +8 -0
  371. package/dist/utils/strings.d.ts +35 -0
  372. package/dist/utils/strings.js +142 -0
  373. package/dist/utils/ui.d.ts +66 -0
  374. package/dist/utils/ui.js +149 -0
  375. package/dist/watch.d.ts +35 -0
  376. package/dist/watch.js +111 -0
  377. package/package.json +127 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 typecad0
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md ADDED
@@ -0,0 +1,79 @@
1
+ # `@typecad/cuttlefish`
2
+
3
+ TypeScript → C++ transpiler for embedded firmware. Targets native (desktop),
4
+ Arduino, and bare-metal MCU builds from a single TypeScript codebase.
5
+
6
+ `cuttlefish` is the command-line tool at the center of the [TypeCAD](https://github.com/justind000/typecode)
7
+ toolchain: it loads `cuttlefish.config.ts`, transpiles TypeScript firmware to
8
+ C++, and can chain compile, upload, and serial-monitor steps.
9
+
10
+ ## Quick start
11
+
12
+ From a project root containing `cuttlefish.config.ts`:
13
+
14
+ ```bash
15
+ npx cuttlefish build
16
+ npx cuttlefish build --compile --upload --port COM4
17
+ npx cuttlefish build --compile --upload --monitor --port COM4 --baud 115200
18
+ ```
19
+
20
+ Scaffold a starter project with the built-in wizard:
21
+
22
+ ```bash
23
+ npx cuttlefish create --board arduino:avr:uno --framework arduino
24
+ ```
25
+
26
+ ## Commands
27
+
28
+ | Command | Description |
29
+ | --- | --- |
30
+ | `cuttlefish build` | Transpile the entry file (default). Accepts `--compile`, `--upload`, `--monitor`, `--port`, `--baud`. |
31
+ | `cuttlefish create` | Generate a starter project and `cuttlefish.config.ts`. |
32
+ | `cuttlefish board-add` | Add a new board package via the board-codegen scaffolder. |
33
+ | `cuttlefish preview` | Launch the browser preview server for a UI project. |
34
+ | `cuttlefish map-error <mapFile>` | Map a C++ compiler error back to its TypeScript source location. |
35
+ | `cuttlefish gen-decls` | Generate type declaration stubs. |
36
+ | `cuttlefish gen-libdefs <input.ts>` | Generate library definition stubs for third-party imports. |
37
+
38
+ ### Flags (for `build`)
39
+
40
+ - `--compile` — transpile, then compile via the active framework's toolchain (`arduino-cli` for Arduino, `g++` for native).
41
+ - `--upload` — flash firmware to the board (implies `--compile`).
42
+ - `--monitor` — open a serial monitor after upload.
43
+ - `--port <port>` — serial port for upload/monitor (e.g. `COM4`, `/dev/ttyUSB0`).
44
+ - `--baud <rate>` — serial monitor baud rate.
45
+
46
+ ## Configuration
47
+
48
+ The CLI reads `cuttlefish.config.ts` from the current working directory and
49
+ treats it as the source of truth. When no config file is present, command-line
50
+ flags such as `--fqbn` and `--board` supply board and build settings.
51
+
52
+ ```ts
53
+ import type { CuttlefishConfig } from '@typecad/cuttlefish/api';
54
+
55
+ const config: CuttlefishConfig = {
56
+ entry: './src/main.ts',
57
+ target: 'esp32',
58
+ mcu: '@typecad/mcu-esp32',
59
+ board: '@typecad/board-esp32-devkit',
60
+ framework: '@typecad/framework-arduino',
61
+ };
62
+
63
+ export default config;
64
+ ```
65
+
66
+ ## Ecosystem
67
+
68
+ `@typecad/cuttlefish` is the transpiler core. It pairs with sibling packages:
69
+
70
+ - [`@typecad/hal`](https://github.com/justind000/typecode/tree/main/packages/hal) — hardware abstraction (GPIO, I2C, SPI, UART) as regular TypeScript.
71
+ - [`@typecad/ui`](https://github.com/justind000/typecode/tree/main/packages/ui) — HTML/CSS-driven graphics for microcontroller displays.
72
+ - [`@typecad/expect`](https://github.com/justind000/typecode/tree/main/packages/expect) — hardware test framework (vitest-style assertions over serial).
73
+ - [`@typecad/framework-arduino`](https://github.com/justind000/typecode/tree/main/packages/framework-arduino) — Arduino framework code-gen strategy.
74
+ - [`@typecad/framework-native`](https://github.com/justind000/typecode/tree/main/packages/framework-native) — native desktop C++ code-gen strategy.
75
+ - `@typecad/mcu-*` and `@typecad/board-*` — silicon- and board-level pin/peripheral definitions.
76
+
77
+ ## License
78
+
79
+ MIT
@@ -0,0 +1 @@
1
+ export type ArchitectureIdentifier = 'avr' | 'esp32' | 'esp32s2' | 'esp32s3' | 'esp32c3' | 'esp32c6' | 'rp2040' | 'samd' | 'stm32' | 'nrf52' | (string & {});
@@ -0,0 +1,4 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @typecad/hal — Architecture identifier type used by project configuration.
3
+ // ---------------------------------------------------------------------------
4
+ export {};
@@ -0,0 +1,12 @@
1
+ export interface PinCapabilityFlags {
2
+ digitalInput: boolean;
3
+ digitalOutput: boolean;
4
+ analogInput: boolean;
5
+ analogOutput: boolean;
6
+ pwm: boolean;
7
+ interrupt: boolean;
8
+ pullUp: boolean;
9
+ pullDown: boolean;
10
+ touch: boolean;
11
+ openDrain: boolean;
12
+ }
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,120 @@
1
+ import type { ArchitectureIdentifier } from './board-types.js';
2
+ import type { DisplayConfig } from './shared/display-profile.js';
3
+ /** Build-system / framework the transpiler should target. */
4
+ type OutputFramework = string & {};
5
+ /** Optimization strategy. */
6
+ type OptimizationLevel = 'none' | 'size' | 'speed' | 'balanced';
7
+ /**
8
+ * Output section — controls how generated C++ is laid out.
9
+ */
10
+ interface CuttlefishOutputConfig {
11
+ /** Target build framework. */
12
+ framework: OutputFramework;
13
+ /** Optimization level. */
14
+ optimize?: OptimizationLevel;
15
+ /** Directory to write generated files into (relative to project root). */
16
+ outDir?: string;
17
+ /** Additional compiler defines (KEY = value). */
18
+ defines?: Record<string, string>;
19
+ /** Extra compiler flags forwarded verbatim. */
20
+ extraFlags?: string[];
21
+ }
22
+ /**
23
+ * Root configuration object exported from `cuttlefish.config.ts`.
24
+ */
25
+ export interface CuttlefishConfig {
26
+ /** Entry point TypeScript file (relative to config file directory). */
27
+ entry?: string;
28
+ /** Target architecture identifier (e.g. 'avr', 'esp32', 'rp2040'). */
29
+ target: ArchitectureIdentifier;
30
+ /**
31
+ * MCU package providing silicon definitions.
32
+ * Example: '@typecad/mcu-atmega328p'
33
+ */
34
+ mcu: string;
35
+ /**
36
+ * Board package to use. (Deprecated — use mcu + contract instead)
37
+ */
38
+ board?: string;
39
+ /**
40
+ * Path to a TypeCAD contract file (*.contract.json).
41
+ * If provided, the transpiler will generate a narrowed board definition.
42
+ */
43
+ contract?: string;
44
+ /**
45
+ * Framework package for code generation strategy.
46
+ */
47
+ framework?: string;
48
+ /** Output / build options. */
49
+ output?: CuttlefishOutputConfig;
50
+ /**
51
+ * Framework-specific data.
52
+ */
53
+ frameworkData?: Record<string, unknown>;
54
+ /** Extra project-level TypeScript paths the transpiler should include. */
55
+ include?: string[];
56
+ /** Glob patterns to exclude from transpilation. */
57
+ exclude?: string[];
58
+ /**
59
+ * Hardware test runner configuration.
60
+ */
61
+ test?: CuttlefishTestConfig;
62
+ /**
63
+ * Toolchain configuration for compile/upload operations.
64
+ */
65
+ toolchain?: CuttlefishToolchainConfig;
66
+ /**
67
+ * Console output configuration.
68
+ */
69
+ console?: CuttlefishConsoleConfig;
70
+ /**
71
+ * Framework-specific configuration.
72
+ */
73
+ native?: Record<string, unknown>;
74
+ /**
75
+ * Display configuration — references a built-in profile by name and/or
76
+ * specifies display wiring (cs, dc, rst) and overrides.
77
+ *
78
+ * display: { profile: 'ili9341-spi', cs: 5, dc: 21, rst: 22 }
79
+ */
80
+ display?: DisplayConfig;
81
+ }
82
+ /**
83
+ * Toolchain configuration for compile and upload operations.
84
+ */
85
+ interface CuttlefishToolchainConfig {
86
+ /** Toolchain type identifier. Each framework defines its own valid values. */
87
+ type?: string;
88
+ /** Framework-specific toolchain options. Each framework reads its own key. */
89
+ frameworkOptions?: Record<string, unknown>;
90
+ }
91
+ /**
92
+ * Console output configuration for the target framework.
93
+ */
94
+ interface CuttlefishConsoleConfig {
95
+ /** Default baud rate for console output when auto-injected. Default: 9600 */
96
+ baudRate?: number;
97
+ /**
98
+ * Serial port for upload and monitor (e.g. 'COM4', '/dev/ttyACM0').
99
+ * Can be overridden by the --port CLI flag.
100
+ */
101
+ port?: string;
102
+ }
103
+ /**
104
+ * Configuration for the `cuttlefish-test` hardware test runner.
105
+ */
106
+ interface CuttlefishTestConfig {
107
+ /** Glob patterns for hardware test files. */
108
+ include?: string[];
109
+ /** Serial port the board is connected to (e.g. 'COM4', '/dev/ttyACM0'). */
110
+ port?: string;
111
+ /** Serial baud rate for the test protocol. Default: 115200. */
112
+ baudRate?: number;
113
+ /** Timeout in ms to wait for test completion. Default: 30000. */
114
+ timeout?: number;
115
+ /** Framework-specific build target override. */
116
+ buildTarget?: string;
117
+ /** Board package override — defaults to the root `board` field. */
118
+ board?: string;
119
+ }
120
+ export {};
@@ -0,0 +1,7 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @typecad/hal — Project configuration types
3
+ //
4
+ // A `cuttlefish.config.ts` file lives at the root of a user project and tells
5
+ // the transpiler which board, architecture, and build options to use.
6
+ // ---------------------------------------------------------------------------
7
+ export {};
@@ -0,0 +1,5 @@
1
+ export * from './shared/index.js';
2
+ export type { ArchitectureIdentifier } from './board-types.js';
3
+ export type { PinCapabilityFlags } from './capabilities.js';
4
+ export type { CuttlefishConfig } from './config.js';
5
+ export * from './schema/index.js';
@@ -0,0 +1,2 @@
1
+ export * from './shared/index.js';
2
+ export * from './schema/index.js';
@@ -0,0 +1,14 @@
1
+ /**
2
+ * A branded type representing a physical pin number on the MCU package.
3
+ * Use `pinNumber()` to create from a raw number.
4
+ */
5
+ interface PinNumber {
6
+ readonly __brand: unique symbol;
7
+ readonly value: number;
8
+ }
9
+ /**
10
+ * Create a PinNumber from a raw number.
11
+ * @param n The physical pin number
12
+ */
13
+ export declare function pinNumber(n: number): PinNumber;
14
+ export {};
@@ -0,0 +1,15 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Board builder utilities
3
+ //
4
+ // Helpers used by board definition packages.
5
+ // ---------------------------------------------------------------------------
6
+ /**
7
+ * Create a PinNumber from a raw number.
8
+ * @param n The physical pin number
9
+ */
10
+ export function pinNumber(n) {
11
+ if (n < 0 || !Number.isInteger(n)) {
12
+ throw new Error(`Invalid pin number: ${n}. Must be a non-negative integer.`);
13
+ }
14
+ return { value: n };
15
+ }
@@ -0,0 +1,2 @@
1
+ export type { BoardDefinition, MCUDefinition, PinDefinition, PeripheralFunction, PeripheralInstance, PeripheralDefinitions, ADCDefinition, DACDefinition, PWMDefinition, TimerDefinition, FeatureFlags, MemorySpec, BuildConfig, } from './types.js';
2
+ export { pinNumber, } from './builder.js';
@@ -0,0 +1 @@
1
+ export { pinNumber, } from './builder.js';
@@ -0,0 +1,257 @@
1
+ import type { PinCapabilityFlags } from '../capabilities.js';
2
+ import type { ArchitectureIdentifier } from '../board-types.js';
3
+ export interface MemorySpec {
4
+ /** Flash / program memory in bytes. */
5
+ flash: number;
6
+ /** SRAM in bytes. */
7
+ sram: number;
8
+ /** EEPROM in bytes (0 if none). */
9
+ eeprom: number;
10
+ /** External RAM (PSRAM) in bytes, if available. */
11
+ externalRam?: number;
12
+ /** RTC memory in bytes, if available. */
13
+ rtcMemory?: number;
14
+ }
15
+ export interface PinDefinition {
16
+ /** Pin number on the physical package. */
17
+ number: number;
18
+ /** GPIO number (may differ from physical pin). */
19
+ gpio?: number;
20
+ /** Pin name — MCU-native identifier (e.g. "PB5", "GPIO21", "PC0"). */
21
+ name: string;
22
+ /** MCU port identifier for contract matching (e.g. "PB5", "GPIO21"). Auto-derived from name if absent. */
23
+ port?: string;
24
+ /** Alternate names (e.g. ["LED", "SCK"], ["SDA"]). */
25
+ aliases?: string[];
26
+ /** Pin capabilities. */
27
+ capabilities: PinCapabilityFlags;
28
+ /** Associated peripheral functions. */
29
+ functions?: PeripheralFunction[];
30
+ /** Is this pin connected to the on-board LED? */
31
+ onboardLed?: boolean;
32
+ /** Is this pin connected to the on-board button? */
33
+ onboardButton?: boolean;
34
+ /** Notes / warnings about this pin. */
35
+ notes?: string;
36
+ /** Is this pin marked as unsafe? Use with caution (e.g., boot strapping pins). */
37
+ unsafe?: boolean;
38
+ /**
39
+ * Peripheral functions this pin participates in, expressed as human-readable
40
+ * strings for IDE hover / documentation. E.g. ["I2C0 SDA", "ADC ch4"].
41
+ * Auto-derived from `functions` but can be overridden for clarity.
42
+ */
43
+ alternateFunctions?: string[];
44
+ /**
45
+ * Warnings about using this pin. Shown in IDE hover and transpile diagnostics.
46
+ * E.g. ["Conflicts with UART0 — avoid if using Serial"]
47
+ */
48
+ warnings?: string[];
49
+ }
50
+ export interface PeripheralFunction {
51
+ /** Peripheral type. */
52
+ type: 'i2c' | 'spi' | 'uart' | 'adc' | 'dac' | 'pwm' | 'touch' | 'usb';
53
+ /** Peripheral instance number. */
54
+ instance: number;
55
+ /** Function role (e.g. "sda", "scl", "mosi", "miso"). */
56
+ role: string;
57
+ /** Timer associated with this PWM function (e.g. "timer0", "timer1"). */
58
+ timer?: string;
59
+ }
60
+ export interface PinDefinitions {
61
+ /** Offset for analog pin numbers (e.g. A0 = 14 on Uno). */
62
+ analogOffset?: number;
63
+ /** Complete list of every pin on the board. */
64
+ all: PinDefinition[];
65
+ /** Digital pin names. */
66
+ digital: string[];
67
+ /** Analog input pin names. */
68
+ analog: string[];
69
+ /** PWM-capable pin names. */
70
+ pwm: string[];
71
+ /** Pin names marked as unsafe (for validation warnings). */
72
+ unsafe?: string[];
73
+ /** I2C bus pin assignments keyed by bus instance number. */
74
+ i2c: Record<number, {
75
+ sda: string;
76
+ scl: string;
77
+ }>;
78
+ /** SPI bus pin assignments keyed by bus instance number. */
79
+ spi: Record<number, {
80
+ mosi: string;
81
+ miso: string;
82
+ sck: string;
83
+ cs?: string;
84
+ }>;
85
+ /** UART bus pin assignments keyed by bus instance number. */
86
+ uart: Record<number, {
87
+ tx: string;
88
+ rx: string;
89
+ rts?: string;
90
+ cts?: string;
91
+ }>;
92
+ /** On-board LED pin name. */
93
+ led?: string;
94
+ /** On-board button pin name. */
95
+ button?: string;
96
+ }
97
+ export interface PeripheralInstance {
98
+ instance: number;
99
+ defaultPins: Record<string, string>;
100
+ alternatePins?: Record<string, string[]>;
101
+ }
102
+ export interface ADCDefinition {
103
+ instance: number;
104
+ channels: number;
105
+ /** Resolution in bits. */
106
+ resolution: number;
107
+ /** Default reference voltage (used when no analogReference() call precedes readVoltage()). */
108
+ referenceVoltage: number;
109
+ /** Pre-computed maximum ADC value: (1 << resolution) - 1. Used by readVoltage() and board(). */
110
+ maxValue: number;
111
+ /** Per-reference voltage map keyed by AnalogReference member name (e.g. { DEFAULT: 5.0, INTERNAL: 1.1 }). */
112
+ referenceVoltages?: Record<string, number>;
113
+ }
114
+ export interface DACDefinition {
115
+ instance: number;
116
+ /** Resolution in bits. */
117
+ resolution: number;
118
+ pins: string[];
119
+ }
120
+ export interface PWMDefinition {
121
+ channels: number;
122
+ /** Resolution in bits. */
123
+ resolution: number;
124
+ /** Maximum frequency in Hz. */
125
+ maxFrequency: number;
126
+ }
127
+ export interface USBDefinition {
128
+ type: 'device' | 'host' | 'otg';
129
+ vid: string;
130
+ pid: string;
131
+ }
132
+ export interface WiFiDefinition {
133
+ type: 'wifi' | 'wifi6';
134
+ supportsStation: boolean;
135
+ supportsAp: boolean;
136
+ }
137
+ export interface BluetoothDefinition {
138
+ type: 'classic' | 'ble' | 'dual';
139
+ version: string;
140
+ }
141
+ export interface TouchDefinition {
142
+ channels: number;
143
+ pins: string[];
144
+ }
145
+ export interface TimerDefinition {
146
+ instance: number;
147
+ /** Timer type classification. */
148
+ type: 'general' | 'high_speed' | 'rtc' | 'sys';
149
+ /** Register width in bits. */
150
+ bits: 8 | 16 | 32 | 64;
151
+ /** Counter frequency in Hz (if fixed). */
152
+ frequency?: number;
153
+ /** Features supported by this timer. */
154
+ features?: Array<'pwm' | 'capture' | 'compare' | 'interrupt' | 'dma'>;
155
+ }
156
+ export interface DMADefinition {
157
+ instance: number;
158
+ /** Number of independent DMA channels. */
159
+ channels: number;
160
+ /** Peripherals that can act as DMA triggers/destinations. */
161
+ peripherals?: string[];
162
+ /** Max transfer size in bytes per transaction. */
163
+ maxTransferSize?: number;
164
+ }
165
+ export interface PeripheralDefinitions {
166
+ /** Peripheral object name aliases (e.g. UART0 -> Serial). */
167
+ aliases?: Record<string, string>;
168
+ i2c: readonly PeripheralInstance[];
169
+ spi: readonly PeripheralInstance[];
170
+ uart: readonly PeripheralInstance[];
171
+ adc: readonly ADCDefinition[];
172
+ dac?: readonly DACDefinition[];
173
+ pwm: PWMDefinition;
174
+ usb?: USBDefinition;
175
+ wifi?: WiFiDefinition;
176
+ bluetooth?: BluetoothDefinition;
177
+ touch?: TouchDefinition;
178
+ /** Hardware timers available for application use. */
179
+ timers?: readonly TimerDefinition[];
180
+ /** DMA controllers available for high-speed transfers. */
181
+ dma?: readonly DMADefinition[];
182
+ }
183
+ export interface FeatureFlags {
184
+ multicore: boolean;
185
+ coreCount: number;
186
+ deepSleep: boolean;
187
+ watchdog: boolean;
188
+ externalInterrupts: boolean;
189
+ hardwareRng: boolean;
190
+ fpu: boolean;
191
+ }
192
+ export interface BuildConfig {
193
+ /** Framework-specific build identifiers (e.g., { 'my-framework': 'target:arch:board' }). */
194
+ frameworks?: Record<string, string>;
195
+ linkerScript?: string;
196
+ extraFlags?: string[];
197
+ defines?: Record<string, string>;
198
+ }
199
+ /**
200
+ * Intrinsic hardware definition for a Microcontroller (MCU).
201
+ * Describes the silicon capabilities that are independent of any board.
202
+ */
203
+ export interface MCUDefinition {
204
+ /** MCU identifier (e.g. "atmega328p"). */
205
+ id: string;
206
+ /** Human-readable name. */
207
+ name: string;
208
+ /** Target architecture. */
209
+ architecture: ArchitectureIdentifier;
210
+ /** Built-in memory specifications. */
211
+ memory: MemorySpec;
212
+ /** Intrinsic pin definitions and capabilities. */
213
+ pins: PinDefinitions;
214
+ /** Hardware peripheral instances. */
215
+ peripherals: PeripheralDefinitions;
216
+ /** Silicon-level features. */
217
+ features: FeatureFlags;
218
+ /** MCU-specific build configuration. */
219
+ build: BuildConfig;
220
+ }
221
+ /**
222
+ * Board definition manifest.
223
+ * Describes a specific PCB implementation that utilizes an MCU.
224
+ */
225
+ export interface BoardDefinition {
226
+ /** Board identifier (e.g. "my-board"). */
227
+ id: string;
228
+ /** Human-readable name. */
229
+ name: string;
230
+ /** Board vendor. */
231
+ vendor: string;
232
+ /** Board description. */
233
+ description?: string;
234
+ /** The MCU used on this board. */
235
+ mcu: MCUDefinition;
236
+ /** External clock speed in Hz. */
237
+ clockSpeed: number;
238
+ /**
239
+ * Memory specifications (extends/overrides MCU memory).
240
+ * Used for boards with external flash or RAM.
241
+ */
242
+ memory?: Partial<MemorySpec>;
243
+ /**
244
+ * Pin definitions (extends/overrides MCU pins).
245
+ * Used for board-level aliases (D0, LED), header mappings, etc.
246
+ */
247
+ pins: PinDefinitions;
248
+ /**
249
+ * Built-in peripherals (extends/overrides MCU peripherals).
250
+ * Used for board-level aliases (Serial, Wire, SPI).
251
+ */
252
+ peripherals: PeripheralDefinitions;
253
+ /** Build configuration (overrides/extends MCU build). */
254
+ build: BuildConfig;
255
+ /** Related board variants. */
256
+ variants?: string[];
257
+ }
@@ -0,0 +1,4 @@
1
+ // ---------------------------------------------------------------------------
2
+ // @typecad/cuttlefish/api/schema — Board definition manifest types
3
+ // ---------------------------------------------------------------------------
4
+ export {};
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Generate a heap-free static async runtime for C++ targets without <vector>.
3
+ *
4
+ * @param capacity Fixed number of timer/task slots. Keep small on constrained
5
+ * targets (e.g. 8 on AVR). Caps the number of simultaneously pending
6
+ * Async.sleep / sleepUntil / yield operations.
7
+ */
8
+ export declare function generateStaticAsyncRuntime(capacity: number): string;