@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
@@ -0,0 +1,217 @@
1
+ import type { TargetProfile as CoreTargetProfile, PlatformContext as CorePlatformContext, SourceSpan as CoreSourceSpan, Diagnostic as CoreDiagnostic } from "./api/shared/index.js";
2
+ export type EmitMode = "cpp" | "split";
3
+ export type TargetProfile = CoreTargetProfile;
4
+ export type PlatformContext = CorePlatformContext;
5
+ export type SourceSpan = CoreSourceSpan;
6
+ export interface SourceMapEntry {
7
+ generatedStartLine: number;
8
+ generatedStartColumn: number;
9
+ generatedEndLine: number;
10
+ generatedEndColumn: number;
11
+ tsSpan: SourceSpan;
12
+ nodeKind: string;
13
+ symbolName?: string;
14
+ }
15
+ export interface GeneratedSourceMap {
16
+ version: 1;
17
+ generatedFilePath: string;
18
+ sourceFilePath: string;
19
+ entries: SourceMapEntry[];
20
+ }
21
+ export interface MappedDiagnostic {
22
+ cppFilePath: string;
23
+ cppLine: number;
24
+ cppColumn: number;
25
+ message?: string;
26
+ mappedTsSpan?: SourceSpan;
27
+ nodeKind?: string;
28
+ symbolName?: string;
29
+ }
30
+ export type Diagnostic = CoreDiagnostic;
31
+ export interface TreeShakingOptions {
32
+ /** Enable tree-shaking (default: true) */
33
+ enabled?: boolean;
34
+ /** Keep enums even if not referenced (default: false) */
35
+ keepUnusedEnums?: boolean;
36
+ /** Keep classes even if not instantiated (default: false) */
37
+ keepUnusedClasses?: boolean;
38
+ /** Keep type aliases even if not used (default: false) */
39
+ keepUnusedTypeAliases?: boolean;
40
+ /** Keep top-level variables even if not referenced (default: false) */
41
+ keepUnusedVariables?: boolean;
42
+ /** Generate diagnostics for removed code (default: true) */
43
+ reportUnused?: boolean;
44
+ /** Additional symbols to treat as entry points */
45
+ entryPoints?: string[];
46
+ }
47
+ export interface TranspileOptions {
48
+ inputFile: string;
49
+ outDir?: string;
50
+ emitMode: EmitMode;
51
+ target: TargetProfile;
52
+ emitMaps: boolean;
53
+ platformContext?: PlatformContext;
54
+ /** Tree-shaking options for dead code elimination */
55
+ treeShaking?: TreeShakingOptions;
56
+ /**
57
+ * Board package specifier resolved from `cuttlefish.config.ts`.
58
+ * When present, `@typecad/board` imports are rewritten to this package
59
+ * (e.g. `'@typecad/board-arduino-uno'`).
60
+ */
61
+ boardPackage?: string;
62
+ /**
63
+ * Framework package for code generation strategy.
64
+ * Can be any framework package path, e.g. '@typecad/framework-arduino',
65
+ * '@typecad/framework-avr', or a custom local path.
66
+ * When not specified, the GenericStrategy (standard C++) is used.
67
+ */
68
+ frameworkPackage?: string;
69
+ /** Enable debug mode - inject breakpoint instrumentation */
70
+ debug?: boolean;
71
+ /** Skip TypeScript type-checking before transpilation (default: false) */
72
+ skipTypeCheck?: boolean;
73
+ /**
74
+ * Skip ESLint checks before transpilation (default: false).
75
+ * When false, ESLint errors in the user's `src/` abort the build, matching
76
+ * the type-check behavior. Mirrors `skipTypeCheck`.
77
+ */
78
+ skipLint?: boolean;
79
+ /**
80
+ * The user's project root — the directory containing `cuttlefish.config.ts`.
81
+ * The ESLint gate looks for `.cuttlefish/eslint.config.mjs` (or a root-level
82
+ * `eslint.config.mjs`) here, not under `src/`. When omitted, the entry file's
83
+ * directory is used as a fallback (suitable for ad-hoc API/test callers that
84
+ * pass a bare input file outside a configured project).
85
+ */
86
+ projectRoot?: string;
87
+ /**
88
+ * Force retranspilation of all files, ignoring incremental cache.
89
+ * Currently a no-op: incremental builds are disabled and every build already
90
+ * transpiles the full graph. Retained on the API for forward compatibility.
91
+ * (default: false)
92
+ */
93
+ force?: boolean;
94
+ /** Generate diagnostics.md and diagnostics.json reports (default: false) */
95
+ diagnostics?: boolean;
96
+ /** Display profile config from cuttlefish.config.ts */
97
+ display?: import("./api/shared/display-profile.js").DisplayConfig;
98
+ }
99
+ export interface LibraryDefinitionCondition {
100
+ target?: TargetProfile;
101
+ architecture?: string;
102
+ core?: string;
103
+ fqbnIncludes?: string;
104
+ }
105
+ interface LibraryDefinitionVariant {
106
+ when: LibraryDefinitionCondition;
107
+ include: string;
108
+ symbols?: Record<string, string>;
109
+ }
110
+ export interface LibraryDefinition {
111
+ module: string;
112
+ include: string;
113
+ symbols?: Record<string, string>;
114
+ variants?: LibraryDefinitionVariant[];
115
+ }
116
+ export interface CommandLineOptions {
117
+ command: "default" | "build" | "gen-libdefs" | "gen-decls" | "map-error" | "preview";
118
+ inputFile?: string;
119
+ emitMode: EmitMode;
120
+ target: TargetProfile;
121
+ outDir?: string;
122
+ emitMaps: boolean;
123
+ /** Skip transpilation (use existing generated files) */
124
+ noTranspile: boolean;
125
+ /** Compile using the framework toolchain after transpilation */
126
+ compile: boolean;
127
+ /** Upload using the framework toolchain after compilation (requires compile) */
128
+ upload: boolean;
129
+ /** Open serial monitor after upload */
130
+ monitor: boolean;
131
+ /** Serial port for upload and monitor (e.g. COM4 or /dev/ttyACM0) */
132
+ port?: string;
133
+ /** Baud rate for monitor (default: 9600) */
134
+ baud: number;
135
+ platformContext?: PlatformContext;
136
+ mapFile?: string;
137
+ cppFile?: string;
138
+ cppLine?: number;
139
+ cppColumn?: number;
140
+ message?: string;
141
+ /** Tree-shaking options */
142
+ treeShaking?: TreeShakingOptions;
143
+ /**
144
+ * Board package specifier resolved from `cuttlefish.config.ts`.
145
+ * When present, `@typecad/board` imports are rewritten to this package.
146
+ */
147
+ boardPackage?: string;
148
+ /**
149
+ * Framework package for code generation strategy.
150
+ * Can be '@typecad/framework-arduino', '@typecad/framework-avr', or a custom path.
151
+ */
152
+ frameworkPackage?: string;
153
+ /** Enable debug mode - inject breakpoint instrumentation */
154
+ debug?: boolean;
155
+ /** Skip TypeScript type-checking before transpilation */
156
+ skipTypeCheck?: boolean;
157
+ /** Force retranspilation of all files, ignoring cache. Currently a no-op: incremental builds are disabled. */
158
+ force?: boolean;
159
+ /** Watch for file changes and retranspile automatically */
160
+ watch: boolean;
161
+ /** Run hardware tests via @typecad/expect */
162
+ expect?: boolean;
163
+ /** Optional test file path filter for --expect */
164
+ expectFile?: string;
165
+ /** Generate diagnostics.md and diagnostics.json reports */
166
+ diagnostics?: boolean;
167
+ /** Config file for preview command */
168
+ configPath?: string;
169
+ /** Project root (dir of cuttlefish.config.ts); passed to transpileFile for the ESLint gate. */
170
+ projectRoot?: string;
171
+ }
172
+ export interface GenerateLibdefOptions {
173
+ inputFile: string;
174
+ outDir: string;
175
+ }
176
+ export interface GeneratedOutputs {
177
+ headerPath?: string;
178
+ sourcePath: string;
179
+ headerMapPath?: string;
180
+ sourceMapPath?: string;
181
+ diagnostics: Diagnostic[];
182
+ asyncTaskNames?: string[];
183
+ usesTimers?: boolean;
184
+ }
185
+ interface CompileErrorEntry {
186
+ filePath: string;
187
+ line: number;
188
+ column: number;
189
+ severity: "error" | "warning" | "note";
190
+ message: string;
191
+ }
192
+ export interface CompileResultType {
193
+ success: boolean;
194
+ output: string;
195
+ errors: CompileErrorEntry[];
196
+ }
197
+ export interface UploadResultType {
198
+ success: boolean;
199
+ output: string;
200
+ }
201
+ export interface CreateCommandOptions {
202
+ command: "create";
203
+ projectName?: string;
204
+ /** @deprecated Use target */
205
+ board?: string;
206
+ target?: string;
207
+ framework?: string;
208
+ baud?: number;
209
+ noSketch?: boolean;
210
+ outDir?: string;
211
+ }
212
+ export interface BoardAddCommandOptions {
213
+ command: "board-add";
214
+ specPath: string;
215
+ force?: boolean;
216
+ }
217
+ export {};
package/dist/types.js ADDED
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,4 @@
1
+ /** Dynamically load @typecad/ui/engine and register the hook.
2
+ * Called by transpile.ts at the start of each transpile run.
3
+ * Safe to call when @typecad/ui is absent (hook stays null). */
4
+ export declare function loadUIEngine(): Promise<void>;
@@ -0,0 +1,34 @@
1
+ // ---------------------------------------------------------------------------
2
+ // UI bridge — loads the UI engine from @typecad/ui and registers it.
3
+ //
4
+ // transpile.ts calls loadUIEngine() at the start of transpileFile(). If
5
+ // @typecad/ui is not installed, the import fails gracefully and the hook
6
+ // stays null — cuttlefish works as a pure TypeScript→C++ transpiler.
7
+ // ---------------------------------------------------------------------------
8
+ import { setUIHook } from "../ui-hook.js";
9
+ let loaded = false;
10
+ /** Dynamically load @typecad/ui/engine and register the hook.
11
+ * Called by transpile.ts at the start of each transpile run.
12
+ * Safe to call when @typecad/ui is absent (hook stays null). */
13
+ export async function loadUIEngine() {
14
+ if (loaded)
15
+ return;
16
+ loaded = true;
17
+ try {
18
+ // Dynamic import — @typecad/ui is optional. The module specifier is
19
+ // routed through a variable (rather than a string literal) so tsc types
20
+ // the result as `any` and never resolves @typecad/ui's declaration
21
+ // files while type-checking this file. A literal specifier here would
22
+ // make tsc load ui's dist/engine-index.d.ts, which imports back
23
+ // `@typecad/cuttlefish/ui-hook` — a self-referencing package path that
24
+ // resolves into this package's own dist/ output and causes TS5055
25
+ // ("would overwrite input file") on every rebuild where dist/ exists.
26
+ const uiEnginePath = "@typecad/ui/engine";
27
+ const engine = await import(uiEnginePath);
28
+ const hook = engine.registerTranspilerUI();
29
+ setUIHook(hook);
30
+ }
31
+ catch {
32
+ // @typecad/ui is not installed — cuttlefish works without UI support.
33
+ }
34
+ }
@@ -0,0 +1,84 @@
1
+ import type { Diagnostic } from "./api/shared/index.js";
2
+ export interface LoweredUI {
3
+ fontTables: string;
4
+ nodeTable: string;
5
+ transitionTable: string;
6
+ typeDecl: string;
7
+ keyboardLoaders: string;
8
+ keyboardDispatch: string;
9
+ screenCount: number;
10
+ imageTables: string;
11
+ keyframeTables: string;
12
+ scrollMemoryDiagnostics: Diagnostic[];
13
+ diagnostics: Diagnostic[];
14
+ }
15
+ export interface UIModule {
16
+ htmlPath: string;
17
+ typeDeclPath: string;
18
+ typeDeclSourceRoot: string;
19
+ typeDeclRoot: string;
20
+ styled: unknown;
21
+ allStyledScreens: unknown[];
22
+ keyboards: unknown[];
23
+ rules: unknown[];
24
+ fontFaces: unknown[];
25
+ fontAssets: unknown[];
26
+ rawKeyframes: unknown[];
27
+ diagnostics: Diagnostic[];
28
+ mountDiagnostics: Diagnostic[];
29
+ }
30
+ export interface LowerOptions {
31
+ colorFormat: "rgb565" | "rgb666" | "rgb888" | "mono";
32
+ storage: "progmem" | "flash";
33
+ viewport: {
34
+ width: number;
35
+ height: number;
36
+ };
37
+ }
38
+ export interface UiFileParts {
39
+ script: string;
40
+ style: string;
41
+ html: string;
42
+ }
43
+ /** The capabilities cuttlefish core needs from the UI engine. */
44
+ export interface TranspilerUIHook {
45
+ resetUIRegistry(): void;
46
+ loadUIModule(htmlPath: string): UIModule | undefined;
47
+ loadUIModuleFromText(htmlPath: string, htmlText: string, cssText: string, cssPathForFonts?: string): UIModule;
48
+ getUIModule(htmlPath: string): UIModule | undefined;
49
+ hasUIModule(htmlPath: string): boolean;
50
+ allUIModules(): UIModule[];
51
+ allLoweredUIModules(): Array<{
52
+ htmlPath: string;
53
+ lowered: LoweredUI;
54
+ }>;
55
+ markEntryHasUI(): void;
56
+ entryHasUI(): boolean;
57
+ clearEntryHasUI(): void;
58
+ lowerOnMount(htmlPath: string, opts: LowerOptions): LoweredUI;
59
+ resolveColor(input: string, format: "rgb565" | "rgb666" | "rgb888" | "mono"): number;
60
+ resolveColorInternal(input: string, format: "rgb565" | "rgb666" | "rgb888" | "mono"): number;
61
+ emitRuntimeHeader(): string;
62
+ splitUiFile(src: string): UiFileParts;
63
+ generateProjectUITypeDeclarations(projectRoot: string): {
64
+ written: string[];
65
+ errors: Array<{
66
+ filePath: string;
67
+ error: Error;
68
+ }>;
69
+ };
70
+ analyzeScrollMemory(styled: unknown, budget: number): Diagnostic[];
71
+ }
72
+ /** Set the UI hook. Called by transpile.ts after dynamically loading
73
+ * @typecad/ui/engine. Passing null clears it (end of transpile run). */
74
+ export declare function setUIHook(hook: TranspilerUIHook | null): void;
75
+ /** Get the current UI hook, or null if @typecad/ui is not loaded. */
76
+ export declare function getUIHook(): TranspilerUIHook | null;
77
+ /** Returns true if the UI hook is registered (i.e. @typecad/ui is loaded). */
78
+ export declare function hasUIHook(): boolean;
79
+ /** Get the UI hook, throwing if it's not set. Use in code paths that are
80
+ * only reached when UI is active (e.g. inside `if (entryHasUI())` blocks). */
81
+ export declare function requireUIHook(): TranspilerUIHook;
82
+ /** Returns true if the entry point has UI mounted. Safe to call when the
83
+ * hook is not set (returns false — no UI without the engine). */
84
+ export declare function entryHasUI(): boolean;
@@ -0,0 +1,45 @@
1
+ // ---------------------------------------------------------------------------
2
+ // TranspilerUIHook — the contract between cuttlefish core and the (optional)
3
+ // @typecad/ui package's transpiler engine.
4
+ //
5
+ // Cuttlefish core never statically imports from @typecad/ui. Instead, when UI
6
+ // usage is detected in user code, transpile.ts dynamically imports
7
+ // @typecad/ui/engine and calls its registerTranspilerUI() function, which
8
+ // returns an object implementing this interface. Core code then calls through
9
+ // getUIHook() instead of importing ui/ modules directly.
10
+ //
11
+ // When @typecad/ui is not installed, the hook stays null and UI processing is
12
+ // skipped — cuttlefish works as a pure TypeScript→C++ transpiler.
13
+ // ---------------------------------------------------------------------------
14
+ // ── Module-level hook state ────────────────────────────────────────────────
15
+ let uiHook = null;
16
+ /** Set the UI hook. Called by transpile.ts after dynamically loading
17
+ * @typecad/ui/engine. Passing null clears it (end of transpile run). */
18
+ export function setUIHook(hook) {
19
+ uiHook = hook;
20
+ }
21
+ /** Get the current UI hook, or null if @typecad/ui is not loaded. */
22
+ export function getUIHook() {
23
+ return uiHook;
24
+ }
25
+ /** Returns true if the UI hook is registered (i.e. @typecad/ui is loaded). */
26
+ export function hasUIHook() {
27
+ return uiHook !== null;
28
+ }
29
+ /** Get the UI hook, throwing if it's not set. Use in code paths that are
30
+ * only reached when UI is active (e.g. inside `if (entryHasUI())` blocks). */
31
+ export function requireUIHook() {
32
+ if (!uiHook) {
33
+ throw new Error("UI hook is not registered. This code path requires @typecad/ui to be " +
34
+ "installed and loaded. This should not happen — the hook is set at the " +
35
+ "start of transpileFile() when UI is detected.");
36
+ }
37
+ return uiHook;
38
+ }
39
+ // ── Convenience accessors for the most common queries ──────────────────────
40
+ // These wrap the null-check so call sites stay clean.
41
+ /** Returns true if the entry point has UI mounted. Safe to call when the
42
+ * hook is not set (returns false — no UI without the engine). */
43
+ export function entryHasUI() {
44
+ return uiHook !== null && uiHook.entryHasUI();
45
+ }
@@ -0,0 +1,3 @@
1
+ import { CommandLineOptions, CreateCommandOptions, BoardAddCommandOptions } from "../types.js";
2
+ export declare function printHelp(): void;
3
+ export declare function parseCommandLine(argv: string[]): CommandLineOptions | CreateCommandOptions | BoardAddCommandOptions | "help";