Commit 604eb34
fix(cli): meta init declares what meta gen's output imports, not just what its generators do
A brand-new project could not run the next step the tool itself prints. `npm init -y`,
install the CLI, `meta init`, `meta gen`, then `npx tsc` — the line `meta gen` ends on —
and pnpm reported NINE TS2307s across all three generated files, on five specifiers the
generated code imports and no manifest declared: drizzle-orm, zod, fastify,
`@metaobjectsdev/runtime-ts` and its `/drizzle-fastify` subpath. Under npm, hoisting out
of the CLI's own tree hides four of the five and only fastify fails; the release smoke
test runs both arms for exactly this reason.
`addScaffoldDevDependencies` already fixed this defect one layer in, and its docstring
records why: the generator sources under `codegen/generators/` import
`@metaobjectsdev/codegen-ts` and `@metaobjectsdev/metadata`, nothing declared them, and
"the scaffold arrived un-typecheckable: ten TS2307s on files `meta init` had just
written." The identical argument reaches one layer further out — to the code `meta gen`
writes — and nobody followed it there.
They go in `dependencies`, not `devDependencies`: generated routes and queries are
application source that runs in production. The two build-time packages stay where they
are.
The RANGES are read from `@metaobjectsdev/runtime-ts`'s own `peerDependencies` rather
than written into the scaffolder. That package already declares the versions its helpers
are built against, bounded above (the peer-range gate enforces the bound), so a second
copy here would be a second thing to keep in step, and the failure mode of drift is an
adopter installing a major nothing was tested against. A range that cannot be read means
the package is SKIPPED, never guessed at.
Proven against the published artifact, not just locally: the pnpm arm of the rc.3 smoke
test went from 9 errors to `tsc --noEmit` exit 0 with exactly these four declarations
added and nothing else changed.
The gate asks the question the manifest can answer. Every test that runs `gen` scaffolds
into `test/fixtures/__tmp__/` DELIBERATELY, so node resolution walks up into cli's own
node_modules where fastify, drizzle-orm and zod all sit — `mkGenProjectDir`'s comment
says so outright. That is why the generated imports resolved in every existing test for a
reason having nothing to do with the adopter's manifest, and why none of them could see
this. The new test runs in the same place and asks whether the scaffolder DECLARED each
bare specifier, which is answerable from the manifest alone and is what a strict
installer enforces. It also asserts the four specifiers are really present in the output,
so a regression that stops emitting them cannot make it pass vacuously.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01At3v6M6uqECZ2Sb5eUv6YY1 parent 4cc54a4 commit 604eb34
2 files changed
Lines changed: 195 additions & 0 deletions
File tree
- server/typescript/packages/cli
- src/commands
- test
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
| 5 | + | |
5 | 6 | | |
6 | 7 | | |
7 | 8 | | |
| |||
774 | 775 | | |
775 | 776 | | |
776 | 777 | | |
| 778 | + | |
777 | 779 | | |
778 | 780 | | |
779 | 781 | | |
| |||
798 | 800 | | |
799 | 801 | | |
800 | 802 | | |
| 803 | + | |
| 804 | + | |
| 805 | + | |
| 806 | + | |
| 807 | + | |
| 808 | + | |
| 809 | + | |
801 | 810 | | |
802 | 811 | | |
803 | 812 | | |
| |||
844 | 853 | | |
845 | 854 | | |
846 | 855 | | |
| 856 | + | |
| 857 | + | |
| 858 | + | |
| 859 | + | |
| 860 | + | |
| 861 | + | |
| 862 | + | |
| 863 | + | |
| 864 | + | |
| 865 | + | |
| 866 | + | |
| 867 | + | |
| 868 | + | |
| 869 | + | |
| 870 | + | |
| 871 | + | |
| 872 | + | |
| 873 | + | |
| 874 | + | |
| 875 | + | |
| 876 | + | |
| 877 | + | |
| 878 | + | |
| 879 | + | |
| 880 | + | |
| 881 | + | |
| 882 | + | |
| 883 | + | |
| 884 | + | |
| 885 | + | |
| 886 | + | |
| 887 | + | |
| 888 | + | |
| 889 | + | |
| 890 | + | |
| 891 | + | |
| 892 | + | |
| 893 | + | |
| 894 | + | |
| 895 | + | |
| 896 | + | |
| 897 | + | |
| 898 | + | |
| 899 | + | |
| 900 | + | |
| 901 | + | |
| 902 | + | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
847 | 936 | | |
848 | 937 | | |
849 | 938 | | |
| |||
Lines changed: 106 additions & 0 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
0 commit comments