@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.
- package/LICENSE +21 -0
- package/README.md +79 -0
- package/dist/api/board-types.d.ts +1 -0
- package/dist/api/board-types.js +4 -0
- package/dist/api/capabilities.d.ts +12 -0
- package/dist/api/capabilities.js +1 -0
- package/dist/api/config.d.ts +120 -0
- package/dist/api/config.js +7 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.js +2 -0
- package/dist/api/schema/builder.d.ts +14 -0
- package/dist/api/schema/builder.js +15 -0
- package/dist/api/schema/index.d.ts +2 -0
- package/dist/api/schema/index.js +1 -0
- package/dist/api/schema/types.d.ts +257 -0
- package/dist/api/schema/types.js +4 -0
- package/dist/api/shared/async-runtime-static.d.ts +8 -0
- package/dist/api/shared/async-runtime-static.js +201 -0
- package/dist/api/shared/async-types.d.ts +42 -0
- package/dist/api/shared/async-types.js +8 -0
- package/dist/api/shared/board-resolver.d.ts +12 -0
- package/dist/api/shared/board-resolver.js +7 -0
- package/dist/api/shared/cpp-type-ir.d.ts +229 -0
- package/dist/api/shared/cpp-type-ir.js +672 -0
- package/dist/api/shared/display-adapter.d.ts +12 -0
- package/dist/api/shared/display-adapter.js +145 -0
- package/dist/api/shared/display-adapters/eink-mono.d.ts +2 -0
- package/dist/api/shared/display-adapters/eink-mono.js +53 -0
- package/dist/api/shared/display-adapters/sdl.d.ts +2 -0
- package/dist/api/shared/display-adapters/sdl.js +452 -0
- package/dist/api/shared/display-adapters/ssd1309.d.ts +2 -0
- package/dist/api/shared/display-adapters/ssd1309.js +136 -0
- package/dist/api/shared/display-adapters/st7796.d.ts +2 -0
- package/dist/api/shared/display-adapters/st7796.js +132 -0
- package/dist/api/shared/display-capabilities.d.ts +45 -0
- package/dist/api/shared/display-capabilities.js +54 -0
- package/dist/api/shared/display-op-ir.d.ts +62 -0
- package/dist/api/shared/display-op-ir.js +19 -0
- package/dist/api/shared/display-profile.d.ts +265 -0
- package/dist/api/shared/display-profile.js +338 -0
- package/dist/api/shared/graphics-strategy.d.ts +29 -0
- package/dist/api/shared/graphics-strategy.js +11 -0
- package/dist/api/shared/hal-op-ir.d.ts +393 -0
- package/dist/api/shared/hal-op-ir.js +18 -0
- package/dist/api/shared/index.d.ts +26 -0
- package/dist/api/shared/index.js +21 -0
- package/dist/api/shared/ir-core.d.ts +363 -0
- package/dist/api/shared/ir-core.js +8 -0
- package/dist/api/shared/ir-declarations.d.ts +201 -0
- package/dist/api/shared/ir-declarations.js +26 -0
- package/dist/api/shared/ir.d.ts +85 -0
- package/dist/api/shared/ir.js +13 -0
- package/dist/api/shared/platform-strategy.d.ts +402 -0
- package/dist/api/shared/platform-strategy.js +14 -0
- package/dist/api/shared/polyfill-helper-registry.d.ts +11 -0
- package/dist/api/shared/polyfill-helper-registry.js +86 -0
- package/dist/api/shared/polyfill-types.d.ts +33 -0
- package/dist/api/shared/polyfill-types.js +76 -0
- package/dist/api/shared/promise-runtime.d.ts +10 -0
- package/dist/api/shared/promise-runtime.js +244 -0
- package/dist/api/shared/snprintf-types.d.ts +29 -0
- package/dist/api/shared/snprintf-types.js +8 -0
- package/dist/api/shared/string-method-registry.d.ts +53 -0
- package/dist/api/shared/string-method-registry.js +168 -0
- package/dist/api/shared/toolchain-types.d.ts +63 -0
- package/dist/api/shared/toolchain-types.js +71 -0
- package/dist/api/shared/types.d.ts +50 -0
- package/dist/api/shared/types.js +6 -0
- package/dist/ast/parse.d.ts +2 -0
- package/dist/ast/parse.js +4 -0
- package/dist/cache.d.ts +26 -0
- package/dist/cache.js +95 -0
- package/dist/cli-utils.d.ts +37 -0
- package/dist/cli-utils.js +250 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.js +635 -0
- package/dist/config-loader.d.ts +78 -0
- package/dist/config-loader.js +508 -0
- package/dist/config-schema.d.ts +233 -0
- package/dist/config-schema.js +83 -0
- package/dist/create/board-checklist.d.ts +2 -0
- package/dist/create/board-checklist.js +52 -0
- package/dist/create/board-codegen.d.ts +9 -0
- package/dist/create/board-codegen.js +238 -0
- package/dist/create/board-generators.d.ts +12 -0
- package/dist/create/board-generators.js +652 -0
- package/dist/create/board-spec.d.ts +640 -0
- package/dist/create/board-spec.js +215 -0
- package/dist/create/eslint-rules-template.d.ts +2 -0
- package/dist/create/eslint-rules-template.js +672 -0
- package/dist/create/index.d.ts +11 -0
- package/dist/create/index.js +8 -0
- package/dist/create/init-scaffold.d.ts +27 -0
- package/dist/create/init-scaffold.js +150 -0
- package/dist/create/init-templates.d.ts +24 -0
- package/dist/create/init-templates.js +379 -0
- package/dist/create/init-wizard.d.ts +8 -0
- package/dist/create/init-wizard.js +168 -0
- package/dist/debug/breakpoint-loader.d.ts +24 -0
- package/dist/debug/breakpoint-loader.js +137 -0
- package/dist/debug/index.d.ts +3 -0
- package/dist/debug/index.js +7 -0
- package/dist/debug/preprocessor.d.ts +9 -0
- package/dist/debug/preprocessor.js +214 -0
- package/dist/debug/types.d.ts +32 -0
- package/dist/debug/types.js +6 -0
- package/dist/diagnostics/diagnostics-report.d.ts +51 -0
- package/dist/diagnostics/diagnostics-report.js +333 -0
- package/dist/diagnostics/json-schema.d.ts +138 -0
- package/dist/diagnostics/json-schema.js +27 -0
- package/dist/diagnostics/md-writer.d.ts +10 -0
- package/dist/diagnostics/md-writer.js +336 -0
- package/dist/diagnostics/mermaid-builder.d.ts +65 -0
- package/dist/diagnostics/mermaid-builder.js +681 -0
- package/dist/emit/cpp-emitter.d.ts +6 -0
- package/dist/emit/cpp-emitter.js +48 -0
- package/dist/emit/emitters/class-emitter.d.ts +2 -0
- package/dist/emit/emitters/class-emitter.js +523 -0
- package/dist/emit/emitters/emitter-context.d.ts +174 -0
- package/dist/emit/emitters/emitter-context.js +1 -0
- package/dist/emit/emitters/entrypoint-synthesizer.d.ts +2 -0
- package/dist/emit/emitters/entrypoint-synthesizer.js +175 -0
- package/dist/emit/emitters/function-emitter-impl.d.ts +19 -0
- package/dist/emit/emitters/function-emitter-impl.js +428 -0
- package/dist/emit/emitters/line-appender.d.ts +15 -0
- package/dist/emit/emitters/line-appender.js +344 -0
- package/dist/emit/emitters/namespace-emitter.d.ts +2 -0
- package/dist/emit/emitters/namespace-emitter.js +324 -0
- package/dist/emit/emitters/output-finalizer.d.ts +4 -0
- package/dist/emit/emitters/output-finalizer.js +267 -0
- package/dist/emit/emitters/setup.d.ts +3 -0
- package/dist/emit/emitters/setup.js +851 -0
- package/dist/emit/emitters/top-level-prep.d.ts +2 -0
- package/dist/emit/emitters/top-level-prep.js +706 -0
- package/dist/emit/emitters/type-decl-emitter.d.ts +2 -0
- package/dist/emit/emitters/type-decl-emitter.js +251 -0
- package/dist/emit/emitters/ui-emitter.d.ts +21 -0
- package/dist/emit/emitters/ui-emitter.js +564 -0
- package/dist/emit/enum-emitter.d.ts +1 -0
- package/dist/emit/enum-emitter.js +1 -0
- package/dist/emit/expression-renderer.d.ts +283 -0
- package/dist/emit/expression-renderer.js +1477 -0
- package/dist/emit/native-helpers-emitter.d.ts +11 -0
- package/dist/emit/native-helpers-emitter.js +34 -0
- package/dist/emit/route-hal-op.d.ts +5 -0
- package/dist/emit/route-hal-op.js +13 -0
- package/dist/emit/snprintf-helpers.d.ts +17 -0
- package/dist/emit/snprintf-helpers.js +462 -0
- package/dist/emit/statement-renderer.d.ts +189 -0
- package/dist/emit/statement-renderer.js +948 -0
- package/dist/emit/utils/async-state-machine.d.ts +42 -0
- package/dist/emit/utils/async-state-machine.js +343 -0
- package/dist/emit/utils/comment-helpers.d.ts +20 -0
- package/dist/emit/utils/comment-helpers.js +31 -0
- package/dist/emit/utils/cpp-helpers.d.ts +47 -0
- package/dist/emit/utils/cpp-helpers.js +85 -0
- package/dist/emit/utils/include-resolver.d.ts +58 -0
- package/dist/emit/utils/include-resolver.js +155 -0
- package/dist/emit/utils/index.d.ts +8 -0
- package/dist/emit/utils/index.js +12 -0
- package/dist/emit/utils/type-inference.d.ts +159 -0
- package/dist/emit/utils/type-inference.js +559 -0
- package/dist/eslint-check.d.ts +10 -0
- package/dist/eslint-check.js +102 -0
- package/dist/framework-package.d.ts +10 -0
- package/dist/framework-package.js +58 -0
- package/dist/framework-registry.d.ts +39 -0
- package/dist/framework-registry.js +30 -0
- package/dist/incremental-cache.d.ts +116 -0
- package/dist/incremental-cache.js +335 -0
- package/dist/ir/adc-range-validation.d.ts +11 -0
- package/dist/ir/adc-range-validation.js +250 -0
- package/dist/ir/ast-node-utils.d.ts +8 -0
- package/dist/ir/ast-node-utils.js +32 -0
- package/dist/ir/board-pin-utils.d.ts +13 -0
- package/dist/ir/board-pin-utils.js +65 -0
- package/dist/ir/board-resolver.d.ts +36 -0
- package/dist/ir/board-resolver.js +437 -0
- package/dist/ir/build-ir-state.d.ts +167 -0
- package/dist/ir/build-ir-state.js +306 -0
- package/dist/ir/build-ir.d.ts +2 -0
- package/dist/ir/build-ir.js +808 -0
- package/dist/ir/call-graph.d.ts +35 -0
- package/dist/ir/call-graph.js +194 -0
- package/dist/ir/compile-time-only.d.ts +2 -0
- package/dist/ir/compile-time-only.js +16 -0
- package/dist/ir/declaration-builders.d.ts +9 -0
- package/dist/ir/declaration-builders.js +608 -0
- package/dist/ir/entry-points.d.ts +30 -0
- package/dist/ir/entry-points.js +191 -0
- package/dist/ir/expression-to-ir.d.ts +5 -0
- package/dist/ir/expression-to-ir.js +2249 -0
- package/dist/ir/extract-property-chain.d.ts +10 -0
- package/dist/ir/extract-property-chain.js +30 -0
- package/dist/ir/feature-prescan.d.ts +3 -0
- package/dist/ir/feature-prescan.js +43 -0
- package/dist/ir/feature-registry.d.ts +30 -0
- package/dist/ir/feature-registry.js +816 -0
- package/dist/ir/filter.d.ts +7 -0
- package/dist/ir/filter.js +85 -0
- package/dist/ir/function-builder.d.ts +19 -0
- package/dist/ir/function-builder.js +670 -0
- package/dist/ir/hal/hal-emitter.d.ts +62 -0
- package/dist/ir/hal/hal-emitter.js +735 -0
- package/dist/ir/hal/hal-parser.d.ts +61 -0
- package/dist/ir/hal/hal-parser.js +473 -0
- package/dist/ir/hal/hal-plugins.d.ts +34 -0
- package/dist/ir/hal/hal-plugins.js +706 -0
- package/dist/ir/hal-resolver.d.ts +5 -0
- package/dist/ir/hal-resolver.js +5 -0
- package/dist/ir/heap-analysis.d.ts +8 -0
- package/dist/ir/heap-analysis.js +350 -0
- package/dist/ir/heap-array-validation.d.ts +24 -0
- package/dist/ir/heap-array-validation.js +29 -0
- package/dist/ir/identifier-collector.d.ts +18 -0
- package/dist/ir/identifier-collector.js +439 -0
- package/dist/ir/interrupt-analysis.d.ts +39 -0
- package/dist/ir/interrupt-analysis.js +467 -0
- package/dist/ir/memory-budget-validation.d.ts +10 -0
- package/dist/ir/memory-budget-validation.js +86 -0
- package/dist/ir/namespace-builder.d.ts +7 -0
- package/dist/ir/namespace-builder.js +152 -0
- package/dist/ir/ownership-analysis.d.ts +9 -0
- package/dist/ir/ownership-analysis.js +1207 -0
- package/dist/ir/peripheral-ownership.d.ts +3 -0
- package/dist/ir/peripheral-ownership.js +152 -0
- package/dist/ir/peripheral-symbols.d.ts +7 -0
- package/dist/ir/peripheral-symbols.js +57 -0
- package/dist/ir/peripheral-usage.d.ts +54 -0
- package/dist/ir/peripheral-usage.js +691 -0
- package/dist/ir/peripheral-validation.d.ts +8 -0
- package/dist/ir/peripheral-validation.js +77 -0
- package/dist/ir/pin-alias-conflict.d.ts +4 -0
- package/dist/ir/pin-alias-conflict.js +34 -0
- package/dist/ir/pin-capability-validation.d.ts +6 -0
- package/dist/ir/pin-capability-validation.js +413 -0
- package/dist/ir/pin-mode-validation.d.ts +10 -0
- package/dist/ir/pin-mode-validation.js +301 -0
- package/dist/ir/pin-safety.d.ts +11 -0
- package/dist/ir/pin-safety.js +58 -0
- package/dist/ir/program-analysis.d.ts +44 -0
- package/dist/ir/program-analysis.js +589 -0
- package/dist/ir/pulldown-validation.d.ts +7 -0
- package/dist/ir/pulldown-validation.js +49 -0
- package/dist/ir/pwm-timer-sharing.d.ts +4 -0
- package/dist/ir/pwm-timer-sharing.js +93 -0
- package/dist/ir/reachability.d.ts +68 -0
- package/dist/ir/reachability.js +224 -0
- package/dist/ir/register-decorators.d.ts +6 -0
- package/dist/ir/register-decorators.js +49 -0
- package/dist/ir/render-expr.d.ts +4 -0
- package/dist/ir/render-expr.js +127 -0
- package/dist/ir/resource-analysis.d.ts +19 -0
- package/dist/ir/resource-analysis.js +153 -0
- package/dist/ir/statement-to-ir.d.ts +23 -0
- package/dist/ir/statement-to-ir.js +349 -0
- package/dist/ir/symbol-table.d.ts +68 -0
- package/dist/ir/symbol-table.js +179 -0
- package/dist/ir/symbol-types.d.ts +56 -0
- package/dist/ir/symbol-types.js +107 -0
- package/dist/ir/timer0-pwm-timing-conflict.d.ts +4 -0
- package/dist/ir/timer0-pwm-timing-conflict.js +71 -0
- package/dist/ir/timing-validation.d.ts +7 -0
- package/dist/ir/timing-validation.js +95 -0
- package/dist/ir/transformers/array-methods.d.ts +8 -0
- package/dist/ir/transformers/array-methods.js +493 -0
- package/dist/ir/transformers/call-statement.d.ts +5 -0
- package/dist/ir/transformers/call-statement.js +758 -0
- package/dist/ir/transformers/callback-context-registry.d.ts +20 -0
- package/dist/ir/transformers/callback-context-registry.js +55 -0
- package/dist/ir/transformers/canvas-lowering.d.ts +42 -0
- package/dist/ir/transformers/canvas-lowering.js +249 -0
- package/dist/ir/transformers/control-flow.d.ts +8 -0
- package/dist/ir/transformers/control-flow.js +508 -0
- package/dist/ir/transformers/expressions.d.ts +7 -0
- package/dist/ir/transformers/expressions.js +406 -0
- package/dist/ir/transformers/hal-call-resolver.d.ts +29 -0
- package/dist/ir/transformers/hal-call-resolver.js +274 -0
- package/dist/ir/transformers/hal-emit-helpers.d.ts +14 -0
- package/dist/ir/transformers/hal-emit-helpers.js +63 -0
- package/dist/ir/transformers/namespace-methods.d.ts +20 -0
- package/dist/ir/transformers/namespace-methods.js +110 -0
- package/dist/ir/transformers/register-assignment.d.ts +5 -0
- package/dist/ir/transformers/register-assignment.js +56 -0
- package/dist/ir/transformers/ui-call-resolver.d.ts +149 -0
- package/dist/ir/transformers/ui-call-resolver.js +1136 -0
- package/dist/ir/transformers/ui-callback-lowering.d.ts +62 -0
- package/dist/ir/transformers/ui-callback-lowering.js +623 -0
- package/dist/ir/transformers/ui-mount.d.ts +20 -0
- package/dist/ir/transformers/ui-mount.js +35 -0
- package/dist/ir/transformers/ui-reactive.d.ts +68 -0
- package/dist/ir/transformers/ui-reactive.js +129 -0
- package/dist/ir/transformers/variables.d.ts +14 -0
- package/dist/ir/transformers/variables.js +1045 -0
- package/dist/ir/try-catch-validation.d.ts +26 -0
- package/dist/ir/try-catch-validation.js +128 -0
- package/dist/ir/type-resolution.d.ts +31 -0
- package/dist/ir/type-resolution.js +977 -0
- package/dist/ir/ui-element-auto-wire.d.ts +50 -0
- package/dist/ir/ui-element-auto-wire.js +218 -0
- package/dist/ir/unit-suspicion-validation.d.ts +12 -0
- package/dist/ir/unit-suspicion-validation.js +296 -0
- package/dist/ir/utils/walk-ir.d.ts +6 -0
- package/dist/ir/utils/walk-ir.js +162 -0
- package/dist/ir/validation-orchestrator.d.ts +4 -0
- package/dist/ir/validation-orchestrator.js +45 -0
- package/dist/libdef/base-class-resolver.d.ts +23 -0
- package/dist/libdef/base-class-resolver.js +50 -0
- package/dist/libdef/cpp-to-decl.d.ts +34 -0
- package/dist/libdef/cpp-to-decl.js +584 -0
- package/dist/libdef/header-parser.d.ts +53 -0
- package/dist/libdef/header-parser.js +269 -0
- package/dist/libdef/registry.d.ts +10 -0
- package/dist/libdef/registry.js +142 -0
- package/dist/mapping/peripheral-names.d.ts +23 -0
- package/dist/mapping/peripheral-names.js +63 -0
- package/dist/mapping/source-map.d.ts +46 -0
- package/dist/mapping/source-map.js +207 -0
- package/dist/orchestrator/dts-generator.d.ts +17 -0
- package/dist/orchestrator/dts-generator.js +83 -0
- package/dist/orchestrator/graph-builder.d.ts +18 -0
- package/dist/orchestrator/graph-builder.js +218 -0
- package/dist/orchestrator/semantic-facts-verifier.d.ts +38 -0
- package/dist/orchestrator/semantic-facts-verifier.js +121 -0
- package/dist/orchestrator/semantic-facts.d.ts +141 -0
- package/dist/orchestrator/semantic-facts.js +652 -0
- package/dist/orchestrator/type-checker.d.ts +39 -0
- package/dist/orchestrator/type-checker.js +760 -0
- package/dist/platform/async-runtime.d.ts +8 -0
- package/dist/platform/async-runtime.js +26 -0
- package/dist/platform/generic-strategy.d.ts +101 -0
- package/dist/platform/generic-strategy.js +289 -0
- package/dist/platform/index.d.ts +4 -0
- package/dist/platform/index.js +9 -0
- package/dist/platform/registry.d.ts +21 -0
- package/dist/platform/registry.js +42 -0
- package/dist/platform/toolchain.d.ts +4 -0
- package/dist/platform/toolchain.js +43 -0
- package/dist/preview/client.d.ts +1 -0
- package/dist/preview/client.js +137 -0
- package/dist/preview/server.d.ts +5 -0
- package/dist/preview/server.js +199 -0
- package/dist/profiler/index.d.ts +28 -0
- package/dist/profiler/index.js +28 -0
- package/dist/profiler/profiler.d.ts +95 -0
- package/dist/profiler/profiler.js +338 -0
- package/dist/profiler/types.d.ts +87 -0
- package/dist/profiler/types.js +12 -0
- package/dist/stores/display-profile-store.d.ts +16 -0
- package/dist/stores/display-profile-store.js +48 -0
- package/dist/stores/theme-store.d.ts +13 -0
- package/dist/stores/theme-store.js +30 -0
- package/dist/testing.d.ts +45 -0
- package/dist/testing.js +47 -0
- package/dist/transpile/resolution.d.ts +29 -0
- package/dist/transpile/resolution.js +282 -0
- package/dist/transpile.d.ts +3 -0
- package/dist/transpile.js +722 -0
- package/dist/types.d.ts +217 -0
- package/dist/types.js +1 -0
- package/dist/ui/ui-bridge.d.ts +4 -0
- package/dist/ui/ui-bridge.js +34 -0
- package/dist/ui-hook.d.ts +84 -0
- package/dist/ui-hook.js +45 -0
- package/dist/utils/cli.d.ts +3 -0
- package/dist/utils/cli.js +463 -0
- package/dist/utils/fs.d.ts +4 -0
- package/dist/utils/fs.js +23 -0
- package/dist/utils/logger.d.ts +2 -0
- package/dist/utils/logger.js +8 -0
- package/dist/utils/strings.d.ts +35 -0
- package/dist/utils/strings.js +142 -0
- package/dist/utils/ui.d.ts +66 -0
- package/dist/utils/ui.js +149 -0
- package/dist/watch.d.ts +35 -0
- package/dist/watch.js +111 -0
- package/package.json +127 -0
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Default entry point configuration (internal)
|
|
3
|
+
*/
|
|
4
|
+
const DEFAULT_ENTRY_POINT_CONFIG = {
|
|
5
|
+
defaultEntryPoints: ["main"],
|
|
6
|
+
customEntryPoints: [],
|
|
7
|
+
};
|
|
8
|
+
/**
|
|
9
|
+
* Detect entry points for a program.
|
|
10
|
+
*
|
|
11
|
+
* @param program The IR program to analyze
|
|
12
|
+
* @param config Entry point configuration
|
|
13
|
+
* @param entryPointNames Explicit entry point names (overrides config defaults).
|
|
14
|
+
* Derived from the platform strategy's `entrypointFunctionName()`
|
|
15
|
+
* and `requiresLoopFunction()` at the call site.
|
|
16
|
+
*/
|
|
17
|
+
export function detectEntryPoints(program, config = {}, entryPointNames) {
|
|
18
|
+
const effectiveConfig = { ...DEFAULT_ENTRY_POINT_CONFIG, ...config };
|
|
19
|
+
const entryPoints = new Set();
|
|
20
|
+
// Always include top-level statements as an entry point
|
|
21
|
+
entryPoints.add("__top_level__");
|
|
22
|
+
// Get defined function names
|
|
23
|
+
const definedFunctions = new Set(program.functions.map((fn) => fn.originalName));
|
|
24
|
+
// Get defined class names
|
|
25
|
+
const definedClasses = new Set(program.classes.map((cls) => cls.name));
|
|
26
|
+
// Add target-specific entry points
|
|
27
|
+
const targetEntryPoints = entryPointNames ?? effectiveConfig.defaultEntryPoints;
|
|
28
|
+
for (const entryPoint of targetEntryPoints) {
|
|
29
|
+
if (definedFunctions.has(entryPoint)) {
|
|
30
|
+
entryPoints.add(entryPoint);
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
// Add custom entry points
|
|
34
|
+
const definedEnums = new Set(program.enums.map((e) => e.name));
|
|
35
|
+
for (const entryPoint of effectiveConfig.customEntryPoints) {
|
|
36
|
+
if (definedFunctions.has(entryPoint) || definedClasses.has(entryPoint) || definedEnums.has(entryPoint)) {
|
|
37
|
+
entryPoints.add(entryPoint);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// Detect classes instantiated at top level
|
|
41
|
+
const topLevelInstantiatedClasses = detectTopLevelInstantiations(program);
|
|
42
|
+
for (const className of topLevelInstantiatedClasses) {
|
|
43
|
+
entryPoints.add(className);
|
|
44
|
+
}
|
|
45
|
+
// Detect functions called at top level
|
|
46
|
+
const topLevelCalledFunctions = detectTopLevelCalls(program);
|
|
47
|
+
for (const functionName of topLevelCalledFunctions) {
|
|
48
|
+
if (definedFunctions.has(functionName)) {
|
|
49
|
+
entryPoints.add(functionName);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
return entryPoints;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Detect classes that are instantiated at the top level
|
|
56
|
+
*/
|
|
57
|
+
function detectTopLevelInstantiations(program) {
|
|
58
|
+
const instantiatedClasses = new Set();
|
|
59
|
+
const checkExpression = (expr) => {
|
|
60
|
+
if (expr.kind === "raw") {
|
|
61
|
+
// Check for 'new ClassName(' pattern
|
|
62
|
+
const newMatch = expr.value.match(/new\s+([A-Za-z_][A-Za-z0-9_]*)/);
|
|
63
|
+
if (newMatch) {
|
|
64
|
+
instantiatedClasses.add(newMatch[1]);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Recursively check nested expressions
|
|
68
|
+
if (expr.kind === "array") {
|
|
69
|
+
for (const element of expr.elements) {
|
|
70
|
+
checkExpression(element);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (expr.kind === "object") {
|
|
74
|
+
for (const field of expr.fields) {
|
|
75
|
+
checkExpression(field.value);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
else if (expr.kind === "ternary") {
|
|
79
|
+
checkExpression(expr.condition);
|
|
80
|
+
checkExpression(expr.whenTrue);
|
|
81
|
+
checkExpression(expr.whenFalse);
|
|
82
|
+
}
|
|
83
|
+
else if (expr.kind === "await") {
|
|
84
|
+
checkExpression(expr.value);
|
|
85
|
+
}
|
|
86
|
+
else if (expr.kind === "spread_array") {
|
|
87
|
+
checkExpression(expr.spreadExpr);
|
|
88
|
+
for (const element of expr.additionalElements) {
|
|
89
|
+
checkExpression(element);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
const checkStatement = (statement) => {
|
|
94
|
+
if (statement.kind === "var_decl" && statement.initializer) {
|
|
95
|
+
checkExpression(statement.initializer);
|
|
96
|
+
}
|
|
97
|
+
else if (statement.kind === "assign") {
|
|
98
|
+
checkExpression(statement.value);
|
|
99
|
+
}
|
|
100
|
+
else if (statement.kind === "call") {
|
|
101
|
+
for (const arg of statement.args) {
|
|
102
|
+
checkExpression(arg);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
else if (statement.kind === "return" && statement.value) {
|
|
106
|
+
checkExpression(statement.value);
|
|
107
|
+
}
|
|
108
|
+
// Check nested statements
|
|
109
|
+
if ("body" in statement && Array.isArray(statement.body)) {
|
|
110
|
+
for (const nested of statement.body) {
|
|
111
|
+
checkStatement(nested);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if ("thenBranch" in statement && Array.isArray(statement.thenBranch)) {
|
|
115
|
+
for (const nested of statement.thenBranch) {
|
|
116
|
+
checkStatement(nested);
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if ("elseBranch" in statement && Array.isArray(statement.elseBranch)) {
|
|
120
|
+
for (const nested of statement.elseBranch) {
|
|
121
|
+
checkStatement(nested);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
for (const statement of program.topLevelStatements) {
|
|
126
|
+
checkStatement(statement);
|
|
127
|
+
}
|
|
128
|
+
return instantiatedClasses;
|
|
129
|
+
}
|
|
130
|
+
/**
|
|
131
|
+
* Detect functions that are called at the top level
|
|
132
|
+
*/
|
|
133
|
+
function detectTopLevelCalls(program) {
|
|
134
|
+
const calledFunctions = new Set();
|
|
135
|
+
const checkStatement = (statement) => {
|
|
136
|
+
if (statement.kind === "call") {
|
|
137
|
+
// Extract the base function name (before any dot or parenthesis)
|
|
138
|
+
const baseName = statement.callee.split(/[.(]/)[0];
|
|
139
|
+
calledFunctions.add(baseName);
|
|
140
|
+
}
|
|
141
|
+
// Check nested statements
|
|
142
|
+
if ("body" in statement && Array.isArray(statement.body)) {
|
|
143
|
+
for (const nested of statement.body) {
|
|
144
|
+
checkStatement(nested);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
if ("thenBranch" in statement && Array.isArray(statement.thenBranch)) {
|
|
148
|
+
for (const nested of statement.thenBranch) {
|
|
149
|
+
checkStatement(nested);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
if ("elseBranch" in statement && Array.isArray(statement.elseBranch)) {
|
|
153
|
+
for (const nested of statement.elseBranch) {
|
|
154
|
+
checkStatement(nested);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
};
|
|
158
|
+
for (const statement of program.topLevelStatements) {
|
|
159
|
+
checkStatement(statement);
|
|
160
|
+
}
|
|
161
|
+
return calledFunctions;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Detect symbols in a program that are imported by other files in the project.
|
|
165
|
+
* These become additional entry points for tree-shaking so they aren't
|
|
166
|
+
* eliminated as "unused" when they are only used externally.
|
|
167
|
+
*
|
|
168
|
+
* @param program The IR for one file
|
|
169
|
+
* @param importedByOtherFiles Symbol names that other files import from this one
|
|
170
|
+
* @returns Set of symbol names that should be treated as entry points
|
|
171
|
+
*/
|
|
172
|
+
export function detectExportedEntryPoints(program, importedByOtherFiles) {
|
|
173
|
+
const entryPoints = new Set();
|
|
174
|
+
if (importedByOtherFiles.size === 0)
|
|
175
|
+
return entryPoints;
|
|
176
|
+
const definedFunctions = new Set(program.functions.map(fn => fn.originalName));
|
|
177
|
+
const definedClasses = new Set(program.classes.map(cls => cls.name));
|
|
178
|
+
const definedEnums = new Set(program.enums.map(e => e.name));
|
|
179
|
+
const definedTypeAliases = new Set(program.typeAliases.map(ta => ta.name));
|
|
180
|
+
for (const symbol of importedByOtherFiles) {
|
|
181
|
+
if (definedFunctions.has(symbol))
|
|
182
|
+
entryPoints.add(symbol);
|
|
183
|
+
if (definedClasses.has(symbol))
|
|
184
|
+
entryPoints.add(symbol);
|
|
185
|
+
if (definedEnums.has(symbol))
|
|
186
|
+
entryPoints.add(symbol);
|
|
187
|
+
if (definedTypeAliases.has(symbol))
|
|
188
|
+
entryPoints.add(symbol);
|
|
189
|
+
}
|
|
190
|
+
return entryPoints;
|
|
191
|
+
}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { Diagnostic } from "../types.js";
|
|
3
|
+
import { ExpressionIR } from "../api/index.js";
|
|
4
|
+
import { PointerTracker } from "./build-ir-state.js";
|
|
5
|
+
export declare function expressionToIR(expr: ts.Expression, sourceText: string, diagnostics: Diagnostic[], pointerVars?: PointerTracker): ExpressionIR;
|