redscript-mc 2.0.0 → 2.1.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/.claudeignore +21 -0
- package/README.md +48 -16
- package/README.zh.md +2 -2
- package/dist/cli.js +0 -0
- package/dist/src/__tests__/budget.test.js +261 -0
- package/dist/src/__tests__/diagnostics.test.js +2 -3
- package/dist/src/__tests__/e2e/coroutine.test.d.ts +7 -0
- package/dist/src/__tests__/e2e/coroutine.test.js +132 -0
- package/dist/{src2 → src}/__tests__/e2e/macros.test.js +1 -1
- package/dist/{src2 → src}/__tests__/e2e/migrate.test.js +1 -1
- package/dist/src/__tests__/e2e/stdlib-e2e.test.d.ts +10 -0
- package/dist/src/__tests__/e2e/stdlib-e2e.test.js +324 -0
- package/dist/src/__tests__/enum.test.d.ts +10 -0
- package/dist/src/__tests__/enum.test.js +389 -0
- package/dist/src/__tests__/generics.test.d.ts +14 -0
- package/dist/src/__tests__/generics.test.js +367 -0
- package/dist/{src2 → src}/__tests__/hir/desugar.test.js +2 -2
- package/dist/src/__tests__/incremental.test.d.ts +5 -0
- package/dist/src/__tests__/incremental.test.js +308 -0
- package/dist/src/__tests__/lsp.test.d.ts +7 -0
- package/dist/src/__tests__/lsp.test.js +321 -0
- package/dist/src/__tests__/mc-syntax.test.js +1 -6
- package/dist/src/__tests__/mc-version.test.d.ts +10 -0
- package/dist/src/__tests__/mc-version.test.js +154 -0
- package/dist/{src2 → src}/__tests__/mir/arithmetic.test.js +2 -2
- package/dist/{src2 → src}/__tests__/mir/control-flow.test.js +2 -2
- package/dist/src/__tests__/modules.test.d.ts +7 -0
- package/dist/src/__tests__/modules.test.js +333 -0
- package/dist/src/__tests__/optimizer/coroutine.test.d.ts +12 -0
- package/dist/src/__tests__/optimizer/coroutine.test.js +251 -0
- package/dist/src/__tests__/optimizer/interprocedural.test.js +145 -0
- package/dist/src/__tests__/optimizer/lir/const_imm.test.js +138 -0
- package/dist/src/__tests__/optimizer/lir/dead_slot.test.js +141 -0
- package/dist/src/__tests__/optimizer/lir/peephole.test.js +126 -0
- package/dist/src/__tests__/optimizer/lir/pipeline.test.js +84 -0
- package/dist/src/__tests__/optimizer/nbt-batch.test.js +110 -0
- package/dist/src/__tests__/optimizer/selector-cache.test.js +103 -0
- package/dist/src/__tests__/optimizer/unroll.test.js +206 -0
- package/dist/src/__tests__/option.test.d.ts +14 -0
- package/dist/src/__tests__/option.test.js +275 -0
- package/dist/src/__tests__/schedule.test.d.ts +7 -0
- package/dist/src/__tests__/schedule.test.js +98 -0
- package/dist/src/__tests__/sourcemap.test.d.ts +7 -0
- package/dist/src/__tests__/sourcemap.test.js +227 -0
- package/dist/src/__tests__/stdlib-include.test.js +86 -0
- package/dist/src/__tests__/tuple.test.d.ts +11 -0
- package/dist/src/__tests__/tuple.test.js +202 -0
- package/dist/src/__tests__/typechecker-strict.test.d.ts +10 -0
- package/dist/src/__tests__/typechecker-strict.test.js +197 -0
- package/dist/src/ast/types.d.ts +56 -2
- package/dist/src/cache/deps.d.ts +41 -0
- package/dist/src/cache/deps.js +158 -0
- package/dist/src/cache/incremental.d.ts +35 -0
- package/dist/src/cache/incremental.js +165 -0
- package/dist/src/cache/index.d.ts +37 -0
- package/dist/src/cache/index.js +152 -0
- package/dist/src/cli.js +83 -45
- package/dist/src/compile.d.ts +3 -2
- package/dist/src/compile.js +34 -11
- package/dist/src/diagnostics/index.d.ts +1 -1
- package/dist/src/diagnostics/index.js +8 -11
- package/dist/src/emit/compile.d.ts +31 -0
- package/dist/src/emit/compile.js +143 -0
- package/dist/{src2 → src}/emit/index.d.ts +9 -0
- package/dist/{src2 → src}/emit/index.js +59 -8
- package/dist/src/emit/modules.d.ts +29 -0
- package/dist/src/emit/modules.js +492 -0
- package/dist/src/emit/sourcemap.d.ts +53 -0
- package/dist/src/emit/sourcemap.js +73 -0
- package/dist/{src2 → src}/hir/lower.d.ts +1 -1
- package/dist/{src2 → src}/hir/lower.js +22 -1
- package/dist/src/hir/monomorphize.d.ts +22 -0
- package/dist/src/hir/monomorphize.js +379 -0
- package/dist/{src2 → src}/hir/types.d.ts +35 -2
- package/dist/src/index.d.ts +19 -2
- package/dist/src/index.js +36 -14
- package/dist/src/lexer/index.d.ts +1 -1
- package/dist/src/lexer/index.js +1 -0
- package/dist/src/lir/budget.d.ts +37 -0
- package/dist/src/lir/budget.js +280 -0
- package/dist/{src2 → src}/lir/lower.js +19 -0
- package/dist/{src2 → src}/lir/types.d.ts +7 -4
- package/dist/src/lsp/main.d.ts +8 -0
- package/dist/src/lsp/main.js +11 -0
- package/dist/src/lsp/server.d.ts +11 -0
- package/dist/src/lsp/server.js +403 -0
- package/dist/{src2 → src}/mir/lower.d.ts +1 -1
- package/dist/{src2 → src}/mir/lower.js +244 -10
- package/dist/{src2 → src}/mir/types.d.ts +10 -2
- package/dist/src/optimizer/coroutine.d.ts +34 -0
- package/dist/src/optimizer/coroutine.js +789 -0
- package/dist/src/optimizer/dce.d.ts +8 -34
- package/dist/src/optimizer/dce.js +146 -629
- package/dist/src/optimizer/interprocedural.d.ts +14 -0
- package/dist/src/optimizer/interprocedural.js +186 -0
- package/dist/src/optimizer/lir/const_imm.d.ts +12 -0
- package/dist/src/optimizer/lir/const_imm.js +139 -0
- package/dist/src/optimizer/lir/dead_slot.d.ts +14 -0
- package/dist/src/optimizer/lir/dead_slot.js +130 -0
- package/dist/src/optimizer/lir/peephole.d.ts +21 -0
- package/dist/src/optimizer/lir/peephole.js +52 -0
- package/dist/src/optimizer/lir/pipeline.d.ts +10 -0
- package/dist/src/optimizer/lir/pipeline.js +34 -0
- package/dist/src/optimizer/nbt-batch.d.ts +11 -0
- package/dist/src/optimizer/nbt-batch.js +51 -0
- package/dist/{src2 → src}/optimizer/pipeline.d.ts +4 -0
- package/dist/{src2 → src}/optimizer/pipeline.js +17 -1
- package/dist/src/optimizer/selector-cache.d.ts +22 -0
- package/dist/src/optimizer/selector-cache.js +100 -0
- package/dist/src/optimizer/unroll.d.ts +32 -0
- package/dist/src/optimizer/unroll.js +348 -0
- package/dist/src/parser/index.d.ts +8 -0
- package/dist/src/parser/index.js +204 -14
- package/dist/src/repl.d.ts +1 -1
- package/dist/src/typechecker/index.d.ts +4 -0
- package/dist/src/typechecker/index.js +198 -13
- package/dist/src/types/mc-version.d.ts +24 -0
- package/dist/src/types/mc-version.js +49 -0
- package/docs/ROADMAP.md +395 -0
- package/docs/compiler-pipeline-redesign.md +27 -10
- package/editors/vscode/out/extension.js +25176 -8000
- package/editors/vscode/package-lock.json +90 -6
- package/editors/vscode/package.json +3 -2
- package/editors/vscode/src/extension.ts +97 -67
- package/editors/vscode/syntaxes/redscript.tmLanguage.json +34 -0
- package/examples/coroutine-demo.mcrs +50 -0
- package/examples/enum-demo.mcrs +95 -0
- package/examples/scheduler-demo.mcrs +59 -0
- package/examples/showcase.mcrs +3 -3
- package/jest.config.js +1 -1
- package/package.json +9 -3
- package/src/__tests__/budget.test.ts +297 -0
- package/src/__tests__/diagnostics.test.ts +2 -3
- package/src/__tests__/e2e/coroutine.test.ts +142 -0
- package/{src2 → src}/__tests__/e2e/macros.test.ts +1 -1
- package/{src2 → src}/__tests__/e2e/migrate.test.ts +1 -1
- package/src/__tests__/e2e/stdlib-e2e.test.ts +348 -0
- package/src/__tests__/enum.test.ts +425 -0
- package/src/__tests__/generics.test.ts +390 -0
- package/{src2 → src}/__tests__/hir/desugar.test.ts +2 -2
- package/src/__tests__/incremental.test.ts +337 -0
- package/src/__tests__/lsp.test.ts +359 -0
- package/src/__tests__/mc-syntax.test.ts +1 -7
- package/src/__tests__/mc-version.test.ts +178 -0
- package/{src2 → src}/__tests__/mir/arithmetic.test.ts +2 -2
- package/{src2 → src}/__tests__/mir/control-flow.test.ts +2 -2
- package/src/__tests__/modules.test.ts +365 -0
- package/src/__tests__/optimizer/coroutine.test.ts +312 -0
- package/src/__tests__/optimizer/interprocedural.test.ts +174 -0
- package/src/__tests__/optimizer/lir/const_imm.test.ts +151 -0
- package/src/__tests__/optimizer/lir/dead_slot.test.ts +156 -0
- package/src/__tests__/optimizer/lir/peephole.test.ts +136 -0
- package/src/__tests__/optimizer/lir/pipeline.test.ts +113 -0
- package/src/__tests__/optimizer/nbt-batch.test.ts +119 -0
- package/src/__tests__/optimizer/selector-cache.test.ts +112 -0
- package/src/__tests__/optimizer/unroll.test.ts +231 -0
- package/src/__tests__/option.test.ts +299 -0
- package/src/__tests__/schedule.test.ts +105 -0
- package/src/__tests__/sourcemap.test.ts +254 -0
- package/src/__tests__/stdlib-include.test.ts +61 -0
- package/src/__tests__/tuple.test.ts +220 -0
- package/src/__tests__/typechecker-strict.test.ts +216 -0
- package/src/ast/types.ts +33 -2
- package/src/cache/deps.ts +132 -0
- package/src/cache/incremental.ts +173 -0
- package/src/cache/index.ts +135 -0
- package/src/cli.ts +96 -45
- package/src/compile.ts +46 -17
- package/src/diagnostics/index.ts +8 -11
- package/src/emit/compile.ts +179 -0
- package/{src2 → src}/emit/index.ts +72 -8
- package/src/emit/modules.ts +581 -0
- package/src/emit/sourcemap.ts +101 -0
- package/{src2 → src}/hir/lower.ts +29 -2
- package/src/hir/monomorphize.ts +416 -0
- package/{src2 → src}/hir/types.ts +15 -3
- package/src/index.ts +29 -10
- package/src/lexer/index.ts +2 -1
- package/src/lir/budget.ts +321 -0
- package/{src2 → src}/lir/lower.ts +32 -1
- package/{src2 → src}/lir/types.ts +7 -3
- package/src/lsp/main.ts +9 -0
- package/src/lsp/server.ts +469 -0
- package/{src2 → src}/mir/lower.ts +251 -8
- package/{src2 → src}/mir/types.ts +12 -1
- package/src/optimizer/coroutine.ts +996 -0
- package/{src2 → src}/optimizer/dce.ts +2 -1
- package/src/optimizer/interprocedural.ts +177 -0
- package/src/optimizer/lir/const_imm.ts +143 -0
- package/src/optimizer/lir/dead_slot.ts +123 -0
- package/src/optimizer/lir/peephole.ts +57 -0
- package/src/optimizer/lir/pipeline.ts +37 -0
- package/src/optimizer/nbt-batch.ts +50 -0
- package/{src2 → src}/optimizer/pipeline.ts +16 -1
- package/src/optimizer/selector-cache.ts +103 -0
- package/src/optimizer/unroll.ts +386 -0
- package/src/parser/index.ts +212 -15
- package/src/repl.ts +1 -1
- package/src/stdlib/math.mcrs +4 -4
- package/src/templates/quest.mcrs +4 -4
- package/src/typechecker/index.ts +215 -15
- package/src/types/mc-version.ts +46 -0
- package/tsconfig.json +1 -1
- package/.claude/commands/build-test.md +0 -10
- package/.claude/commands/deploy-demo.md +0 -12
- package/.claude/commands/stage-status.md +0 -13
- package/.claude/settings.json +0 -12
- package/CLAUDE.md +0 -231
- package/dist/__tests__/cli.test.js +0 -278
- package/dist/__tests__/codegen.test.js +0 -152
- package/dist/__tests__/compile-all.test.d.ts +0 -10
- package/dist/__tests__/compile-all.test.js +0 -108
- package/dist/__tests__/dce.test.js +0 -138
- package/dist/__tests__/diagnostics.test.d.ts +0 -4
- package/dist/__tests__/diagnostics.test.js +0 -149
- package/dist/__tests__/e2e.test.d.ts +0 -6
- package/dist/__tests__/e2e.test.js +0 -1847
- package/dist/__tests__/entity-types.test.js +0 -203
- package/dist/__tests__/formatter.test.js +0 -40
- package/dist/__tests__/lexer.test.js +0 -343
- package/dist/__tests__/lowering.test.js +0 -1015
- package/dist/__tests__/macro.test.d.ts +0 -8
- package/dist/__tests__/macro.test.js +0 -305
- package/dist/__tests__/mc-integration.test.d.ts +0 -12
- package/dist/__tests__/mc-integration.test.js +0 -819
- package/dist/__tests__/mc-syntax.test.js +0 -124
- package/dist/__tests__/nbt.test.js +0 -82
- package/dist/__tests__/optimizer-advanced.test.js +0 -124
- package/dist/__tests__/optimizer.test.js +0 -149
- package/dist/__tests__/parser.test.d.ts +0 -1
- package/dist/__tests__/parser.test.js +0 -807
- package/dist/__tests__/repl.test.d.ts +0 -1
- package/dist/__tests__/repl.test.js +0 -27
- package/dist/__tests__/runtime.test.d.ts +0 -1
- package/dist/__tests__/runtime.test.js +0 -289
- package/dist/__tests__/stdlib-advanced.test.d.ts +0 -4
- package/dist/__tests__/stdlib-advanced.test.js +0 -378
- package/dist/__tests__/stdlib-bigint.test.d.ts +0 -7
- package/dist/__tests__/stdlib-bigint.test.js +0 -428
- package/dist/__tests__/stdlib-math.test.d.ts +0 -7
- package/dist/__tests__/stdlib-math.test.js +0 -352
- package/dist/__tests__/stdlib-vec.test.d.ts +0 -4
- package/dist/__tests__/stdlib-vec.test.js +0 -264
- package/dist/__tests__/structure-optimizer.test.d.ts +0 -1
- package/dist/__tests__/structure-optimizer.test.js +0 -33
- package/dist/__tests__/typechecker.test.d.ts +0 -1
- package/dist/__tests__/typechecker.test.js +0 -552
- package/dist/__tests__/var-allocator.test.d.ts +0 -1
- package/dist/__tests__/var-allocator.test.js +0 -69
- package/dist/ast/types.d.ts +0 -514
- package/dist/ast/types.js +0 -9
- package/dist/builtins/metadata.d.ts +0 -36
- package/dist/builtins/metadata.js +0 -1014
- package/dist/cli.d.ts +0 -11
- package/dist/codegen/cmdblock/index.d.ts +0 -26
- package/dist/codegen/cmdblock/index.js +0 -45
- package/dist/codegen/mcfunction/index.d.ts +0 -40
- package/dist/codegen/mcfunction/index.js +0 -606
- package/dist/codegen/structure/index.d.ts +0 -24
- package/dist/codegen/structure/index.js +0 -279
- package/dist/codegen/var-allocator.d.ts +0 -45
- package/dist/codegen/var-allocator.js +0 -104
- package/dist/compile.d.ts +0 -68
- package/dist/data/arena/function/__load.mcfunction +0 -6
- package/dist/data/arena/function/__tick.mcfunction +0 -2
- package/dist/data/arena/function/announce_leaders/else_1.mcfunction +0 -3
- package/dist/data/arena/function/announce_leaders/foreach_0/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/announce_leaders/foreach_0/then_0.mcfunction +0 -3
- package/dist/data/arena/function/announce_leaders/foreach_0.mcfunction +0 -7
- package/dist/data/arena/function/announce_leaders/foreach_1/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/announce_leaders/foreach_1/then_0.mcfunction +0 -4
- package/dist/data/arena/function/announce_leaders/foreach_1.mcfunction +0 -6
- package/dist/data/arena/function/announce_leaders/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/announce_leaders/then_0.mcfunction +0 -4
- package/dist/data/arena/function/announce_leaders.mcfunction +0 -6
- package/dist/data/arena/function/arena_tick/merge_2.mcfunction +0 -1
- package/dist/data/arena/function/arena_tick/then_0.mcfunction +0 -4
- package/dist/data/arena/function/arena_tick.mcfunction +0 -11
- package/dist/data/counter/function/__load.mcfunction +0 -5
- package/dist/data/counter/function/__tick.mcfunction +0 -2
- package/dist/data/counter/function/counter_tick/merge_2.mcfunction +0 -1
- package/dist/data/counter/function/counter_tick/then_0.mcfunction +0 -3
- package/dist/data/counter/function/counter_tick.mcfunction +0 -11
- package/dist/data/gcd2/function/__load.mcfunction +0 -3
- package/dist/data/gcd2/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd2/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd2/function/abs.mcfunction +0 -7
- package/dist/data/gcd2/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd2/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd2/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd2/function/gcd.mcfunction +0 -14
- package/dist/data/gcd3/function/__load.mcfunction +0 -3
- package/dist/data/gcd3/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd3/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd3/function/abs.mcfunction +0 -7
- package/dist/data/gcd3/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd3/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd3/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd3/function/gcd.mcfunction +0 -14
- package/dist/data/gcd3/function/test.mcfunction +0 -7
- package/dist/data/gcd3nm/function/__load.mcfunction +0 -3
- package/dist/data/gcd3nm/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd3nm/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd3nm/function/abs.mcfunction +0 -7
- package/dist/data/gcd3nm/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd3nm/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd3nm/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd3nm/function/gcd.mcfunction +0 -14
- package/dist/data/gcd3nm/function/test.mcfunction +0 -7
- package/dist/data/gcd_test/function/__load.mcfunction +0 -3
- package/dist/data/gcd_test/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/gcd_test/function/abs/then_0.mcfunction +0 -5
- package/dist/data/gcd_test/function/abs.mcfunction +0 -7
- package/dist/data/gcd_test/function/gcd/loop_body_1.mcfunction +0 -7
- package/dist/data/gcd_test/function/gcd/loop_check_0.mcfunction +0 -5
- package/dist/data/gcd_test/function/gcd/loop_exit_2.mcfunction +0 -3
- package/dist/data/gcd_test/function/gcd.mcfunction +0 -14
- package/dist/data/isqrttest/function/__load.mcfunction +0 -6
- package/dist/data/isqrttest/function/isqrt/loop_body_4.mcfunction +0 -12
- package/dist/data/isqrttest/function/isqrt/loop_check_3.mcfunction +0 -5
- package/dist/data/isqrttest/function/isqrt/loop_exit_5.mcfunction +0 -3
- package/dist/data/isqrttest/function/isqrt/merge_2.mcfunction +0 -4
- package/dist/data/isqrttest/function/isqrt/merge_8.mcfunction +0 -6
- package/dist/data/isqrttest/function/isqrt/then_0.mcfunction +0 -3
- package/dist/data/isqrttest/function/isqrt/then_6.mcfunction +0 -3
- package/dist/data/isqrttest/function/isqrt.mcfunction +0 -7
- package/dist/data/isqrttest/function/test.mcfunction +0 -6
- package/dist/data/mathtest/function/__load.mcfunction +0 -3
- package/dist/data/mathtest/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/mathtest/function/abs/then_0.mcfunction +0 -5
- package/dist/data/mathtest/function/abs.mcfunction +0 -6
- package/dist/data/mathtest/function/test.mcfunction +0 -5
- package/dist/data/minecraft/tags/function/load.json +0 -5
- package/dist/data/minecraft/tags/function/tick.json +0 -5
- package/dist/data/mypack/function/__load.mcfunction +0 -13
- package/dist/data/mypack/function/_atan_init.mcfunction +0 -2
- package/dist/data/mypack/function/abs/merge_2.mcfunction +0 -3
- package/dist/data/mypack/function/abs/then_0.mcfunction +0 -5
- package/dist/data/mypack/function/abs.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/__sgi_1.mcfunction +0 -2
- package/dist/data/mypack/function/atan2_fixed/else_34.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/loop_body_31.mcfunction +0 -19
- package/dist/data/mypack/function/atan2_fixed/loop_check_30.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/loop_exit_32.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_11.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_14.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/merge_17.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_2.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_20.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_23.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_26.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/merge_29.mcfunction +0 -4
- package/dist/data/mypack/function/atan2_fixed/merge_38.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_41.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_44.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_47.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_5.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/merge_8.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_0.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_12.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_15.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_18.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_21.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_24.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_27.mcfunction +0 -6
- package/dist/data/mypack/function/atan2_fixed/then_3.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_33.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_36.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_39.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_42.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_45.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed/then_6.mcfunction +0 -3
- package/dist/data/mypack/function/atan2_fixed/then_9.mcfunction +0 -5
- package/dist/data/mypack/function/atan2_fixed.mcfunction +0 -7
- package/dist/data/mypack/function/my_game.mcfunction +0 -10
- package/dist/data/quiz/function/__load.mcfunction +0 -16
- package/dist/data/quiz/function/__tick.mcfunction +0 -6
- package/dist/data/quiz/function/__trigger_quiz_a_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/__trigger_quiz_b_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/__trigger_quiz_c_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/__trigger_quiz_start_dispatch.mcfunction +0 -4
- package/dist/data/quiz/function/answer_a.mcfunction +0 -4
- package/dist/data/quiz/function/answer_b.mcfunction +0 -4
- package/dist/data/quiz/function/answer_c.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/else_1.mcfunction +0 -5
- package/dist/data/quiz/function/ask_question/else_4.mcfunction +0 -5
- package/dist/data/quiz/function/ask_question/else_7.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/merge_2.mcfunction +0 -1
- package/dist/data/quiz/function/ask_question/merge_5.mcfunction +0 -2
- package/dist/data/quiz/function/ask_question/merge_8.mcfunction +0 -2
- package/dist/data/quiz/function/ask_question/then_0.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/then_3.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question/then_6.mcfunction +0 -4
- package/dist/data/quiz/function/ask_question.mcfunction +0 -7
- package/dist/data/quiz/function/finish_quiz.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer/else_1.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/else_10.mcfunction +0 -3
- package/dist/data/quiz/function/handle_answer/else_16.mcfunction +0 -3
- package/dist/data/quiz/function/handle_answer/else_4.mcfunction +0 -3
- package/dist/data/quiz/function/handle_answer/else_7.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/merge_11.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_14.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_17.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_2.mcfunction +0 -8
- package/dist/data/quiz/function/handle_answer/merge_5.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/merge_8.mcfunction +0 -2
- package/dist/data/quiz/function/handle_answer/then_0.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/then_12.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/then_15.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer/then_3.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer/then_6.mcfunction +0 -5
- package/dist/data/quiz/function/handle_answer/then_9.mcfunction +0 -6
- package/dist/data/quiz/function/handle_answer.mcfunction +0 -11
- package/dist/data/quiz/function/start_quiz.mcfunction +0 -5
- package/dist/data/reqtest/function/__load.mcfunction +0 -4
- package/dist/data/reqtest/function/_table_init.mcfunction +0 -2
- package/dist/data/reqtest/function/no_trig.mcfunction +0 -3
- package/dist/data/reqtest/function/use_table.mcfunction +0 -4
- package/dist/data/reqtest2/function/__load.mcfunction +0 -3
- package/dist/data/reqtest2/function/no_trig.mcfunction +0 -3
- package/dist/data/runtime/function/__load.mcfunction +0 -5
- package/dist/data/runtime/function/__tick.mcfunction +0 -2
- package/dist/data/runtime/function/counter_tick/then_0.mcfunction +0 -3
- package/dist/data/runtime/function/counter_tick.mcfunction +0 -13
- package/dist/data/shop/function/__load.mcfunction +0 -7
- package/dist/data/shop/function/__tick.mcfunction +0 -3
- package/dist/data/shop/function/__trigger_shop_buy_dispatch.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase/else_1.mcfunction +0 -5
- package/dist/data/shop/function/complete_purchase/else_4.mcfunction +0 -5
- package/dist/data/shop/function/complete_purchase/else_7.mcfunction +0 -3
- package/dist/data/shop/function/complete_purchase/merge_2.mcfunction +0 -2
- package/dist/data/shop/function/complete_purchase/merge_5.mcfunction +0 -2
- package/dist/data/shop/function/complete_purchase/merge_8.mcfunction +0 -2
- package/dist/data/shop/function/complete_purchase/then_0.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase/then_3.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase/then_6.mcfunction +0 -4
- package/dist/data/shop/function/complete_purchase.mcfunction +0 -7
- package/dist/data/shop/function/handle_shop_trigger.mcfunction +0 -3
- package/dist/data/swap_test/function/__load.mcfunction +0 -3
- package/dist/data/swap_test/function/gcd_old/loop_body_1.mcfunction +0 -7
- package/dist/data/swap_test/function/gcd_old/loop_check_0.mcfunction +0 -5
- package/dist/data/swap_test/function/gcd_old/loop_exit_2.mcfunction +0 -3
- package/dist/data/swap_test/function/gcd_old.mcfunction +0 -8
- package/dist/data/turret/function/__load.mcfunction +0 -5
- package/dist/data/turret/function/__tick.mcfunction +0 -4
- package/dist/data/turret/function/__trigger_deploy_turret_dispatch.mcfunction +0 -4
- package/dist/data/turret/function/deploy_turret.mcfunction +0 -8
- package/dist/data/turret/function/turret_tick/at_1.mcfunction +0 -2
- package/dist/data/turret/function/turret_tick/foreach_0.mcfunction +0 -2
- package/dist/data/turret/function/turret_tick/foreach_2.mcfunction +0 -2
- package/dist/data/turret/function/turret_tick/tick_body.mcfunction +0 -3
- package/dist/data/turret/function/turret_tick/tick_skip.mcfunction +0 -1
- package/dist/data/turret/function/turret_tick.mcfunction +0 -5
- package/dist/diagnostics/index.d.ts +0 -44
- package/dist/diagnostics/index.js +0 -140
- package/dist/events/types.d.ts +0 -35
- package/dist/events/types.js +0 -59
- package/dist/formatter/index.d.ts +0 -1
- package/dist/formatter/index.js +0 -26
- package/dist/gcd2.map.json +0 -15
- package/dist/gcd3.map.json +0 -17
- package/dist/gcd_test.map.json +0 -15
- package/dist/index.d.ts +0 -62
- package/dist/ir/builder.d.ts +0 -33
- package/dist/ir/builder.js +0 -99
- package/dist/ir/types.d.ts +0 -132
- package/dist/ir/types.js +0 -15
- package/dist/isqrttest.map.json +0 -15
- package/dist/lexer/index.d.ts +0 -37
- package/dist/lexer/index.js +0 -569
- package/dist/lowering/index.d.ts +0 -188
- package/dist/lowering/index.js +0 -3405
- package/dist/mathtest.map.json +0 -6
- package/dist/mc-test/client.d.ts +0 -128
- package/dist/mc-test/client.js +0 -174
- package/dist/mc-test/runner.d.ts +0 -28
- package/dist/mc-test/runner.js +0 -150
- package/dist/mc-test/setup.d.ts +0 -11
- package/dist/mc-test/setup.js +0 -98
- package/dist/mc-validator/index.d.ts +0 -17
- package/dist/mc-validator/index.js +0 -322
- package/dist/mypack.map.json +0 -27
- package/dist/nbt/index.d.ts +0 -86
- package/dist/nbt/index.js +0 -250
- package/dist/optimizer/commands.d.ts +0 -38
- package/dist/optimizer/commands.js +0 -451
- package/dist/optimizer/dce.d.ts +0 -34
- package/dist/optimizer/dce.js +0 -639
- package/dist/optimizer/passes.d.ts +0 -34
- package/dist/optimizer/passes.js +0 -243
- package/dist/optimizer/structure.d.ts +0 -9
- package/dist/optimizer/structure.js +0 -356
- package/dist/pack.mcmeta +0 -6
- package/dist/parser/index.d.ts +0 -93
- package/dist/parser/index.js +0 -1687
- package/dist/repl.d.ts +0 -16
- package/dist/repl.js +0 -165
- package/dist/reqtest.map.json +0 -4
- package/dist/reqtest2.map.json +0 -4
- package/dist/runtime/index.d.ts +0 -107
- package/dist/runtime/index.js +0 -1409
- package/dist/runtime.map.json +0 -7
- package/dist/src/__tests__/codegen.test.d.ts +0 -1
- package/dist/src/__tests__/codegen.test.js +0 -152
- package/dist/src/__tests__/e2e.test.d.ts +0 -6
- package/dist/src/__tests__/e2e.test.js +0 -1789
- package/dist/src/__tests__/entity-types.test.d.ts +0 -1
- package/dist/src/__tests__/entity-types.test.js +0 -203
- package/dist/src/__tests__/lowering.test.d.ts +0 -1
- package/dist/src/__tests__/lowering.test.js +0 -1015
- package/dist/src/__tests__/macro.test.d.ts +0 -8
- package/dist/src/__tests__/macro.test.js +0 -306
- package/dist/src/__tests__/nbt.test.d.ts +0 -1
- package/dist/src/__tests__/nbt.test.js +0 -82
- package/dist/src/__tests__/optimizer-advanced.test.d.ts +0 -1
- package/dist/src/__tests__/optimizer-advanced.test.js +0 -124
- package/dist/src/__tests__/optimizer.test.d.ts +0 -1
- package/dist/src/__tests__/optimizer.test.js +0 -149
- package/dist/src/__tests__/runtime.test.d.ts +0 -1
- package/dist/src/__tests__/runtime.test.js +0 -289
- package/dist/src/__tests__/stdlib-advanced.test.d.ts +0 -4
- package/dist/src/__tests__/stdlib-advanced.test.js +0 -374
- package/dist/src/__tests__/stdlib-bigint.test.d.ts +0 -7
- package/dist/src/__tests__/stdlib-bigint.test.js +0 -426
- package/dist/src/__tests__/stdlib-math.test.d.ts +0 -7
- package/dist/src/__tests__/stdlib-math.test.js +0 -351
- package/dist/src/__tests__/stdlib-vec.test.d.ts +0 -4
- package/dist/src/__tests__/stdlib-vec.test.js +0 -263
- package/dist/src/__tests__/structure-optimizer.test.d.ts +0 -1
- package/dist/src/__tests__/structure-optimizer.test.js +0 -33
- package/dist/src/__tests__/var-allocator.test.d.ts +0 -1
- package/dist/src/__tests__/var-allocator.test.js +0 -69
- package/dist/src/codegen/cmdblock/index.d.ts +0 -26
- package/dist/src/codegen/cmdblock/index.js +0 -45
- package/dist/src/codegen/mcfunction/index.d.ts +0 -40
- package/dist/src/codegen/mcfunction/index.js +0 -606
- package/dist/src/codegen/structure/index.d.ts +0 -24
- package/dist/src/codegen/structure/index.js +0 -279
- package/dist/src/codegen/var-allocator.d.ts +0 -45
- package/dist/src/codegen/var-allocator.js +0 -104
- package/dist/src/ir/builder.d.ts +0 -33
- package/dist/src/ir/builder.js +0 -99
- package/dist/src/ir/types.d.ts +0 -132
- package/dist/src/ir/types.js +0 -15
- package/dist/src/lowering/index.d.ts +0 -188
- package/dist/src/lowering/index.js +0 -3405
- package/dist/src/optimizer/commands.d.ts +0 -38
- package/dist/src/optimizer/commands.js +0 -451
- package/dist/src/optimizer/passes.d.ts +0 -34
- package/dist/src/optimizer/passes.js +0 -243
- package/dist/src/optimizer/structure.d.ts +0 -9
- package/dist/src/optimizer/structure.js +0 -356
- package/dist/src2/__tests__/optimizer/dce.test.d.ts +0 -1
- package/dist/src2/emit/compile.d.ts +0 -19
- package/dist/src2/emit/compile.js +0 -80
- package/dist/src2/optimizer/dce.d.ts +0 -8
- package/dist/src2/optimizer/dce.js +0 -155
- package/dist/swap_test.map.json +0 -14
- package/dist/tsconfig.tsbuildinfo +0 -1
- package/dist/typechecker/index.d.ts +0 -61
- package/dist/typechecker/index.js +0 -1034
- package/dist/types/entity-hierarchy.d.ts +0 -29
- package/dist/types/entity-hierarchy.js +0 -107
- package/examples/spiral.mcrs +0 -43
- package/src/examples/arena.mcrs +0 -44
- package/src/examples/counter.mcrs +0 -12
- package/src/examples/new_features_demo.mcrs +0 -193
- package/src/examples/rpg.mcrs +0 -13
- package/src/examples/stdlib_demo.mcrs +0 -181
- package/src2/emit/compile.ts +0 -99
- /package/dist/{__tests__/cli.test.d.ts → src/__tests__/budget.test.d.ts} +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/basic.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/basic.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/macros.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/e2e/migrate.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/hir/desugar.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/lower.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/lower.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/lir/types.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/types.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/lir/verify.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/lir/verify.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/mir/arithmetic.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/mir/control-flow.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/mir/verify.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/mir/verify.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/block_merge.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/branch_simplify.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/constant_fold.test.js +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/copy_prop.test.js +0 -0
- /package/dist/{__tests__ → src/__tests__/optimizer}/dce.test.d.ts +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/dce.test.js +0 -0
- /package/dist/{__tests__/codegen.test.d.ts → src/__tests__/optimizer/interprocedural.test.d.ts} +0 -0
- /package/dist/{__tests__/entity-types.test.d.ts → src/__tests__/optimizer/lir/const_imm.test.d.ts} +0 -0
- /package/dist/{__tests__/formatter.test.d.ts → src/__tests__/optimizer/lir/dead_slot.test.d.ts} +0 -0
- /package/dist/{__tests__/lexer.test.d.ts → src/__tests__/optimizer/lir/peephole.test.d.ts} +0 -0
- /package/dist/{src2/__tests__/optimizer → src/__tests__/optimizer/lir}/pipeline.test.d.ts +0 -0
- /package/dist/{__tests__/lowering.test.d.ts → src/__tests__/optimizer/nbt-batch.test.d.ts} +0 -0
- /package/dist/{__tests__/mc-syntax.test.d.ts → src/__tests__/optimizer/pipeline.test.d.ts} +0 -0
- /package/dist/{src2 → src}/__tests__/optimizer/pipeline.test.js +0 -0
- /package/dist/{__tests__/nbt.test.d.ts → src/__tests__/optimizer/selector-cache.test.d.ts} +0 -0
- /package/dist/{__tests__/optimizer-advanced.test.d.ts → src/__tests__/optimizer/unroll.test.d.ts} +0 -0
- /package/dist/{__tests__/optimizer.test.d.ts → src/__tests__/stdlib-include.test.d.ts} +0 -0
- /package/dist/{src2 → src}/hir/types.js +0 -0
- /package/dist/{src2 → src}/lir/lower.d.ts +0 -0
- /package/dist/{src2 → src}/lir/types.js +0 -0
- /package/dist/{src2 → src}/lir/verify.d.ts +0 -0
- /package/dist/{src2 → src}/lir/verify.js +0 -0
- /package/dist/{src2 → src}/mir/macro.d.ts +0 -0
- /package/dist/{src2 → src}/mir/macro.js +0 -0
- /package/dist/{src2 → src}/mir/types.js +0 -0
- /package/dist/{src2 → src}/mir/verify.d.ts +0 -0
- /package/dist/{src2 → src}/mir/verify.js +0 -0
- /package/dist/{src2 → src}/optimizer/block_merge.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/block_merge.js +0 -0
- /package/dist/{src2 → src}/optimizer/branch_simplify.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/branch_simplify.js +0 -0
- /package/dist/{src2 → src}/optimizer/constant_fold.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/constant_fold.js +0 -0
- /package/dist/{src2 → src}/optimizer/copy_prop.d.ts +0 -0
- /package/dist/{src2 → src}/optimizer/copy_prop.js +0 -0
- /package/{src2 → src}/__tests__/e2e/basic.test.ts +0 -0
- /package/{src2 → src}/__tests__/lir/lower.test.ts +0 -0
- /package/{src2 → src}/__tests__/lir/types.test.ts +0 -0
- /package/{src2 → src}/__tests__/lir/verify.test.ts +0 -0
- /package/{src2 → src}/__tests__/mir/verify.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/block_merge.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/branch_simplify.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/constant_fold.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/copy_prop.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/dce.test.ts +0 -0
- /package/{src2 → src}/__tests__/optimizer/pipeline.test.ts +0 -0
- /package/{src2 → src}/lir/verify.ts +0 -0
- /package/{src2 → src}/mir/macro.ts +0 -0
- /package/{src2 → src}/mir/verify.ts +0 -0
- /package/{src2 → src}/optimizer/block_merge.ts +0 -0
- /package/{src2 → src}/optimizer/branch_simplify.ts +0 -0
- /package/{src2 → src}/optimizer/constant_fold.ts +0 -0
- /package/{src2 → src}/optimizer/copy_prop.ts +0 -0
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Incremental compilation — only recompile files whose content (or
|
|
4
|
+
* dependencies) has changed since the last build.
|
|
5
|
+
*/
|
|
6
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
7
|
+
if (k2 === undefined) k2 = k;
|
|
8
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
9
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
10
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
11
|
+
}
|
|
12
|
+
Object.defineProperty(o, k2, desc);
|
|
13
|
+
}) : (function(o, m, k, k2) {
|
|
14
|
+
if (k2 === undefined) k2 = k;
|
|
15
|
+
o[k2] = m[k];
|
|
16
|
+
}));
|
|
17
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
18
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
19
|
+
}) : function(o, v) {
|
|
20
|
+
o["default"] = v;
|
|
21
|
+
});
|
|
22
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
23
|
+
var ownKeys = function(o) {
|
|
24
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
25
|
+
var ar = [];
|
|
26
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
27
|
+
return ar;
|
|
28
|
+
};
|
|
29
|
+
return ownKeys(o);
|
|
30
|
+
};
|
|
31
|
+
return function (mod) {
|
|
32
|
+
if (mod && mod.__esModule) return mod;
|
|
33
|
+
var result = {};
|
|
34
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
35
|
+
__setModuleDefault(result, mod);
|
|
36
|
+
return result;
|
|
37
|
+
};
|
|
38
|
+
})();
|
|
39
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
40
|
+
exports.compileIncremental = compileIncremental;
|
|
41
|
+
exports.resetCompileCache = resetCompileCache;
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const compile_1 = require("../emit/compile");
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const compiledCache = new Map();
|
|
46
|
+
/**
|
|
47
|
+
* Compile a set of entry files incrementally.
|
|
48
|
+
*
|
|
49
|
+
* For each file:
|
|
50
|
+
* - Compute content hash of the file and all its transitive imports
|
|
51
|
+
* - If all hashes match the previous build → skip (cache hit)
|
|
52
|
+
* - If any hash changed → recompile from scratch
|
|
53
|
+
*/
|
|
54
|
+
function compileIncremental(files, cache, depGraph, options) {
|
|
55
|
+
const result = {
|
|
56
|
+
recompiled: 0,
|
|
57
|
+
cached: 0,
|
|
58
|
+
errors: new Map(),
|
|
59
|
+
results: new Map(),
|
|
60
|
+
};
|
|
61
|
+
// Phase 1: Update dependency graph for all files
|
|
62
|
+
for (const file of files) {
|
|
63
|
+
const absFile = path.resolve(file);
|
|
64
|
+
try {
|
|
65
|
+
const source = fs.readFileSync(absFile, 'utf-8');
|
|
66
|
+
depGraph.addFile(absFile, source);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
// File might have been deleted
|
|
70
|
+
depGraph.removeFile(absFile);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Phase 2: Detect all changed source files BEFORE recompiling anything.
|
|
74
|
+
// This prevents cache.update() during one file's recompile from hiding
|
|
75
|
+
// changes needed by another file that shares the same dependency.
|
|
76
|
+
const changedSourceFiles = new Set();
|
|
77
|
+
const allSourceFiles = new Set();
|
|
78
|
+
for (const file of files) {
|
|
79
|
+
const absFile = path.resolve(file);
|
|
80
|
+
const allDeps = depGraph.getTransitiveDeps(absFile);
|
|
81
|
+
allSourceFiles.add(absFile);
|
|
82
|
+
for (const dep of allDeps)
|
|
83
|
+
allSourceFiles.add(dep);
|
|
84
|
+
}
|
|
85
|
+
for (const sourceFile of allSourceFiles) {
|
|
86
|
+
if (cache.hasChanged(sourceFile)) {
|
|
87
|
+
changedSourceFiles.add(sourceFile);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Phase 3: For each entry file, check if it or any dep changed → recompile
|
|
91
|
+
for (const file of files) {
|
|
92
|
+
const absFile = path.resolve(file);
|
|
93
|
+
// Collect all files in this compilation unit (entry + transitive deps)
|
|
94
|
+
const allDeps = depGraph.getTransitiveDeps(absFile);
|
|
95
|
+
const unitFiles = [absFile, ...allDeps];
|
|
96
|
+
// Check if any file in the unit has changed
|
|
97
|
+
let needsRecompile = false;
|
|
98
|
+
const prevEntry = compiledCache.get(absFile);
|
|
99
|
+
if (!prevEntry) {
|
|
100
|
+
needsRecompile = true;
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
for (const unitFile of unitFiles) {
|
|
104
|
+
if (changedSourceFiles.has(unitFile)) {
|
|
105
|
+
needsRecompile = true;
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Also check if the set of dependencies changed
|
|
110
|
+
if (!needsRecompile && prevEntry.depHashes.size !== unitFiles.length) {
|
|
111
|
+
needsRecompile = true;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
if (!needsRecompile) {
|
|
115
|
+
// Cache hit — write cached result to output
|
|
116
|
+
const cached = compiledCache.get(absFile);
|
|
117
|
+
writeBuildOutput(cached.result, options.output);
|
|
118
|
+
result.cached++;
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
// Cache miss — recompile
|
|
122
|
+
try {
|
|
123
|
+
const source = fs.readFileSync(absFile, 'utf-8');
|
|
124
|
+
const ns = options.namespace ?? deriveNamespace(absFile);
|
|
125
|
+
const compileResult = (0, compile_1.compile)(source, { namespace: ns, filePath: absFile });
|
|
126
|
+
// Update caches
|
|
127
|
+
const depHashes = new Map();
|
|
128
|
+
for (const unitFile of unitFiles) {
|
|
129
|
+
cache.update(unitFile);
|
|
130
|
+
const entry = cache.get(unitFile);
|
|
131
|
+
if (entry)
|
|
132
|
+
depHashes.set(unitFile, entry.hash);
|
|
133
|
+
}
|
|
134
|
+
compiledCache.set(absFile, { result: compileResult, depHashes });
|
|
135
|
+
writeBuildOutput(compileResult, options.output);
|
|
136
|
+
result.recompiled++;
|
|
137
|
+
result.results.set(absFile, compileResult);
|
|
138
|
+
}
|
|
139
|
+
catch (err) {
|
|
140
|
+
result.errors.set(absFile, err.message);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return result;
|
|
144
|
+
}
|
|
145
|
+
/** Write compile output files to the output directory. */
|
|
146
|
+
function writeBuildOutput(compileResult, output) {
|
|
147
|
+
fs.mkdirSync(output, { recursive: true });
|
|
148
|
+
for (const dataFile of compileResult.files) {
|
|
149
|
+
const filePath = path.join(output, dataFile.path);
|
|
150
|
+
const dir = path.dirname(filePath);
|
|
151
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
152
|
+
fs.writeFileSync(filePath, dataFile.content);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
function deriveNamespace(filePath) {
|
|
156
|
+
const basename = path.basename(filePath, path.extname(filePath));
|
|
157
|
+
return basename.toLowerCase().replace(/[^a-z0-9]/g, '_');
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Reset the in-memory compile cache. Useful for testing.
|
|
161
|
+
*/
|
|
162
|
+
function resetCompileCache() {
|
|
163
|
+
compiledCache.clear();
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=incremental.js.map
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* FileCache — content-hash-based compilation cache for incremental builds.
|
|
3
|
+
*
|
|
4
|
+
* Stores per-file content hashes and optional cached HIR modules.
|
|
5
|
+
* Persists to `.redscript-cache/` as JSON.
|
|
6
|
+
*/
|
|
7
|
+
import type { HIRModule } from '../hir/types';
|
|
8
|
+
export interface CacheEntry {
|
|
9
|
+
hash: string;
|
|
10
|
+
mtime: number;
|
|
11
|
+
hir?: HIRModule;
|
|
12
|
+
}
|
|
13
|
+
export declare class FileCache {
|
|
14
|
+
private entries;
|
|
15
|
+
private cacheDir;
|
|
16
|
+
constructor(cacheDir: string);
|
|
17
|
+
/** Get cached entry for a file (by absolute path). */
|
|
18
|
+
get(filePath: string): CacheEntry | undefined;
|
|
19
|
+
/** Set cache entry for a file. */
|
|
20
|
+
set(filePath: string, entry: CacheEntry): void;
|
|
21
|
+
/** Check if a file's content has changed since last cache. */
|
|
22
|
+
hasChanged(filePath: string): boolean;
|
|
23
|
+
/** Update the cache entry for a file from disk. Returns true if content changed. */
|
|
24
|
+
update(filePath: string, hir?: HIRModule): boolean;
|
|
25
|
+
/** Remove a file from the cache. */
|
|
26
|
+
delete(filePath: string): void;
|
|
27
|
+
/** Clear all cache entries. */
|
|
28
|
+
clear(): void;
|
|
29
|
+
/** Number of cached entries. */
|
|
30
|
+
get size(): number;
|
|
31
|
+
/** Persist cache to disk (`.redscript-cache/cache.json`). */
|
|
32
|
+
save(): void;
|
|
33
|
+
/** Load cache from disk. */
|
|
34
|
+
load(): void;
|
|
35
|
+
}
|
|
36
|
+
/** SHA-256 hash of a file's content. */
|
|
37
|
+
export declare function hashFile(filePath: string): string;
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* FileCache — content-hash-based compilation cache for incremental builds.
|
|
4
|
+
*
|
|
5
|
+
* Stores per-file content hashes and optional cached HIR modules.
|
|
6
|
+
* Persists to `.redscript-cache/` as JSON.
|
|
7
|
+
*/
|
|
8
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
9
|
+
if (k2 === undefined) k2 = k;
|
|
10
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
11
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
12
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
13
|
+
}
|
|
14
|
+
Object.defineProperty(o, k2, desc);
|
|
15
|
+
}) : (function(o, m, k, k2) {
|
|
16
|
+
if (k2 === undefined) k2 = k;
|
|
17
|
+
o[k2] = m[k];
|
|
18
|
+
}));
|
|
19
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
20
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
21
|
+
}) : function(o, v) {
|
|
22
|
+
o["default"] = v;
|
|
23
|
+
});
|
|
24
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
25
|
+
var ownKeys = function(o) {
|
|
26
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
27
|
+
var ar = [];
|
|
28
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
29
|
+
return ar;
|
|
30
|
+
};
|
|
31
|
+
return ownKeys(o);
|
|
32
|
+
};
|
|
33
|
+
return function (mod) {
|
|
34
|
+
if (mod && mod.__esModule) return mod;
|
|
35
|
+
var result = {};
|
|
36
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
37
|
+
__setModuleDefault(result, mod);
|
|
38
|
+
return result;
|
|
39
|
+
};
|
|
40
|
+
})();
|
|
41
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
42
|
+
exports.FileCache = void 0;
|
|
43
|
+
exports.hashFile = hashFile;
|
|
44
|
+
const fs = __importStar(require("fs"));
|
|
45
|
+
const path = __importStar(require("path"));
|
|
46
|
+
const crypto = __importStar(require("crypto"));
|
|
47
|
+
class FileCache {
|
|
48
|
+
constructor(cacheDir) {
|
|
49
|
+
this.entries = new Map();
|
|
50
|
+
this.cacheDir = cacheDir;
|
|
51
|
+
}
|
|
52
|
+
/** Get cached entry for a file (by absolute path). */
|
|
53
|
+
get(filePath) {
|
|
54
|
+
return this.entries.get(path.resolve(filePath));
|
|
55
|
+
}
|
|
56
|
+
/** Set cache entry for a file. */
|
|
57
|
+
set(filePath, entry) {
|
|
58
|
+
this.entries.set(path.resolve(filePath), entry);
|
|
59
|
+
}
|
|
60
|
+
/** Check if a file's content has changed since last cache. */
|
|
61
|
+
hasChanged(filePath) {
|
|
62
|
+
const absPath = path.resolve(filePath);
|
|
63
|
+
const cached = this.entries.get(absPath);
|
|
64
|
+
if (!cached)
|
|
65
|
+
return true;
|
|
66
|
+
// Quick mtime check first
|
|
67
|
+
try {
|
|
68
|
+
const stat = fs.statSync(absPath);
|
|
69
|
+
if (stat.mtimeMs === cached.mtime)
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
// mtime changed — compare content hash
|
|
76
|
+
const currentHash = hashFile(absPath);
|
|
77
|
+
return currentHash !== cached.hash;
|
|
78
|
+
}
|
|
79
|
+
/** Update the cache entry for a file from disk. Returns true if content changed. */
|
|
80
|
+
update(filePath, hir) {
|
|
81
|
+
const absPath = path.resolve(filePath);
|
|
82
|
+
const changed = this.hasChanged(absPath);
|
|
83
|
+
if (changed) {
|
|
84
|
+
try {
|
|
85
|
+
const stat = fs.statSync(absPath);
|
|
86
|
+
this.entries.set(absPath, {
|
|
87
|
+
hash: hashFile(absPath),
|
|
88
|
+
mtime: stat.mtimeMs,
|
|
89
|
+
hir,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
catch {
|
|
93
|
+
this.entries.delete(absPath);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
else if (hir) {
|
|
97
|
+
// Update HIR even if hash didn't change
|
|
98
|
+
const entry = this.entries.get(absPath);
|
|
99
|
+
if (entry)
|
|
100
|
+
entry.hir = hir;
|
|
101
|
+
}
|
|
102
|
+
return changed;
|
|
103
|
+
}
|
|
104
|
+
/** Remove a file from the cache. */
|
|
105
|
+
delete(filePath) {
|
|
106
|
+
this.entries.delete(path.resolve(filePath));
|
|
107
|
+
}
|
|
108
|
+
/** Clear all cache entries. */
|
|
109
|
+
clear() {
|
|
110
|
+
this.entries.clear();
|
|
111
|
+
}
|
|
112
|
+
/** Number of cached entries. */
|
|
113
|
+
get size() {
|
|
114
|
+
return this.entries.size;
|
|
115
|
+
}
|
|
116
|
+
/** Persist cache to disk (`.redscript-cache/cache.json`). */
|
|
117
|
+
save() {
|
|
118
|
+
fs.mkdirSync(this.cacheDir, { recursive: true });
|
|
119
|
+
const serialized = {
|
|
120
|
+
version: 1,
|
|
121
|
+
entries: {},
|
|
122
|
+
};
|
|
123
|
+
for (const [filePath, entry] of this.entries) {
|
|
124
|
+
// Don't persist HIR — it contains non-serializable references
|
|
125
|
+
serialized.entries[filePath] = { hash: entry.hash, mtime: entry.mtime };
|
|
126
|
+
}
|
|
127
|
+
const cachePath = path.join(this.cacheDir, 'cache.json');
|
|
128
|
+
fs.writeFileSync(cachePath, JSON.stringify(serialized, null, 2));
|
|
129
|
+
}
|
|
130
|
+
/** Load cache from disk. */
|
|
131
|
+
load() {
|
|
132
|
+
const cachePath = path.join(this.cacheDir, 'cache.json');
|
|
133
|
+
try {
|
|
134
|
+
const data = JSON.parse(fs.readFileSync(cachePath, 'utf-8'));
|
|
135
|
+
if (data.version !== 1)
|
|
136
|
+
return;
|
|
137
|
+
for (const [filePath, entry] of Object.entries(data.entries)) {
|
|
138
|
+
this.entries.set(filePath, { hash: entry.hash, mtime: entry.mtime });
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
// No cache or corrupt — start fresh
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
exports.FileCache = FileCache;
|
|
147
|
+
/** SHA-256 hash of a file's content. */
|
|
148
|
+
function hashFile(filePath) {
|
|
149
|
+
const content = fs.readFileSync(filePath);
|
|
150
|
+
return crypto.createHash('sha256').update(content).digest('hex');
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=index.js.map
|
package/dist/src/cli.js
CHANGED
|
@@ -45,8 +45,12 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
45
45
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
46
46
|
const index_1 = require("./index");
|
|
47
47
|
const diagnostics_1 = require("./diagnostics");
|
|
48
|
+
const mc_version_1 = require("./types/mc-version");
|
|
48
49
|
const repl_1 = require("./repl");
|
|
49
50
|
const metadata_1 = require("./builtins/metadata");
|
|
51
|
+
const index_2 = require("./cache/index");
|
|
52
|
+
const deps_1 = require("./cache/deps");
|
|
53
|
+
const incremental_1 = require("./cache/incremental");
|
|
50
54
|
const fs = __importStar(require("fs"));
|
|
51
55
|
const path = __importStar(require("path"));
|
|
52
56
|
const https = __importStar(require("https"));
|
|
@@ -81,6 +85,11 @@ Options:
|
|
|
81
85
|
--namespace <ns> Datapack namespace (default: derived from filename)
|
|
82
86
|
--hot-reload <url> After each successful compile, POST to <url>/reload
|
|
83
87
|
(use with redscript-testharness; e.g. http://localhost:25561)
|
|
88
|
+
--source-map Generate .sourcemap.json files alongside .mcfunction output
|
|
89
|
+
--mc-version <ver> Target Minecraft version (default: 1.21). Affects codegen features.
|
|
90
|
+
e.g. --mc-version 1.20.2, --mc-version 1.19
|
|
91
|
+
--lenient Treat type errors as warnings instead of blocking compilation
|
|
92
|
+
--include <dir> Add a directory to the import search path (repeatable)
|
|
84
93
|
-h, --help Show this help message
|
|
85
94
|
`);
|
|
86
95
|
}
|
|
@@ -190,6 +199,24 @@ function parseArgs(args) {
|
|
|
190
199
|
result.hotReload = args[++i];
|
|
191
200
|
i++;
|
|
192
201
|
}
|
|
202
|
+
else if (arg === '--source-map') {
|
|
203
|
+
result.sourceMap = true;
|
|
204
|
+
i++;
|
|
205
|
+
}
|
|
206
|
+
else if (arg === '--mc-version') {
|
|
207
|
+
result.mcVersionStr = args[++i];
|
|
208
|
+
i++;
|
|
209
|
+
}
|
|
210
|
+
else if (arg === '--lenient') {
|
|
211
|
+
result.lenient = true;
|
|
212
|
+
i++;
|
|
213
|
+
}
|
|
214
|
+
else if (arg === '--include') {
|
|
215
|
+
if (!result.includeDirs)
|
|
216
|
+
result.includeDirs = [];
|
|
217
|
+
result.includeDirs.push(args[++i]);
|
|
218
|
+
i++;
|
|
219
|
+
}
|
|
193
220
|
else if (!result.command) {
|
|
194
221
|
result.command = arg;
|
|
195
222
|
i++;
|
|
@@ -209,15 +236,25 @@ function deriveNamespace(filePath) {
|
|
|
209
236
|
// Convert to valid identifier: lowercase, replace non-alphanumeric with underscore
|
|
210
237
|
return basename.toLowerCase().replace(/[^a-z0-9]/g, '_');
|
|
211
238
|
}
|
|
212
|
-
function compileCommand(file, output, namespace) {
|
|
239
|
+
function compileCommand(file, output, namespace, sourceMap = false, mcVersionStr, lenient = false, includeDirs) {
|
|
213
240
|
// Read source file
|
|
214
241
|
if (!fs.existsSync(file)) {
|
|
215
242
|
console.error(`Error: File not found: ${file}`);
|
|
216
243
|
process.exit(1);
|
|
217
244
|
}
|
|
245
|
+
let mcVersion = mc_version_1.DEFAULT_MC_VERSION;
|
|
246
|
+
if (mcVersionStr) {
|
|
247
|
+
try {
|
|
248
|
+
mcVersion = (0, mc_version_1.parseMcVersion)(mcVersionStr);
|
|
249
|
+
}
|
|
250
|
+
catch (e) {
|
|
251
|
+
console.error(`Error: ${e.message}`);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
218
255
|
const source = fs.readFileSync(file, 'utf-8');
|
|
219
256
|
try {
|
|
220
|
-
const result = (0, index_1.compile)(source, { namespace, filePath: file });
|
|
257
|
+
const result = (0, index_1.compile)(source, { namespace, filePath: file, generateSourceMap: sourceMap, mcVersion, lenient, includeDirs });
|
|
221
258
|
for (const w of result.warnings) {
|
|
222
259
|
console.error(`Warning: ${w}`);
|
|
223
260
|
}
|
|
@@ -235,23 +272,27 @@ function compileCommand(file, output, namespace) {
|
|
|
235
272
|
console.log(` Files: ${result.files.length}`);
|
|
236
273
|
}
|
|
237
274
|
catch (err) {
|
|
238
|
-
console.error((0, diagnostics_1.formatError)(err, source));
|
|
275
|
+
console.error((0, diagnostics_1.formatError)(err, source, file));
|
|
239
276
|
process.exit(1);
|
|
240
277
|
}
|
|
241
278
|
}
|
|
242
|
-
function checkCommand(file) {
|
|
279
|
+
function checkCommand(file, namespace) {
|
|
243
280
|
// Read source file
|
|
244
281
|
if (!fs.existsSync(file)) {
|
|
245
282
|
console.error(`Error: File not found: ${file}`);
|
|
246
283
|
process.exit(1);
|
|
247
284
|
}
|
|
248
285
|
const source = fs.readFileSync(file, 'utf-8');
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
286
|
+
const ns = namespace ?? deriveNamespace(file);
|
|
287
|
+
const result = (0, index_1.checkWithWarnings)(source, ns, file);
|
|
288
|
+
for (const w of result.warnings) {
|
|
289
|
+
console.error(`Warning: ${w}`);
|
|
290
|
+
}
|
|
291
|
+
if (result.error) {
|
|
292
|
+
console.error((0, diagnostics_1.formatError)(result.error, source, file));
|
|
252
293
|
process.exit(1);
|
|
253
294
|
}
|
|
254
|
-
console.log(`✓
|
|
295
|
+
console.log(`✓ No errors found`);
|
|
255
296
|
}
|
|
256
297
|
async function hotReload(url) {
|
|
257
298
|
try {
|
|
@@ -282,49 +323,46 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
|
|
|
282
323
|
console.log(` Output: ${output}`);
|
|
283
324
|
if (hotReloadUrl)
|
|
284
325
|
console.log(` Hot reload: ${hotReloadUrl}`);
|
|
326
|
+
console.log(` Incremental compilation enabled`);
|
|
285
327
|
console.log(` Press Ctrl+C to stop\n`);
|
|
328
|
+
// Set up incremental compilation infrastructure
|
|
329
|
+
const cacheDir = path.join(dir, '.redscript-cache');
|
|
330
|
+
const cache = new index_2.FileCache(cacheDir);
|
|
331
|
+
cache.load();
|
|
332
|
+
const depGraph = new deps_1.DependencyGraph();
|
|
286
333
|
// Debounce timer
|
|
287
334
|
let debounceTimer = null;
|
|
288
|
-
// Compile all .mcrs files in directory
|
|
289
|
-
async function
|
|
335
|
+
// Compile all .mcrs files in directory (incrementally)
|
|
336
|
+
async function compileAllIncremental() {
|
|
290
337
|
const files = findRsFiles(dir);
|
|
291
338
|
if (files.length === 0) {
|
|
292
339
|
console.log(`⚠ No .mcrs files found in ${dir}`);
|
|
293
340
|
return;
|
|
294
341
|
}
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
}
|
|
305
|
-
// Create output directory
|
|
306
|
-
fs.mkdirSync(output, { recursive: true });
|
|
307
|
-
// Write all files
|
|
308
|
-
for (const dataFile of result.files) {
|
|
309
|
-
const filePath = path.join(output, dataFile.path);
|
|
310
|
-
const fileDir = path.dirname(filePath);
|
|
311
|
-
fs.mkdirSync(fileDir, { recursive: true });
|
|
312
|
-
fs.writeFileSync(filePath, dataFile.content);
|
|
313
|
-
}
|
|
314
|
-
const timestamp = new Date().toLocaleTimeString();
|
|
315
|
-
console.log(`✓ [${timestamp}] Compiled ${file} (${result.files.length} files)`);
|
|
316
|
-
}
|
|
317
|
-
catch (err) {
|
|
318
|
-
hasErrors = true;
|
|
319
|
-
const timestamp = new Date().toLocaleTimeString();
|
|
320
|
-
console.error(`✗ [${timestamp}] ${(0, diagnostics_1.formatError)(err, source)}`);
|
|
342
|
+
const incResult = (0, incremental_1.compileIncremental)(files, cache, depGraph, {
|
|
343
|
+
namespace,
|
|
344
|
+
output,
|
|
345
|
+
});
|
|
346
|
+
const timestamp = new Date().toLocaleTimeString();
|
|
347
|
+
// Print warnings from recompiled files
|
|
348
|
+
for (const [file, compileResult] of incResult.results) {
|
|
349
|
+
for (const w of compileResult.warnings) {
|
|
350
|
+
console.error(`Warning: ${w}`);
|
|
321
351
|
}
|
|
352
|
+
console.log(`✓ [${timestamp}] Compiled ${path.relative(dir, file)} (${compileResult.files.length} files)`);
|
|
353
|
+
}
|
|
354
|
+
if (incResult.cached > 0) {
|
|
355
|
+
console.log(` [${timestamp}] ${incResult.cached} file(s) unchanged (cached)`);
|
|
322
356
|
}
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
console.log('');
|
|
357
|
+
// Print errors
|
|
358
|
+
for (const [file, errMsg] of incResult.errors) {
|
|
359
|
+
console.error(`✗ [${timestamp}] ${path.relative(dir, file)}: ${errMsg}`);
|
|
327
360
|
}
|
|
361
|
+
// Persist cache
|
|
362
|
+
cache.save();
|
|
363
|
+
if (incResult.errors.size === 0 && hotReloadUrl)
|
|
364
|
+
await hotReload(hotReloadUrl);
|
|
365
|
+
console.log('');
|
|
328
366
|
}
|
|
329
367
|
// Find all .mcrs files recursively
|
|
330
368
|
function findRsFiles(directory) {
|
|
@@ -332,7 +370,7 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
|
|
|
332
370
|
const entries = fs.readdirSync(directory, { withFileTypes: true });
|
|
333
371
|
for (const entry of entries) {
|
|
334
372
|
const fullPath = path.join(directory, entry.name);
|
|
335
|
-
if (entry.isDirectory()) {
|
|
373
|
+
if (entry.isDirectory() && entry.name !== '.redscript-cache') {
|
|
336
374
|
results.push(...findRsFiles(fullPath));
|
|
337
375
|
}
|
|
338
376
|
else if (entry.isFile() && entry.name.endsWith('.mcrs')) {
|
|
@@ -342,7 +380,7 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
|
|
|
342
380
|
return results;
|
|
343
381
|
}
|
|
344
382
|
// Initial compile
|
|
345
|
-
void
|
|
383
|
+
void compileAllIncremental();
|
|
346
384
|
// Watch for changes
|
|
347
385
|
fs.watch(dir, { recursive: true }, (eventType, filename) => {
|
|
348
386
|
if (filename && filename.endsWith('.mcrs')) {
|
|
@@ -352,7 +390,7 @@ function watchCommand(dir, output, namespace, hotReloadUrl) {
|
|
|
352
390
|
}
|
|
353
391
|
debounceTimer = setTimeout(() => {
|
|
354
392
|
console.log(`📝 Change detected: ${filename}`);
|
|
355
|
-
void
|
|
393
|
+
void compileAllIncremental();
|
|
356
394
|
}, 100);
|
|
357
395
|
}
|
|
358
396
|
});
|
|
@@ -380,7 +418,7 @@ async function main() {
|
|
|
380
418
|
{
|
|
381
419
|
const namespace = parsed.namespace ?? deriveNamespace(parsed.file);
|
|
382
420
|
const output = parsed.output ?? './dist';
|
|
383
|
-
compileCommand(parsed.file, output, namespace);
|
|
421
|
+
compileCommand(parsed.file, output, namespace, parsed.sourceMap, parsed.mcVersionStr, parsed.lenient, parsed.includeDirs);
|
|
384
422
|
}
|
|
385
423
|
break;
|
|
386
424
|
case 'watch':
|
|
@@ -397,7 +435,7 @@ async function main() {
|
|
|
397
435
|
printUsage();
|
|
398
436
|
process.exit(1);
|
|
399
437
|
}
|
|
400
|
-
checkCommand(parsed.file);
|
|
438
|
+
checkCommand(parsed.file, parsed.namespace);
|
|
401
439
|
break;
|
|
402
440
|
case 'fmt':
|
|
403
441
|
case 'format': {
|
package/dist/src/compile.d.ts
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Preprocessing utilities and v2 compile re-export.
|
|
5
5
|
*/
|
|
6
|
-
export { compile, CompileOptions, CompileResult } from '
|
|
7
|
-
export type { DatapackFile } from '
|
|
6
|
+
export { compile, CompileOptions, CompileResult } from './emit/compile';
|
|
7
|
+
export type { DatapackFile } from './emit/index';
|
|
8
8
|
export interface SourceRange {
|
|
9
9
|
startLine: number;
|
|
10
10
|
endLine: number;
|
|
@@ -32,6 +32,7 @@ export declare function resolveSourceLine(combinedLine: number, ranges: SourceRa
|
|
|
32
32
|
interface PreprocessOptions {
|
|
33
33
|
filePath?: string;
|
|
34
34
|
seen?: Set<string>;
|
|
35
|
+
includeDirs?: string[];
|
|
35
36
|
}
|
|
36
37
|
export declare function preprocessSourceWithMetadata(source: string, options?: PreprocessOptions): PreprocessedSource;
|
|
37
38
|
export declare function preprocessSource(source: string, options?: PreprocessOptions): string;
|