@metaobjectsdev/cli 1.0.0-rc.4 → 1.0.0-rc.5
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/dist/src/commands/gen.d.ts +3 -0
- package/dist/src/commands/gen.d.ts.map +1 -1
- package/dist/src/commands/gen.js +5 -3
- package/dist/src/commands/gen.js.map +1 -1
- package/dist/src/commands/init.d.ts.map +1 -1
- package/dist/src/commands/init.js +155 -33
- package/dist/src/commands/init.js.map +1 -1
- package/dist/src/commands/migrate.d.ts +1 -0
- package/dist/src/commands/migrate.d.ts.map +1 -1
- package/dist/src/commands/migrate.js +1 -1
- package/dist/src/commands/migrate.js.map +1 -1
- package/dist/src/commands/verify.d.ts.map +1 -1
- package/dist/src/commands/verify.js +39 -9
- package/dist/src/commands/verify.js.map +1 -1
- package/dist/src/index.d.ts +2 -0
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +30 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/lib/args.d.ts +228 -0
- package/dist/src/lib/args.d.ts.map +1 -1
- package/dist/src/lib/args.js +88 -72
- package/dist/src/lib/args.js.map +1 -1
- package/dist/src/lib/docs-drift.d.ts +12 -1
- package/dist/src/lib/docs-drift.d.ts.map +1 -1
- package/dist/src/lib/docs-drift.js +71 -11
- package/dist/src/lib/docs-drift.js.map +1 -1
- package/dist/src/lib/git-ignore.d.ts +40 -0
- package/dist/src/lib/git-ignore.d.ts.map +1 -0
- package/dist/src/lib/git-ignore.js +77 -0
- package/dist/src/lib/git-ignore.js.map +1 -0
- package/dist/src/lib/load-metaobjects-config.d.ts.map +1 -1
- package/dist/src/lib/load-metaobjects-config.js +65 -1
- package/dist/src/lib/load-metaobjects-config.js.map +1 -1
- package/dist/src/lib/manifest-ignored-check.d.ts.map +1 -1
- package/dist/src/lib/manifest-ignored-check.js +5 -31
- package/dist/src/lib/manifest-ignored-check.js.map +1 -1
- package/dist/src/lib/output.d.ts +10 -1
- package/dist/src/lib/output.d.ts.map +1 -1
- package/dist/src/lib/output.js +15 -6
- package/dist/src/lib/output.js.map +1 -1
- package/dist/src/lib/requirement-lint.d.ts.map +1 -1
- package/dist/src/lib/requirement-lint.js +25 -5
- package/dist/src/lib/requirement-lint.js.map +1 -1
- package/package.json +10 -10
- package/src/commands/gen.ts +5 -3
- package/src/commands/init.ts +162 -37
- package/src/commands/migrate.ts +1 -1
- package/src/commands/verify.ts +46 -9
- package/src/index.ts +30 -2
- package/src/lib/args.ts +96 -72
- package/src/lib/docs-drift.ts +92 -12
- package/src/lib/git-ignore.ts +115 -0
- package/src/lib/load-metaobjects-config.ts +58 -1
- package/src/lib/manifest-ignored-check.ts +5 -28
- package/src/lib/output.ts +30 -5
- package/src/lib/requirement-lint.ts +26 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAiD,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"output.js","sourceRoot":"","sources":["../../../src/lib/output.ts"],"names":[],"mappings":"AAAA,mDAAmD;AACnD,EAAE;AACF,0EAA0E;AAC1E,mEAAmE;AAGnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,cAAc,EAAiD,MAAM,eAAe,CAAC;AAsD9F,MAAM,UAAU,GAAkC;IAChD,GAAG,EAAE,GAAG;IACR,SAAS,EAAE,GAAG;IACd,MAAM,EAAE,GAAG;IACX,QAAQ,EAAE,GAAG;IACb,SAAS,EAAE,GAAG;IACd,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;CACb,CAAC;AAEF,MAAM,SAAS,GAAkC;IAC/C,GAAG,EAAE,KAAK;IACV,SAAS,EAAE,WAAW;IACtB,MAAM,EAAE,QAAQ;IAChB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,UAAU,eAAe,CAAC,MAAsB,EAAE,IAAmB;IACzE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;IACpD,mFAAmF;IACnF,MAAM,MAAM,GAAG,WAAW,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;IAE/H,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,MAAM,kCAAkC,CAAC;IACrD,CAAC;IAED,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACrC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACvE,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAChD,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;QACnE,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,KAAK,UAAU,KAAK,IAAI,CAAC,MAAM,GAAG,WAAW,EAAE,CAAC,CAAC;QACtE,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,UAAU,GAAG,WAAW,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE;QACT,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;QACzC,OAAO,GAAG,CAAC;IACb,CAAC,EACD,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CACvF,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,iFAAiF;IACjF,kFAAkF;IAClF,6DAA6D;IAC7D,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;IAC9C,IAAI,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAClD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IAC7D,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;IACnE,IAAI,MAAM,CAAC,SAAS,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,YAAY,CAAC,CAAC;IACtE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAChE,IAAI,MAAM,CAAC,OAAO,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAChE,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAE5C,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IACzE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAuCD,MAAM,UAAU,mBAAmB,CAAC,MAA0B,EAAE,KAAoB;IAClF,MAAM,MAAM,GAAG,eAAe,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,UAAU,EAAE,CAAC;IAC5G,MAAM,KAAK,GAAa,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAErC,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/F,OAAO,GAAG,MAAM,4BAA4B,CAAC;IAC/C,CAAC;IAED,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,KAAK,CAAC,IAAI,CAAC,cAAc,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;QAC/C,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YAC/B,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,cAAc,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,2CAA2C,CAAC,CAAC;QACxD,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,MAAM,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;QAC7D,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACzB,KAAK,MAAM,CAAC,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;YACpC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACpE,KAAK,CAAC,IAAI,CAAC,mDAAmD,EAAE,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,8EAA8E;AAC9E,iCAAiC;AACjC,8EAA8E;AAE9E,MAAM,UAAU,eAAe,CAAC,MAAsB;IAMpD,MAAM,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,EACrD,EAAE,GAAG,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,CACvF,CAAC;IACF,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,0EAA0E;IAC1E,0CAA0C;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,SAAS,CAAC;IAC9C,IAAI,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,OAAO,UAAU,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,MAAM;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;IACzD,IAAI,MAAM,CAAC,QAAQ;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,QAAQ,WAAW,CAAC,CAAC;IAC/D,IAAI,MAAM,CAAC,SAAS;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,SAAS,YAAY,CAAC,CAAC;IAClE,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,OAAO;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,OAAO,UAAU,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACvC,CAAC,CAAC,8BAA8B,MAAM,CAAC,MAAM,EAAE;QAC/C,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrB,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;QACpC,CAAC,CAAC,CAAC,2EAA2E,CAAC;QAC/E,CAAC,CAAC,CAAC,6CAA6C,EAAE,sHAAsH,CAAC,CAAC;IAC5K,4EAA4E;IAC5E,sDAAsD;IACtD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY;WACnC,cAAc,CAAqB,4DAA4D,CAAC,CAAC;IACtG,8EAA8E;IAC9E,2EAA2E;IAC3E,IAAI,YAAY,CAAC,KAAK,GAAG,CAAC,EAAE,CAAC;QAC3B,IAAI,CAAC,IAAI,CACP,GAAG,YAAY,CAAC,KAAK,qHAAqH,CAC3I,CAAC;IACJ,CAAC;IACD,OAAO;QACL,GAAG,EAAE,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;QAClE,OAAO;QACP,IAAI;QACJ,YAAY;KACb,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,MAAsB;IACxD,OAAO,UAAU,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,8EAA8E;AAC9E,qCAAqC;AACrC,8EAA8E;AAE9E,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAM5D,MAAM,aAAa,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACnF,MAAM,OAAO,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAExE,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC3E,MAAM,aAAa,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrC,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,KAAK,CAAC;IAChD,2EAA2E;IAC3E,wEAAwE;IACxE,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,CAAC;IACzD,MAAM,MAAM,GAAG,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,aAAa,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,gFAAgF;IAChF,yEAAyE;IACzE,+EAA+E;IAC/E,+EAA+E;IAC/E,gFAAgF;IAChF,uCAAuC;IACvC,IAAI,OAAe,CAAC;IACpB,IAAI,IAAc,CAAC;IACnB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,GAAG,GAAG,aAAa,eAAe,CAAC;QAC1C,IAAI,GAAG;YACL,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,uBAAuB,CAAC,CAAC,SAAS,cAAc,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7F,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,0CAA0C,CAAC,CAAC,IAAI,EAAE,CAAC;SACnF,CAAC;IACJ,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,aAAa,kCAAkC,CAAC,CAAC,CAAC,mBAAmB,CAAC;QAChG,IAAI,GAAG,UAAU;YACf,CAAC,CAAC,CAAC,iDAAiD,CAAC;YACrD,CAAC,CAAC,CAAC,iDAAiD,CAAC,CAAC;IAC1D,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,OAAO,GAAG,GAAG,MAAM,cAAc,CAAC;QAClC,IAAI,GAAG,CAAC,mEAAmE,CAAC,CAAC;IAC/E,CAAC;SAAM,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC9B,OAAO,GAAG,GAAG,MAAM,WAAW,OAAO,CAAC,MAAM,eAAe,CAAC;QAC5D,IAAI,GAAG,CAAC,mDAAmD,CAAC,CAAC;IAC/D,CAAC;SAAM,IAAI,MAAM,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,OAAO,GAAG,GAAG,MAAM,SAAS,MAAM,CAAC,YAAY,CAAC,MAAM,oBAAoB,CAAC;QAC3E,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,QAAQ;YAC/B,CAAC,CAAC,CAAC,wEAAwE,CAAC;YAC5E,uEAAuE;YACvE,uEAAuE;YACvE,oEAAoE;YACpE,CAAC,CAAC,CAAC,oDAAoD,CAAC,CAAC;IAC7D,CAAC;SAAM,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,GAAG,mBAAmB,CAAC;QAC9B,IAAI,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,OAAO,GAAG,GAAG,aAAa,eAAe,CAAC;QAC1C,IAAI,GAAG,CAAC,kDAAkD,CAAC,CAAC;IAC9D,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAClE,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,MAA0B;IAChE,OAAO,UAAU,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC,CAAC;AACjD,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-lint.d.ts","sourceRoot":"","sources":["../../../src/lib/requirement-lint.ts"],"names":[],"mappings":"AAoCA,OAAO,EAcL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EACyB,KAAK,oBAAoB,EAAE,KAAK,UAAU,EACzE,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,qCAAqC,0CAA0C,CAAC;AAC7F,eAAO,MAAM,oCAAoC,yCAAyC,CAAC;AAC3F,eAAO,MAAM,wCAAwC,6CAA6C,CAAC;AACnG,eAAO,MAAM,iCAAiC,sCAAsC,CAAC;AACrF,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAC3E,eAAO,MAAM,+BAA+B,oCAAoC,CAAC;AACjF,eAAO,MAAM,+BAA+B,oCAAoC,CAAC;
|
|
1
|
+
{"version":3,"file":"requirement-lint.d.ts","sourceRoot":"","sources":["../../../src/lib/requirement-lint.ts"],"names":[],"mappings":"AAoCA,OAAO,EAcL,KAAK,QAAQ,EACd,MAAM,0BAA0B,CAAC;AAMlC,OAAO,EACyB,KAAK,oBAAoB,EAAE,KAAK,UAAU,EACzE,MAAM,wBAAwB,CAAC;AAEhC,eAAO,MAAM,qCAAqC,0CAA0C,CAAC;AAC7F,eAAO,MAAM,oCAAoC,yCAAyC,CAAC;AAC3F,eAAO,MAAM,wCAAwC,6CAA6C,CAAC;AACnG,eAAO,MAAM,iCAAiC,sCAAsC,CAAC;AACrF,eAAO,MAAM,4BAA4B,iCAAiC,CAAC;AAC3E,eAAO,MAAM,+BAA+B,oCAAoC,CAAC;AACjF,eAAO,MAAM,+BAA+B,oCAAoC,CAAC;AA+KjF;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,QAAQ;AACd;;;2DAG2D;AAC3D,SAAS,GAAE,SAAS,oBAAoB,EAAuC,GAC9E,UAAU,EAAE,CAkHd"}
|
|
@@ -138,6 +138,25 @@ const INERT_SLOTS = [DOC_ATTR_SUMMARY];
|
|
|
138
138
|
* split rather than move.
|
|
139
139
|
*/
|
|
140
140
|
const TITLE_IS_AN_ID = /^[A-Z]{2,}[- ]?\d+/;
|
|
141
|
+
/**
|
|
142
|
+
* What is LEFT of a title once a leading catalogue id and its separator are removed.
|
|
143
|
+
*
|
|
144
|
+
* The rule fires only when that remainder is empty — when the label IS the id and
|
|
145
|
+
* nothing else. A title that carries an id AND a noun phrase is not "an id"; it is a
|
|
146
|
+
* label with a citation prefix, which is a house style, and the warning's own name is
|
|
147
|
+
* false for it.
|
|
148
|
+
*
|
|
149
|
+
* Measured on a 323-node adopter ledger that uses `@title` deliberately as its bridge
|
|
150
|
+
* to a spec catalogue: the un-narrowed rule fired **203 times**, on every run, telling
|
|
151
|
+
* that author their entire convention was wrong and offering a 203-entry edit. That is
|
|
152
|
+
* the "355 findings, all false" shape the 0.24.2 narrowing exists to avoid, reproduced
|
|
153
|
+
* by the check that narrowing shipped alongside. A lint people argue with is a lint
|
|
154
|
+
* people mute, and muting takes the six useful checks with it.
|
|
155
|
+
*
|
|
156
|
+
* `@title: "REQ-1234"` — a slot holding only a citation, with no label anywhere — is
|
|
157
|
+
* still caught, and that is the case the rule was written for.
|
|
158
|
+
*/
|
|
159
|
+
const TITLE_ID_ONLY = /^[A-Z]{2,}[- ]?\d+[\s\-–—:.]*$/;
|
|
141
160
|
/** Lowercase, drop everything that is not alphanumeric, collapse the gaps.
|
|
142
161
|
* Two slots "say the same thing" only if they survive this identically — no
|
|
143
162
|
* similarity score, no threshold. A fuzzy match on prose produces findings the
|
|
@@ -306,11 +325,12 @@ addressed = collectAddressedRequirements(root)) {
|
|
|
306
325
|
}
|
|
307
326
|
// -- an id is not a label -------------------------------------------------
|
|
308
327
|
const title = readOwnSlot(node, DOC_ATTR_TITLE);
|
|
309
|
-
if (title !== undefined &&
|
|
310
|
-
out.push(warn(path, WARN_REQUIREMENT_TITLE_IS_AN_ID, `@title
|
|
311
|
-
`an id is not a name, so this
|
|
312
|
-
`@${REQUIREMENT_ATTR_TRACKED_BY}, which is the free-form reference slot and IS read, and
|
|
313
|
-
`
|
|
328
|
+
if (title !== undefined && TITLE_ID_ONLY.test(title.trim())) {
|
|
329
|
+
out.push(warn(path, WARN_REQUIREMENT_TITLE_IS_AN_ID, `@title holds only a catalogue or ticket id: ${excerpt(title)}. A title is the entry's ` +
|
|
330
|
+
`LABEL and an id is not a name, so this slot says nothing a reader can use. Put the id in ` +
|
|
331
|
+
`@${REQUIREMENT_ATTR_TRACKED_BY}, which is the free-form reference slot and IS read, and ` +
|
|
332
|
+
`give @${DOC_ATTR_TITLE} a noun phrase. A title that carries an id AND a phrase ` +
|
|
333
|
+
`("FR-448 — prompt construction as typed payloads") is a house style and is NOT flagged.`));
|
|
314
334
|
}
|
|
315
335
|
}
|
|
316
336
|
return out;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirement-lint.js","sourceRoot":"","sources":["../../../src/lib/requirement-lint.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"requirement-lint.js","sourceRoot":"","sources":["../../../src/lib/requirement-lint.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@metaobjectsdev/cli",
|
|
3
|
-
"version": "1.0.0-rc.
|
|
3
|
+
"version": "1.0.0-rc.5",
|
|
4
4
|
"description": "CLI for MetaObjects: scaffold, codegen, migrate, and drift-detection commands.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/src/index.js",
|
|
@@ -51,15 +51,15 @@
|
|
|
51
51
|
"@biomejs/js-api": "^0.7.0",
|
|
52
52
|
"@biomejs/wasm-nodejs": "^1.9.4",
|
|
53
53
|
"@libsql/kysely-libsql": "^0.4.0",
|
|
54
|
-
"@metaobjectsdev/codegen-ts": "1.0.0-rc.
|
|
55
|
-
"@metaobjectsdev/codegen-ts-react": "1.0.0-rc.
|
|
56
|
-
"@metaobjectsdev/codegen-ts-tanstack": "1.0.0-rc.
|
|
57
|
-
"@metaobjectsdev/docs-site": "1.0.0-rc.
|
|
58
|
-
"@metaobjectsdev/metadata": "1.0.0-rc.
|
|
59
|
-
"@metaobjectsdev/migrate-ts": "1.0.0-rc.
|
|
60
|
-
"@metaobjectsdev/render": "1.0.0-rc.
|
|
61
|
-
"@metaobjectsdev/runtime-ts": "1.0.0-rc.
|
|
62
|
-
"@metaobjectsdev/sdk": "1.0.0-rc.
|
|
54
|
+
"@metaobjectsdev/codegen-ts": "1.0.0-rc.5",
|
|
55
|
+
"@metaobjectsdev/codegen-ts-react": "1.0.0-rc.5",
|
|
56
|
+
"@metaobjectsdev/codegen-ts-tanstack": "1.0.0-rc.5",
|
|
57
|
+
"@metaobjectsdev/docs-site": "1.0.0-rc.5",
|
|
58
|
+
"@metaobjectsdev/metadata": "1.0.0-rc.5",
|
|
59
|
+
"@metaobjectsdev/migrate-ts": "1.0.0-rc.5",
|
|
60
|
+
"@metaobjectsdev/render": "1.0.0-rc.5",
|
|
61
|
+
"@metaobjectsdev/runtime-ts": "1.0.0-rc.5",
|
|
62
|
+
"@metaobjectsdev/sdk": "1.0.0-rc.5",
|
|
63
63
|
"@toon-format/toon": "^2.3.0",
|
|
64
64
|
"jiti": "^2.4.0"
|
|
65
65
|
},
|
package/src/commands/gen.ts
CHANGED
|
@@ -17,10 +17,12 @@ import { loadMemory, resolveCollection } from "@metaobjectsdev/sdk";
|
|
|
17
17
|
import { runGen, listGenerators } from "@metaobjectsdev/codegen-ts";
|
|
18
18
|
import type { WriteStatus } from "@metaobjectsdev/codegen-ts";
|
|
19
19
|
|
|
20
|
-
function mapStatus(s: WriteStatus): GenFileStatus {
|
|
20
|
+
export function mapStatus(s: WriteStatus): GenFileStatus {
|
|
21
21
|
switch (s) {
|
|
22
|
-
case "new":
|
|
23
|
-
|
|
22
|
+
case "new": return "new";
|
|
23
|
+
// NOT folded into "new": an existing artifact being rewritten is a different
|
|
24
|
+
// fact from an entity appearing, and the engine has always distinguished them.
|
|
25
|
+
case "overwrite": return "overwrite";
|
|
24
26
|
case "merged": return "merged";
|
|
25
27
|
case "conflict": return "conflict";
|
|
26
28
|
case "unchanged":
|
package/src/commands/init.ts
CHANGED
|
@@ -138,9 +138,15 @@ export default defineConfig({
|
|
|
138
138
|
barrel(),
|
|
139
139
|
],
|
|
140
140
|
docs: {
|
|
141
|
-
outDir: "./docs", //
|
|
141
|
+
outDir: "./docs", // every surface lands here (run: meta docs)
|
|
142
142
|
layout: "flat", // or "package" for multi-package models
|
|
143
|
-
surfaces
|
|
143
|
+
// surfaces defaults to ["model", "api", "requirements", "agent"] — all four.
|
|
144
|
+
// Deliberately NOT narrowed here: the requirements and agent surfaces emit ZERO
|
|
145
|
+
// files for a project that has nothing for them to describe, and the always-on
|
|
146
|
+
// agent context points at the agent/ pages by name. Scaffolding a narrower list
|
|
147
|
+
// turned that pointer into a pointer at nothing. Narrow it yourself if you want
|
|
148
|
+
// fewer docs — but note it says what your docs ARE, not which of them you commit
|
|
149
|
+
// (a page you do not commit is exempt from verify --docs once it is git-ignored).
|
|
144
150
|
},
|
|
145
151
|
});
|
|
146
152
|
`;
|
|
@@ -474,6 +480,57 @@ async function writeOwnedGenerators(opts: InitOptions, result: InitResult): Prom
|
|
|
474
480
|
await writeFile(abs, readReferenceTemplate(name), "utf8");
|
|
475
481
|
result.created.push(rel);
|
|
476
482
|
}
|
|
483
|
+
await writeCodegenTsconfig(opts, result);
|
|
484
|
+
}
|
|
485
|
+
|
|
486
|
+
/** The owned codegen tier's own tsconfig — see writeCodegenTsconfig. */
|
|
487
|
+
const CODEGEN_TSCONFIG_REL = "tsconfig.codegen.json";
|
|
488
|
+
|
|
489
|
+
const CODEGEN_TSCONFIG_BODY = `{
|
|
490
|
+
// The owned codegen tier typechecks itself.
|
|
491
|
+
//
|
|
492
|
+
// \`meta gen\` loads metaobjects.config.ts and ./codegen/** through jiti, which
|
|
493
|
+
// TRANSPILES WITHOUT TYPECHECKING. So a generator here can import a symbol the
|
|
494
|
+
// engine no longer exports, or call a method that does not exist, and every gate
|
|
495
|
+
// stays green until the import is evaluated — which for a generator you have not
|
|
496
|
+
// wired into \`generators: [...]\` may be never.
|
|
497
|
+
//
|
|
498
|
+
// A project's app tsconfig usually covers src/ and tests/ and NOT this tier, so
|
|
499
|
+
// without this file nothing compiles the code your build depends on. Run it with:
|
|
500
|
+
// npx tsc -p tsconfig.codegen.json --noEmit
|
|
501
|
+
"compilerOptions": {
|
|
502
|
+
"target": "ES2022",
|
|
503
|
+
"module": "nodenext",
|
|
504
|
+
"moduleResolution": "nodenext",
|
|
505
|
+
"strict": true,
|
|
506
|
+
"noEmit": true,
|
|
507
|
+
"skipLibCheck": true
|
|
508
|
+
},
|
|
509
|
+
"include": ["metaobjects.config.ts", "codegen/**/*.ts"]
|
|
510
|
+
}
|
|
511
|
+
`;
|
|
512
|
+
|
|
513
|
+
/**
|
|
514
|
+
* Scaffold a tsconfig that covers the tier `meta init` just handed the adopter.
|
|
515
|
+
*
|
|
516
|
+
* Reported from an estate that found TWO real defects the moment one existed: a
|
|
517
|
+
* generator importing `CODEGEN_ATTR_EMIT_ROUTES` (retired with the `@emit*` family,
|
|
518
|
+
* and invisible because that generator was not in `generators: [...]`), and a wired
|
|
519
|
+
* generator carrying five type errors including `ownFields()` on a node that has no
|
|
520
|
+
* such method. Both found on the first run.
|
|
521
|
+
*
|
|
522
|
+
* Written only when absent, like every other scaffolded file — an adopter who has
|
|
523
|
+
* their own arrangement keeps it, and it is reported as preserved rather than
|
|
524
|
+
* silently skipped.
|
|
525
|
+
*/
|
|
526
|
+
async function writeCodegenTsconfig(opts: InitOptions, result: InitResult): Promise<void> {
|
|
527
|
+
const abs = join(opts.cwd, CODEGEN_TSCONFIG_REL);
|
|
528
|
+
if (await fileExists(abs)) {
|
|
529
|
+
result.preserved.push(CODEGEN_TSCONFIG_REL);
|
|
530
|
+
return;
|
|
531
|
+
}
|
|
532
|
+
await writeFile(abs, CODEGEN_TSCONFIG_BODY, "utf8");
|
|
533
|
+
result.created.push(CODEGEN_TSCONFIG_REL);
|
|
477
534
|
}
|
|
478
535
|
|
|
479
536
|
/**
|
|
@@ -607,6 +664,7 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
607
664
|
);
|
|
608
665
|
result.created.push(".metaobjects/AGENTS.md", ".metaobjects/CLAUDE.md", ".claude/skills/metaobjects-*", AGENT_CONTEXT_MANIFEST_PATH);
|
|
609
666
|
for (const name of SCAFFOLDED_GENERATOR_NAMES) result.created.push(`${OWNED_GENERATORS_DIR}/${name}.ts`);
|
|
667
|
+
result.created.push(CODEGEN_TSCONFIG_REL);
|
|
610
668
|
result.created.push("metaobjects.config.ts", DB_STUB_REL_PATH, ".gitignore");
|
|
611
669
|
return result;
|
|
612
670
|
}
|
|
@@ -713,7 +771,7 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
713
771
|
result.preserved.push(".gitignore");
|
|
714
772
|
}
|
|
715
773
|
|
|
716
|
-
await
|
|
774
|
+
await prepareManifestForScaffold(opts.cwd, result);
|
|
717
775
|
|
|
718
776
|
return result;
|
|
719
777
|
}
|
|
@@ -734,8 +792,13 @@ export async function init(opts: InitOptions): Promise<InitResult> {
|
|
|
734
792
|
* So set it — but never silently take a real CommonJS project with it. A project
|
|
735
793
|
* that has actual CJS sources gets a loud, specific warning instead of an edit,
|
|
736
794
|
* because changing a module system out from under working code is not ours to do.
|
|
795
|
+
*
|
|
796
|
+
* IT ALSO DECLARES WHAT THE SCAFFOLD AND THE GENERATED OUTPUT IMPORT, and the name it used
|
|
797
|
+
* to carry (`ensureEsmPackageType`) is why that went wrong: a function named for one job
|
|
798
|
+
* accreted a second, and the second silently inherited the first's early returns. The
|
|
799
|
+
* declarations are unconditional on a readable manifest — see the comment at that point.
|
|
737
800
|
*/
|
|
738
|
-
async function
|
|
801
|
+
async function prepareManifestForScaffold(cwd: string, result: InitResult): Promise<void> {
|
|
739
802
|
const pkgPath = join(cwd, "package.json");
|
|
740
803
|
if (!(await fileExists(pkgPath))) {
|
|
741
804
|
// No package.json at all: say what is needed rather than inventing a manifest
|
|
@@ -760,39 +823,59 @@ async function ensureEsmPackageType(cwd: string, result: InitResult): Promise<vo
|
|
|
760
823
|
return;
|
|
761
824
|
}
|
|
762
825
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
826
|
+
// TWO INDEPENDENT JOBS FROM HERE, and they must not share an exit.
|
|
827
|
+
//
|
|
828
|
+
// The module system is one; declaring what the scaffold and the generated output import
|
|
829
|
+
// is the other, and it is true of every project with a readable manifest — including the
|
|
830
|
+
// one that already had `"type": "module"` and needs no module-system edit at all. Those
|
|
831
|
+
// two were folded together, below this function's early returns, and the consequence was
|
|
832
|
+
// that the adopter who had set their project up CORRECTLY got no declarations and no
|
|
833
|
+
// warning: `meta gen` worked (the CLI aliases those specifiers for itself) while `tsc`
|
|
834
|
+
// reported TS2307 on all five files `meta init` had just written. Under a strict
|
|
835
|
+
// installer that is every one of them; npm's hoisting hid roughly half.
|
|
836
|
+
//
|
|
837
|
+
// `moduleSystemNote` is computed first and applied last so the two jobs share ONE write
|
|
838
|
+
// of the manifest, rather than one job's early return deciding the other's fate.
|
|
839
|
+
let moduleSystemNote: string | undefined;
|
|
840
|
+
|
|
841
|
+
if (pkg.type !== "module") {
|
|
842
|
+
if (await hasCommonJsSources(cwd)) {
|
|
843
|
+
// `"type": "module"` is NOT set — changing a module system out from under working
|
|
844
|
+
// CJS code is not ours to do. The dependency declarations below still apply: they
|
|
845
|
+
// are about what the generated code imports, not about how it is loaded.
|
|
846
|
+
result.warnings.push(
|
|
847
|
+
'this project has CommonJS sources, so `"type": "module"` was NOT set for you — ' +
|
|
848
|
+
"but the scaffolded generators and all generated code are ESM and will not " +
|
|
849
|
+
"compile without it. Either migrate the project to ESM, or keep the generated " +
|
|
850
|
+
"code in a sub-directory with its own package.json declaring `\"type\": \"module\"`.",
|
|
851
|
+
);
|
|
852
|
+
} else {
|
|
853
|
+
const declaredType = pkg.type; // read BEFORE the mutation below overwrites it
|
|
854
|
+
pkg.type = "module";
|
|
855
|
+
// Past tense, deliberately: this reports an edit already made. The imperative
|
|
856
|
+
// ("set `\"type\": \"module\"`") read as a TODO on the one line a newcomer sees
|
|
857
|
+
// last, so a scaffold that had just done the right thing looked like it had failed.
|
|
858
|
+
//
|
|
859
|
+
// And it must not claim the manifest was SILENT on the point: `npm init -y` writes
|
|
860
|
+
// `"type": "commonjs"` explicitly (npm 11.x), which is the dominant first-touch path,
|
|
861
|
+
// so "declared no module system" was false exactly where it is read most. Report what
|
|
862
|
+
// was actually there.
|
|
863
|
+
const previous = typeof declaredType === "string" ? declaredType : undefined;
|
|
864
|
+
moduleSystemNote =
|
|
865
|
+
`package.json ${previous === undefined ? "declared no module system" : `declared "type": "${previous}"`} — ` +
|
|
866
|
+
'set `"type": "module"` for you, because MetaObjects scaffolds and generates ESM, ' +
|
|
867
|
+
"which a CommonJS project cannot compile.";
|
|
868
|
+
}
|
|
773
869
|
}
|
|
774
870
|
|
|
775
|
-
const declaredType = pkg.type; // read BEFORE the mutation below overwrites it
|
|
776
|
-
pkg.type = "module";
|
|
777
871
|
const added = addScaffoldDevDependencies(pkg);
|
|
778
872
|
const addedRuntime = addScaffoldRuntimeDependencies(pkg);
|
|
779
|
-
|
|
780
|
-
|
|
781
|
-
|
|
782
|
-
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
//
|
|
786
|
-
// And it must not claim the manifest was SILENT on the point: `npm init -y` writes
|
|
787
|
-
// `"type": "commonjs"` explicitly (npm 11.x), which is the dominant first-touch path,
|
|
788
|
-
// so "declared no module system" was false exactly where it is read most. Report what
|
|
789
|
-
// was actually there.
|
|
790
|
-
const previous = typeof declaredType === "string" ? declaredType : undefined;
|
|
791
|
-
result.warnings.push(
|
|
792
|
-
`package.json ${previous === undefined ? "declared no module system" : `declared "type": "${previous}"`} — ` +
|
|
793
|
-
'set `"type": "module"` for you, because MetaObjects scaffolds and generates ESM, ' +
|
|
794
|
-
"which a CommonJS project cannot compile.",
|
|
795
|
-
);
|
|
873
|
+
if (moduleSystemNote !== undefined || added.length > 0 || addedRuntime.length > 0) {
|
|
874
|
+
// Preserve the file's existing indentation rather than reformatting someone's manifest.
|
|
875
|
+
const indent = /\n(\s+)"/.exec(raw)?.[1] ?? " ";
|
|
876
|
+
await writeFile(pkgPath, `${JSON.stringify(pkg, null, indent)}\n`, "utf8");
|
|
877
|
+
}
|
|
878
|
+
if (moduleSystemNote !== undefined) result.warnings.push(moduleSystemNote);
|
|
796
879
|
if (added.length > 0) {
|
|
797
880
|
result.warnings.push(
|
|
798
881
|
`added ${added.join(" + ")} to devDependencies — the scaffolded ` +
|
|
@@ -807,6 +890,22 @@ async function ensureEsmPackageType(cwd: string, result: InitResult): Promise<vo
|
|
|
807
890
|
"installed. Run your package manager's install before `meta gen`.",
|
|
808
891
|
);
|
|
809
892
|
}
|
|
893
|
+
// Never degrade in silence. The first version of this returned `{}` on any failure to
|
|
894
|
+
// read runtime-ts's peer ranges and skipped the three packages that come from them —
|
|
895
|
+
// which is exactly what happened against the published package, and the run looked
|
|
896
|
+
// successful while leaving the project with the six TS2307s this code exists to
|
|
897
|
+
// prevent. A fallback that cannot be observed is indistinguishable from a bug.
|
|
898
|
+
const undeclarable = SCAFFOLD_OUTPUT_PEERS.filter(
|
|
899
|
+
(name) => !declaredDependencyNames(pkg as PackageManifest).has(name),
|
|
900
|
+
);
|
|
901
|
+
if (undeclarable.length > 0) {
|
|
902
|
+
result.warnings.push(
|
|
903
|
+
`could NOT declare ${undeclarable.join(" + ")} — the version ranges are read from ` +
|
|
904
|
+
"@metaobjectsdev/runtime-ts's own peerDependencies and that manifest could not be " +
|
|
905
|
+
"read. Generated code imports them, so add them to dependencies by hand or " +
|
|
906
|
+
"`npx tsc` will report TS2307 on files `meta gen` writes.",
|
|
907
|
+
);
|
|
908
|
+
}
|
|
810
909
|
}
|
|
811
910
|
|
|
812
911
|
/**
|
|
@@ -904,13 +1003,39 @@ function scaffoldRuntimeDependencies(): Record<string, string> {
|
|
|
904
1003
|
return wanted;
|
|
905
1004
|
}
|
|
906
1005
|
|
|
907
|
-
/**
|
|
1006
|
+
/**
|
|
1007
|
+
* `@metaobjectsdev/runtime-ts`'s declared peer ranges, or `{}` if they cannot be read.
|
|
1008
|
+
*
|
|
1009
|
+
* Resolves the package's ENTRY and walks up to the nearest package.json, rather than
|
|
1010
|
+
* asking for `"@metaobjectsdev/runtime-ts/package.json"` directly. That direct form is
|
|
1011
|
+
* the obvious one and it is WRONG: a package's `exports` map gates every subpath, and
|
|
1012
|
+
* runtime-ts's exports are `.` / `./drivers` / `./fastify` / `./drizzle-fastify` /
|
|
1013
|
+
* `./hono` — no `./package.json`. Under real Node it throws
|
|
1014
|
+
* ERR_PACKAGE_PATH_NOT_EXPORTED. It appeared to work here only because the workspace
|
|
1015
|
+
* runs this under bun against a symlinked source tree; against the published package it
|
|
1016
|
+
* failed on the first try, silently, and `meta init` declared one package instead of
|
|
1017
|
+
* four. Resolving the entry is never gated — `.` is the one subpath every package
|
|
1018
|
+
* exports — so this form works under npm, pnpm, bun and a linked checkout alike.
|
|
1019
|
+
*/
|
|
908
1020
|
function runtimeTsPeerRanges(): Record<string, string> {
|
|
909
1021
|
try {
|
|
910
1022
|
const req = createRequire(import.meta.url);
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
1023
|
+
let dir = dirname(req.resolve("@metaobjectsdev/runtime-ts"));
|
|
1024
|
+
// The entry sits under dist/; the manifest is at the package root above it.
|
|
1025
|
+
for (let hops = 0; hops < 8; hops++) {
|
|
1026
|
+
const candidate = join(dir, "package.json");
|
|
1027
|
+
if (existsSyncWrap(candidate)) {
|
|
1028
|
+
const manifest = JSON.parse(readFileSyncWrap(candidate, "utf8")) as PackageManifest & { name?: string };
|
|
1029
|
+
// Guard against stopping at a nested manifest that is not the package itself.
|
|
1030
|
+
if (manifest.name === "@metaobjectsdev/runtime-ts") {
|
|
1031
|
+
return (manifest.peerDependencies ?? {}) as Record<string, string>;
|
|
1032
|
+
}
|
|
1033
|
+
}
|
|
1034
|
+
const up = dirname(dir);
|
|
1035
|
+
if (up === dir) break;
|
|
1036
|
+
dir = up;
|
|
1037
|
+
}
|
|
1038
|
+
return {};
|
|
914
1039
|
} catch {
|
|
915
1040
|
return {};
|
|
916
1041
|
}
|
package/src/commands/migrate.ts
CHANGED
|
@@ -59,7 +59,7 @@ import {
|
|
|
59
59
|
import { buildProjectionViews } from "@metaobjectsdev/codegen-ts";
|
|
60
60
|
import { tokensToAllowOptions, describeChange } from "../lib/allow.js";
|
|
61
61
|
|
|
62
|
-
const MIGRATE_HELP_TEXT = `meta migrate — diff metadata vs live DB; emit migration SQL files
|
|
62
|
+
export const MIGRATE_HELP_TEXT = `meta migrate — diff metadata vs live DB; emit migration SQL files
|
|
63
63
|
|
|
64
64
|
USAGE:
|
|
65
65
|
meta migrate [baseline|apply-pending] [flags]
|
package/src/commands/verify.ts
CHANGED
|
@@ -404,12 +404,23 @@ export async function verifyCommand(
|
|
|
404
404
|
return 2;
|
|
405
405
|
}
|
|
406
406
|
|
|
407
|
-
// --dialect wins; else migrate's resolved dialect; else
|
|
408
|
-
//
|
|
409
|
-
|
|
407
|
+
// --dialect wins; else migrate's resolved dialect; else the project's DECLARED
|
|
408
|
+
// dialect from metaobjects.config.ts; else refuse. There is no --db to infer
|
|
409
|
+
// from, so guessing would replay a postgres chain through sqlite.
|
|
410
|
+
//
|
|
411
|
+
// The last fallback was missing, and its absence made one fact need two
|
|
412
|
+
// spellings: a TypeScript project declares `dialect: "postgres"` in
|
|
413
|
+
// metaobjects.config.ts, `meta gen`, `meta verify --codegen` and `meta migrate`
|
|
414
|
+
// all honour it, and `--replay` alone refused and demanded `migrate.dialect` in
|
|
415
|
+
// .metaobjects/config.json — the spelling a TypeScript project is least likely
|
|
416
|
+
// to have. migrate's own resolution still WINS where it has an answer, because
|
|
417
|
+
// it is the more specific statement about the chain being replayed.
|
|
418
|
+
const dialect: Dialect | undefined =
|
|
419
|
+
flags.dialect ?? migrateConfig.dialect ?? forgeConfig?.dialect;
|
|
410
420
|
if (dialect === undefined) {
|
|
411
421
|
log.error(
|
|
412
|
-
`meta verify --replay: no dialect — pass --dialect <postgres|sqlite>,
|
|
422
|
+
`meta verify --replay: no dialect — pass --dialect <postgres|sqlite>, ` +
|
|
423
|
+
`set 'dialect' in metaobjects.config.ts, or set migrate.dialect in .metaobjects/config.json`,
|
|
413
424
|
);
|
|
414
425
|
return 2;
|
|
415
426
|
}
|
|
@@ -1226,9 +1237,12 @@ export async function verifyCommand(
|
|
|
1226
1237
|
|
|
1227
1238
|
// -- docs drift -------------------------------------------------------------
|
|
1228
1239
|
// Gated on --docs. Runs `meta docs` into a temp dir and diffs the committed docs
|
|
1229
|
-
// tree. See lib/docs-drift.ts for the
|
|
1230
|
-
//
|
|
1231
|
-
//
|
|
1240
|
+
// tree. See lib/docs-drift.ts for the deliberate differences from --codegen: a byte
|
|
1241
|
+
// difference IS drift here; a committed file a regen would not emit is reported ONLY
|
|
1242
|
+
// under `agent/` and only when it opens with the @generated marker (`docs.outDir` is
|
|
1243
|
+
// otherwise full of files MetaObjects did not write); and a page the project
|
|
1244
|
+
// GIT-IGNORES is exempt, because `docs.outDir` is a directory rather than a namespace
|
|
1245
|
+
// MetaObjects owns.
|
|
1232
1246
|
//
|
|
1233
1247
|
// It needs a config for the same reason `--codegen` does: `docs.outDir` says which
|
|
1234
1248
|
// tree to compare against, and the `agent` surface will not even materialise
|
|
@@ -1264,21 +1278,44 @@ export async function verifyCommand(
|
|
|
1264
1278
|
return 2;
|
|
1265
1279
|
}
|
|
1266
1280
|
|
|
1281
|
+
// What the gate did NOT check, on BOTH the passing and the failing line. A gate
|
|
1282
|
+
// that quietly compared two of 589 pages and reported "no drift" would be
|
|
1283
|
+
// indistinguishable from one that compared everything.
|
|
1284
|
+
const notChecked =
|
|
1285
|
+
result.ignoreReason !== undefined
|
|
1286
|
+
? `; .gitignore not consulted — ${result.ignoreReason} — so every page a fresh run emits was expected to be committed`
|
|
1287
|
+
: result.ignored > 0
|
|
1288
|
+
? `; ${result.ignored} git-ignored page(s) not checked`
|
|
1289
|
+
: "";
|
|
1290
|
+
|
|
1267
1291
|
if (result.clean) {
|
|
1268
1292
|
// The denominator is what was actually COMPARED, so the passing line and the
|
|
1269
1293
|
// failing line below count the same set. A gate whose two halves divide by
|
|
1270
1294
|
// different numbers is how `verify --templates` came to report seven templates
|
|
1271
1295
|
// vanishing between a red run and a green one.
|
|
1272
|
-
say(
|
|
1296
|
+
say(
|
|
1297
|
+
`meta verify — ${result.checked} docs page(s) match a fresh 'meta docs' ` +
|
|
1298
|
+
`(no docs drift${notChecked}).`,
|
|
1299
|
+
);
|
|
1273
1300
|
return 0;
|
|
1274
1301
|
}
|
|
1275
1302
|
|
|
1276
1303
|
log.error(
|
|
1277
1304
|
`meta verify — docs drift (${result.driftedFiles.length} of ${result.checked} page(s) ` +
|
|
1278
|
-
`differ from a fresh 'meta docs'):`,
|
|
1305
|
+
`differ from a fresh 'meta docs'${notChecked}):`,
|
|
1279
1306
|
);
|
|
1280
1307
|
for (const line of result.lines) log.error(` ${line}`);
|
|
1281
1308
|
log.error("Run 'meta docs' to regenerate, then commit the result.");
|
|
1309
|
+
// The one-command path to green, named at the point of conviction — a page reported
|
|
1310
|
+
// as uncommitted is the one case where regenerating is NOT the answer.
|
|
1311
|
+
if (result.lines.some((l) => l.startsWith("+ "))) {
|
|
1312
|
+
log.error(
|
|
1313
|
+
result.ignoreReason === undefined
|
|
1314
|
+
? "A page you deliberately do not commit is exempt once it is git-ignored."
|
|
1315
|
+
: `.gitignore was not consulted (${result.ignoreReason}), so a page you ` +
|
|
1316
|
+
`deliberately do not commit is reported above.`,
|
|
1317
|
+
);
|
|
1318
|
+
}
|
|
1282
1319
|
return 1;
|
|
1283
1320
|
}
|
|
1284
1321
|
}
|
package/src/index.ts
CHANGED
|
@@ -55,6 +55,12 @@ GLOBAL OPTIONS:
|
|
|
55
55
|
|
|
56
56
|
GEN FLAGS:
|
|
57
57
|
--dry-run Compute and print, don't write
|
|
58
|
+
--list Print the generator registry (name, tier, options) and exit —
|
|
59
|
+
no config or metadata required
|
|
60
|
+
--baseline <default|fresh>
|
|
61
|
+
First-time-on-existing-file behavior. Default: write-if-different,
|
|
62
|
+
adopting existing content as the canonical baseline. "fresh"
|
|
63
|
+
overwrites and re-baselines.
|
|
58
64
|
--no-antipatterns Suppress the advisory "hand-rolled what MetaObjects can model" pass
|
|
59
65
|
--limit <n|all> How many advisory lines TEXT output prints before it truncates
|
|
60
66
|
(default 20). Never applies to --format toon/json, which
|
|
@@ -127,7 +133,7 @@ ship in later sub-projects. See https://metaobjects.com for docs.
|
|
|
127
133
|
`;
|
|
128
134
|
|
|
129
135
|
/** Focused per-subcommand usage slices shown by `<cmd> --help`. */
|
|
130
|
-
const COMMAND_HELP: Record<string, string> = {
|
|
136
|
+
export const COMMAND_HELP: Record<string, string> = {
|
|
131
137
|
gen: `meta gen — codegen TS targets from your declared metadata
|
|
132
138
|
|
|
133
139
|
USAGE:
|
|
@@ -135,6 +141,12 @@ USAGE:
|
|
|
135
141
|
|
|
136
142
|
FLAGS:
|
|
137
143
|
--dry-run Compute and print, don't write
|
|
144
|
+
--list Print the generator registry (name, tier, options) and exit —
|
|
145
|
+
no config or metadata required
|
|
146
|
+
--baseline <default|fresh>
|
|
147
|
+
First-time-on-existing-file behavior. Default: write-if-different,
|
|
148
|
+
adopting existing content as the canonical baseline. "fresh"
|
|
149
|
+
overwrites and re-baselines.
|
|
138
150
|
--no-antipatterns Suppress the advisory "hand-rolled what MetaObjects can model" pass
|
|
139
151
|
--limit <n|all> Advisory lines TEXT output prints before truncating (default 20)
|
|
140
152
|
--format <toon|json|text> Output format (global flag; default toon off-TTY)
|
|
@@ -182,7 +194,11 @@ FLAGS:
|
|
|
182
194
|
--codegen Codegen drift — regenerate to temp dir and diff committed output
|
|
183
195
|
Needs metaobjects.config.ts; exit 2 if absent.
|
|
184
196
|
--docs Docs drift — run 'meta docs' to a temp dir and diff docs.outDir
|
|
185
|
-
Needs metaobjects.config.ts; exit 2 if absent.
|
|
197
|
+
Needs metaobjects.config.ts; exit 2 if absent. A page the
|
|
198
|
+
project GIT-IGNORES is exempt (docs.outDir is a directory, not
|
|
199
|
+
a namespace MetaObjects owns); the count of exempt pages is
|
|
200
|
+
reported either way, and a run where every page is ignored is
|
|
201
|
+
refused rather than reported clean.
|
|
186
202
|
--db <url> Schema drift — live DB URL enables the schema-drift gate.
|
|
187
203
|
Supports: file:, libsql:, postgres:, postgresql:
|
|
188
204
|
D1 has no URL — use --dialect d1 / --d1 <binding> instead.
|
|
@@ -204,6 +220,10 @@ FLAGS:
|
|
|
204
220
|
--d1 <binding> D1 binding name from wrangler.toml (only with --dialect d1)
|
|
205
221
|
--remote Target remote D1 instead of local (only with --dialect d1) —
|
|
206
222
|
the ONLY way to verify the actual deployed D1 database
|
|
223
|
+
--lax Load with the legacy OPEN attribute set instead of strict
|
|
224
|
+
(ADR-0023). Strict is the default: an undeclared or typo'd own
|
|
225
|
+
@attr fails verify with ERR_UNKNOWN_ATTR. Use only while
|
|
226
|
+
migrating a model onto a registered provider.
|
|
207
227
|
--no-antipatterns Suppress the advisory "hand-rolled what MetaObjects can model" pass
|
|
208
228
|
--no-requirement-lint Suppress the advisory requirement AUTHORING lint (not the gate)
|
|
209
229
|
--limit <n|all> Advisory lines TEXT output prints PER SECTION before truncating
|
|
@@ -274,6 +294,14 @@ USAGE:
|
|
|
274
294
|
|
|
275
295
|
FLAGS:
|
|
276
296
|
--refresh-docs Refresh .metaobjects/AGENTS.md + CLAUDE.md after CLI upgrades
|
|
297
|
+
--docs-only Write only the agent-context files — no metadata sources, no
|
|
298
|
+
codegen scaffold, no config. Pair with --refresh-docs to update
|
|
299
|
+
an existing project after upgrading.
|
|
300
|
+
--server <lang> Declare a server language for the agent context (repeatable;
|
|
301
|
+
e.g. csharp, kotlin, python, node)
|
|
302
|
+
--client <fw> Declare a client framework for the agent context (repeatable;
|
|
303
|
+
e.g. react, vue)
|
|
304
|
+
--no-skills Skip the .claude/skills/ scaffold
|
|
277
305
|
--force Overwrite existing files
|
|
278
306
|
--quiet Suppress output
|
|
279
307
|
--print-only Print what would be written, don't write
|