Skip to content

Version 1.3.26 - #1682

Merged
sinclairzx81 merged 5 commits into
mainfrom
meta
Sep 4, 2026
Merged

Version 1.3.26#1682
sinclairzx81 merged 5 commits into
mainfrom
meta

Conversation

@sinclairzx81

Copy link
Copy Markdown
Owner

This PR is specification work for Ref, RemoteRef, and DynamicRef, completing the 2020-12 specification and pushing overall spec adherence to 98.7% across all drafts.

Note

This PR is provisional work for including a new MetaSchema component in typebox/schema; however, this will be deferred until the next minor revision, as we currently lack a V1 meta-schema and likely also want to include a TypeBox extension schema for JavaScript primitives. There is some crossover here with the recently added Intern(...) function, where it may be possible to compress meta-schemas to reduce bundle sizes. For now, we will need to port them to compliance tests and assign them via the Context argument.

Bundle

The current resolution logic for dynamicRef and remoteRef is ridiculously complex and spread across the Stack and Resolve schema modules. The Stack module is used to track lexical, dynamic, and resource scopes, and Resolve receives a stack frame which it uses to resolve for multiple drafts. Despite my best efforts to compress it for this revision, the current resolver adds approximately 1 KB to the bundle. The following table shows the metrics:

Before

┌───────┬───────────────────────────────────────────┬─────────────┬─────────────┬────────────┐
│ (idx) │ pathbundledminifiedgzipped    │
├───────┼───────────────────────────────────────────┼─────────────┼─────────────┼────────────┤
│     0"task/metrics/all.ts""465.73 KB""185.40 KB""46.08 KB" │
│     1"task/metrics/compile_all.ts""342.13 KB""132.31 KB""34.39 KB" │
│     2"task/metrics/format.ts""24.65 KB""14.20 KB""4.01 KB"  │
│     3"task/metrics/schema_bench.ts""124.52 KB""55.66 KB""15.00 KB" │
│     4"task/metrics/schema_all.ts""190.69 KB""84.50 KB""21.07 KB" │
│     5"task/metrics/schema_check.ts""84.46 KB""38.67 KB""10.77 KB" │
│     6"task/metrics/schema_compile.ts""160.79 KB""70.34 KB""18.33 KB" │
│     7"task/metrics/schema_errors.ts""113.74 KB""51.02 KB""13.58 KB" │
│     8"task/metrics/schema_intern.ts""64.62 KB""31.80 KB""9.29 KB"  │
│     9"task/metrics/schema_parse.ts""114.79 KB""51.38 KB""13.68 KB" │
│    10"task/metrics/type_all.ts""224.34 KB""83.29 KB""21.44 KB" │
│    11"task/metrics/type_barrel.ts""20.23 KB""9.24 KB""3.26 KB"  │
│    12"task/metrics/type_builder.ts""211.50 KB""76.88 KB""19.70 KB" │
│    13"task/metrics/type_default.ts""211.54 KB""76.89 KB""19.69 KB" │
│    14"task/metrics/type_realistic_dynamic.ts""122.41 KB""54.61 KB""14.77 KB" │
│    15"task/metrics/type_realistic_compiled.ts""168.43 KB""73.62 KB""19.48 KB" │
│    16"task/metrics/type_script.ts""200.48 KB""72.04 KB""18.25 KB" │
│    17"task/metrics/value_all.ts""306.88 KB""117.84 KB""31.10 KB" │
│    18"task/metrics/value_check.ts""282.00 KB""108.23 KB""28.27 KB" │
│    19"task/metrics/value_clean.ts""281.99 KB""108.23 KB""28.28 KB" │
│    20"task/metrics/value_clone.ts""282.00 KB""108.23 KB""28.27 KB" │
│    21"task/metrics/value_convert.ts""282.00 KB""108.23 KB""28.27 KB" │
│    22"task/metrics/value_create.ts""288.75 KB""110.64 KB""29.00 KB" │
│    23"task/metrics/value_hash.ts""282.09 KB""108.26 KB""28.28 KB" │
│    24"task/metrics/value_pointer.ts""282.01 KB""108.23 KB""28.27 KB" │
│    25"task/metrics/value_repair.ts""298.25 KB""114.07 KB""29.98 KB" │
└───────┴───────────────────────────────────────────┴─────────────┴─────────────┴────────────┘

After

┌───────┬───────────────────────────────────────────┬─────────────┬─────────────┬────────────┐
│ (idx) │ pathbundledminifiedgzipped    │
├───────┼───────────────────────────────────────────┼─────────────┼─────────────┼────────────┤
│     0"task/metrics/all.ts""477.10 KB""189.36 KB""47.17 KB" │
│     1"task/metrics/compile_all.ts""353.47 KB""136.25 KB""35.48 KB" │
│     2"task/metrics/format.ts""24.65 KB""14.20 KB""4.01 KB"  │
│     3"task/metrics/schema_bench.ts""135.86 KB""59.57 KB""16.08 KB" │
│     4"task/metrics/schema_all.ts""202.06 KB""88.44 KB""22.13 KB" │
│     5"task/metrics/schema_check.ts""95.79 KB""42.60 KB""11.83 KB" │
│     6"task/metrics/schema_compile.ts""172.13 KB""74.27 KB""19.40 KB" │
│     7"task/metrics/schema_errors.ts""125.07 KB""54.95 KB""14.65 KB" │
│     8"task/metrics/schema_intern.ts""69.83 KB""33.88 KB""9.88 KB"  │
│     9"task/metrics/schema_parse.ts""126.13 KB""55.30 KB""14.74 KB" │
│    10"task/metrics/type_all.ts""224.34 KB""83.29 KB""21.44 KB" │
│    11"task/metrics/type_barrel.ts""20.23 KB""9.24 KB""3.26 KB"  │
│    12"task/metrics/type_builder.ts""211.50 KB""76.88 KB""19.70 KB" │
│    13"task/metrics/type_default.ts""211.54 KB""76.89 KB""19.69 KB" │
│    14"task/metrics/type_realistic_dynamic.ts""133.75 KB""58.54 KB""15.86 KB" │
│    15"task/metrics/type_realistic_compiled.ts""179.76 KB""77.54 KB""20.54 KB" │
│    16"task/metrics/type_script.ts""200.48 KB""72.04 KB""18.25 KB" │
│    17"task/metrics/value_all.ts""318.22 KB""121.77 KB""32.13 KB" │
│    18"task/metrics/value_check.ts""293.33 KB""112.16 KB""29.31 KB" │
│    19"task/metrics/value_clean.ts""293.33 KB""112.16 KB""29.31 KB" │
│    20"task/metrics/value_clone.ts""293.33 KB""112.16 KB""29.31 KB" │
│    21"task/metrics/value_convert.ts""293.33 KB""112.16 KB""29.32 KB" │
│    22"task/metrics/value_create.ts""300.09 KB""114.58 KB""30.09 KB" │
│    23"task/metrics/value_hash.ts""293.42 KB""112.20 KB""29.33 KB" │
│    24"task/metrics/value_pointer.ts""293.34 KB""112.16 KB""29.31 KB" │
│    25"task/metrics/value_repair.ts""309.59 KB""118.01 KB""31.04 KB" │
└───────┴───────────────────────────────────────────┴─────────────┴─────────────┴────────────┘

Additional work will be done to optimize bundle sizes in subsequent revisions now that the TB1X schema compiler infrastructure is largely complete. The infrastructure should be in a much better position now that we have a passing test suite to build upon.

@sinclairzx81
sinclairzx81 merged commit f1090f1 into main Sep 4, 2026
6 checks passed
@sinclairzx81
sinclairzx81 deleted the meta branch September 4, 2026 18:26
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant