@nestia/core 12.1.0 → 13.0.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.
@@ -1 +1 @@
1
- {"version":3,"file":"McpRoute.js","sourceRoot":"","sources":["../../src/decorators/McpRoute.ts"],"names":[],"mappings":";;;AAEA,4EAAyE;AAsDzE,kBAAyB,KAAgC;IACvD,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,OAAO,SAAS,QAAQ,CACtB,OAAe,EACf,YAA6B,EAC7B,UAAwC;;QAExC,OAAO,CAAC,cAAc,CACpB,iBAAiB,EACjB;YACE,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,QAAE,MAAM,CAAC,WAAW,mCAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YACrE,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,WAAW,EAAE,MAAM,CAAC,WAAW;SACL,EAC5B,UAAU,CAAC,KAAK,CACjB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,WAAiB,QAAQ;IAmBvB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,MAAM,CACpB,SAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAA,6CAAqB,EAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC;QACrE,OAAO,SAAS,cAAc,CAC5B,MAAc,EACd,WAAwC,EACxC,cAAsB;YAEtB,OAAO,CAAC,MAAM,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,EAAE;gBACjC,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,cAAc;gBACrB,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAfe,SAAA,MAAM,SAerB,CAAA;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAG,CACd,MAAc,EACd,WAA4B,EAC5B,KAAiC,EACjC,EAAE;QACF,MAAM,KAAK,GACT,OAAO,CAAC,cAAc,CACpB,4BAA4B,EAC5B,MAAM,EACN,WAAW,CACZ,CAAC;QACJ,IAAI,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAEzC,OAAO,CAAC,cAAc,CACpB,4BAA4B,EAC5B,CAAC,KAAK,CAAC,EACP,MAAM,EACN,WAAW,CACZ,CAAC;IACN,CAAC,CAAC;AACJ,CAAC,EA1EgB,QAAQ,aAxBT,QAAQ,GAwBP,QAAQ,QA0ExB"}
1
+ {"version":3,"file":"McpRoute.js","sourceRoot":"","sources":["../../src/decorators/McpRoute.ts"],"names":[],"mappings":";;;AAEA,4EAAyE;AAsDzE,kBAAyB,KAAgC;IACvD,MAAM,MAAM,GACV,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,OAAO,SAAS,QAAQ,CACtB,OAAe,EACf,YAA6B,EAC7B,UAAwC;;QAExC,OAAO,CAAC,cAAc,CACpB,iBAAiB,EACjB;YACE,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,KAAK,EAAE,MAAM,CAAC,KAAK;YACnB,WAAW,EAAE,MAAM,CAAC,WAAW;YAC/B,WAAW,QAAE,MAAM,CAAC,WAAW,mCAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;YACrE,YAAY,EAAE,MAAM,CAAC,YAAY;YACjC,WAAW,EAAE,MAAM,CAAC,WAAW;SACL,EAC5B,UAAU,CAAC,KAAK,CACjB,CAAC;QACF,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAED,WAAiB,QAAQ;IAmBvB;;;;;;;;;;;;;;;;OAgBG;IACH,SAAgB,MAAM,CACpB,SAAoC;QAEpC,MAAM,QAAQ,GAAG,IAAA,6CAAqB,EAAC,iBAAiB,CAAC,CAAC,SAAS,CAAC,CAAC;QACrE,OAAO,SAAS,cAAc,CAC5B,MAAc,EACd,WAAwC,EACxC,cAAsB;YAEtB,OAAO,CAAC,MAAM,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,EAAE;gBACjC,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,cAAc;gBACrB,QAAQ;aACT,CAAC,CAAC;QACL,CAAC,CAAC;IACJ,CAAC;IAfe,SAAA,MAAM,SAerB,CAAA;IAED,gBAAgB;IAChB,MAAM,OAAO,GAAG,CACd,MAAc,EACd,WAA4B,EAC5B,KAAiC,EACjC,EAAE;QACF,MAAM,KAAK,GACT,OAAO,CAAC,cAAc,CAAC,4BAA4B,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC;QAC5E,IAAI,KAAK,KAAK,SAAS;YAAE,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;;YAEzC,OAAO,CAAC,cAAc,CACpB,4BAA4B,EAC5B,CAAC,KAAK,CAAC,EACP,MAAM,EACN,WAAW,CACZ,CAAC;IACN,CAAC,CAAC;AACJ,CAAC,EAtEgB,QAAQ,aAxBT,QAAQ,GAwBP,QAAQ,QAsExB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwaggerCustomizer.js","sourceRoot":"","sources":["../../src/decorators/SwaggerCustomizer.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;GAaG;AACH,2BACE,OAAqD;IAErD,OAAO,SAAS,iBAAiB,CAC/B,MAAc,EACd,WAA4B,EAC5B,UAAwC;QAExC,MAAM,KAAK,GAAwD,CAAC,GAAG,EAAE;YACvE,IACE,OAAO,CAAC,cAAc,CACpB,0BAA0B,EAC1B,MAAM,EACN,WAAW,CACZ;gBAED,OAAO,OAAO,CAAC,cAAc,CAC3B,0BAA0B,EAC1B,MAAM,EACN,WAAW,CACZ,CAAC;YACJ,MAAM,KAAK,GAAwD,EAAE,CAAC;YACtE,OAAO,CAAC,cAAc,CACpB,0BAA0B,EAC1B,KAAK,EACL,MAAM,EACN,WAAW,CACZ,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;QACL,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"SwaggerCustomizer.js","sourceRoot":"","sources":["../../src/decorators/SwaggerCustomizer.ts"],"names":[],"mappings":";;;AAEA;;;;;;;;;;;;;GAaG;AACH,2BACE,OAAqD;IAErD,OAAO,SAAS,iBAAiB,CAC/B,MAAc,EACd,WAA4B,EAC5B,UAAwC;QAExC,MAAM,KAAK,GAAwD,CAAC,GAAG,EAAE;YACvE,IACE,OAAO,CAAC,cAAc,CAAC,0BAA0B,EAAE,MAAM,EAAE,WAAW,CAAC;gBAEvE,OAAO,OAAO,CAAC,cAAc,CAC3B,0BAA0B,EAC1B,MAAM,EACN,WAAW,CACZ,CAAC;YACJ,MAAM,KAAK,GAAwD,EAAE,CAAC;YACtE,OAAO,CAAC,cAAc,CACpB,0BAA0B,EAC1B,KAAK,EACL,MAAM,EACN,WAAW,CACZ,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,EAAE,CAAC;QACL,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"SwaggerExample.js","sourceRoot":"","sources":["../../src/decorators/SwaggerExample.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SwaggerExample.js","sourceRoot":"","sources":["../../src/decorators/SwaggerExample.ts"],"names":[],"mappings":"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"}
package/native/go.mod CHANGED
@@ -10,7 +10,7 @@ require (
10
10
  github.com/microsoft/typescript-go/shim/printer v0.0.0
11
11
  github.com/microsoft/typescript-go/shim/scanner v0.0.0
12
12
  github.com/samchon/ttsc/packages/ttsc v0.0.0
13
- github.com/samchon/typia/packages/typia/native v0.0.0-20260709134626-fd1c6686950f
13
+ github.com/samchon/typia/packages/typia/native v0.0.0-20260818045905-f692fd63a846
14
14
  )
15
15
 
16
16
  require (
package/native/go.sum CHANGED
@@ -8,38 +8,38 @@ github.com/microsoft/typescript-go v0.0.0-20260429010842-56ab4af42157 h1:llOMPhK
8
8
  github.com/microsoft/typescript-go v0.0.0-20260429010842-56ab4af42157/go.mod h1:m8YA0PMC7ti0GW0RI05D6fEcjQeu98XVS+FWF+VDW2k=
9
9
  github.com/peter-evans/patience v0.3.0 h1:rX0JdJeepqdQl1Sk9c9uvorjYYzL2TfgLX1adqYm9cA=
10
10
  github.com/peter-evans/patience v0.3.0/go.mod h1:Kmxu5sY1NmBLFSStvXjX1wS9mIv7wMcP/ubucyMOAu0=
11
- github.com/samchon/ttsc/packages/ttsc v0.0.0-20260709053824-84bdc4acccb0 h1:j6jDYzWEow5+0KacfIzsi8xV9t0MTcShfNHYiPJk2LA=
12
- github.com/samchon/ttsc/packages/ttsc v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:w1lJWUKJ3tMV+vAG2S8aj4c5E5m+OzA66tLh8a0dlUY=
13
- github.com/samchon/ttsc/packages/ttsc/shim/ast v0.0.0-20260709053824-84bdc4acccb0 h1:v015/xr8MaQMLoYqPQXu5lUrEQmnG1D3V5zzlDUus6U=
14
- github.com/samchon/ttsc/packages/ttsc/shim/ast v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:BCVAEArtMC+X1laJmDwxlsRROIQIYvHeT7Dl0gNjT0A=
15
- github.com/samchon/ttsc/packages/ttsc/shim/bundled v0.0.0-20260709053824-84bdc4acccb0 h1:EEeHe7pRKahBDyoUkBwQ8zFpzSswNj0JEhhrKwFpQTg=
16
- github.com/samchon/ttsc/packages/ttsc/shim/bundled v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:0tz+Y8szXmEpXWHWVrLrv11ga1z6tQJQErkUyIWJ9RQ=
17
- github.com/samchon/ttsc/packages/ttsc/shim/checker v0.0.0-20260709053824-84bdc4acccb0 h1:sMwvPvb2gbVJ9JODyPYAmUPObU5YX5XkBihrex9pw7s=
18
- github.com/samchon/ttsc/packages/ttsc/shim/checker v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:4xfafgG/qosSp8f0tCf83assFoUKRdGHhvPD1EI9LKg=
19
- github.com/samchon/ttsc/packages/ttsc/shim/compiler v0.0.0-20260709053824-84bdc4acccb0 h1:jmrwyhAcdD56mQSAm96sUZxs2F+5902VnHhNzYTAdhw=
20
- github.com/samchon/ttsc/packages/ttsc/shim/compiler v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:s12vcy3pf6RYDxXcyiK7448DiK+Ol9qx3cjiInd1uxw=
21
- github.com/samchon/ttsc/packages/ttsc/shim/core v0.0.0-20260709053824-84bdc4acccb0 h1:Y8wMEDosAZu6lELpWWbJf2IyCZNQZBLQQX+K//8nwc8=
22
- github.com/samchon/ttsc/packages/ttsc/shim/core v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:DUewcVNEdXyDveQholE4GAsiqqA3C2+SJYqia3nCf00=
23
- github.com/samchon/ttsc/packages/ttsc/shim/diagnosticwriter v0.0.0-20260709053824-84bdc4acccb0 h1:rpRxTBX5DOVeuzMDojBU0PRfdUZXQ7T/rp+Md0yP2VY=
24
- github.com/samchon/ttsc/packages/ttsc/shim/diagnosticwriter v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:v86GtrD7qALo6Xkgz1MDomPMSV2D9NdniQWB5t8eY6k=
25
- github.com/samchon/ttsc/packages/ttsc/shim/parser v0.0.0-20260709053824-84bdc4acccb0 h1:sWGdmZHFtlgdAI3m4LNKZSTCf7jK1+GMs5sJDGSep+M=
26
- github.com/samchon/ttsc/packages/ttsc/shim/parser v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:inUjC/bNlCkO0zIzHZRXlHR/WgLcK0vi2KLc7tpQ1ek=
27
- github.com/samchon/ttsc/packages/ttsc/shim/printer v0.0.0-20260709053824-84bdc4acccb0 h1:7cxbkCAQ85dKpeuB0uwkAcQr8akOSDcVRNp6RJCiFYg=
28
- github.com/samchon/ttsc/packages/ttsc/shim/printer v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:Hz8BbCqKCrykLfIX+PburWsGEKR8+bkrBJDe2TMLLS0=
29
- github.com/samchon/ttsc/packages/ttsc/shim/scanner v0.0.0-20260709053824-84bdc4acccb0 h1:Ua1uEGKXX/SPrbNPFoS5FAoFrBlM56ecX2s+eeHmbQQ=
30
- github.com/samchon/ttsc/packages/ttsc/shim/scanner v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:abIC7C28cUA5IQKmLJulsl2qOvmimhkMNOfjJhRm5jM=
31
- github.com/samchon/ttsc/packages/ttsc/shim/tsoptions v0.0.0-20260709053824-84bdc4acccb0 h1:ySIVZhDxe0u5sb3GtFFQ8leXar69QZjCYgPKGBEkIQA=
32
- github.com/samchon/ttsc/packages/ttsc/shim/tsoptions v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:EQwrCr3nY0U1SZBNyp6cQSogAiXsjFxTuT8NlMit1lc=
33
- github.com/samchon/ttsc/packages/ttsc/shim/tspath v0.0.0-20260709053824-84bdc4acccb0 h1:bY1Rdiqs6rc7S7/YbY3gWJoXvTeb7LhXMNYrl6fvp1E=
34
- github.com/samchon/ttsc/packages/ttsc/shim/tspath v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:hsE2c1bZquSNlDLIkT3SfLH3MrDmMk1BLzWI/KomT1A=
35
- github.com/samchon/ttsc/packages/ttsc/shim/vfs v0.0.0-20260709053824-84bdc4acccb0 h1:FU0AuiZLsw9kMU4Fy56XvhJ3bD99n5WTkjJh93gB0m0=
36
- github.com/samchon/ttsc/packages/ttsc/shim/vfs v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:HoQcoC0FEG3iMI6zvjg8r6j/ves+RVH6SRn48VSi5H0=
37
- github.com/samchon/ttsc/packages/ttsc/shim/vfs/cachedvfs v0.0.0-20260709053824-84bdc4acccb0 h1:rOw6pmYXNlaC0KKG9D38HTJEsfNiDI1+u2mBA8QRbZ8=
38
- github.com/samchon/ttsc/packages/ttsc/shim/vfs/cachedvfs v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:XS3LhXkn5xadyRe3tW+9+suW/7gh7dPdL43Q+s/lUDo=
39
- github.com/samchon/ttsc/packages/ttsc/shim/vfs/osvfs v0.0.0-20260709053824-84bdc4acccb0 h1:LXPQxe57qlWiHG5s8pQOKZD4nZRnRkrKIDsdJVfh2ws=
40
- github.com/samchon/ttsc/packages/ttsc/shim/vfs/osvfs v0.0.0-20260709053824-84bdc4acccb0/go.mod h1:otX+qw8aZLNCoBmCwMAn53Nw0RQTPzSoId3DxmE67So=
41
- github.com/samchon/typia/packages/typia/native v0.0.0-20260709134626-fd1c6686950f h1:8axuxtT7YdYhJy7so6SDxVK2oJPDkq8vl55K+nTudtw=
42
- github.com/samchon/typia/packages/typia/native v0.0.0-20260709134626-fd1c6686950f/go.mod h1:SJDrfiCEK5dtObhJeAl0iqelqmmFm/JIjfJ6z0kID60=
11
+ github.com/samchon/ttsc/packages/ttsc v0.0.0-20260820075544-3fe6b732f888 h1:N4jvJNOiHPpelrsNowlY1ubn5tDIJ7VV9/uEYogFMqU=
12
+ github.com/samchon/ttsc/packages/ttsc v0.0.0-20260820075544-3fe6b732f888/go.mod h1:mHD0o2ZFVv6wSNzKZi+ux6u0Wz34Kq33YrPj2tdSyU8=
13
+ github.com/samchon/ttsc/packages/ttsc/shim/ast v0.0.0-20260820075544-3fe6b732f888 h1:9Gi+v6ZIJfs+vGuuVoZrPM0ZusY9aY9u3XwwlRBREc0=
14
+ github.com/samchon/ttsc/packages/ttsc/shim/ast v0.0.0-20260820075544-3fe6b732f888/go.mod h1:BCVAEArtMC+X1laJmDwxlsRROIQIYvHeT7Dl0gNjT0A=
15
+ github.com/samchon/ttsc/packages/ttsc/shim/bundled v0.0.0-20260820075544-3fe6b732f888 h1:wH6goeOwavAxUjlyOo7LqOkOr6PnoJSw4JBTPrZSFFM=
16
+ github.com/samchon/ttsc/packages/ttsc/shim/bundled v0.0.0-20260820075544-3fe6b732f888/go.mod h1:0tz+Y8szXmEpXWHWVrLrv11ga1z6tQJQErkUyIWJ9RQ=
17
+ github.com/samchon/ttsc/packages/ttsc/shim/checker v0.0.0-20260820075544-3fe6b732f888 h1:MzAA30HyHf8eLzEN3+vTohyAETv+lyx8p67ag6hSXyc=
18
+ github.com/samchon/ttsc/packages/ttsc/shim/checker v0.0.0-20260820075544-3fe6b732f888/go.mod h1:lX+u4ZMEyydpdGXSRaOAi5gkP6VIl7WE+Ue7eokwMjM=
19
+ github.com/samchon/ttsc/packages/ttsc/shim/compiler v0.0.0-20260820075544-3fe6b732f888 h1:RkUrnwWL67tR6CtKGz5Uv1unwlmYOmZOmh5mcnHpiyg=
20
+ github.com/samchon/ttsc/packages/ttsc/shim/compiler v0.0.0-20260820075544-3fe6b732f888/go.mod h1:s12vcy3pf6RYDxXcyiK7448DiK+Ol9qx3cjiInd1uxw=
21
+ github.com/samchon/ttsc/packages/ttsc/shim/core v0.0.0-20260820075544-3fe6b732f888 h1:oTcsePbFgh4VIRQlJSWs83uG6VwOXkvs1vt9PJHg/SY=
22
+ github.com/samchon/ttsc/packages/ttsc/shim/core v0.0.0-20260820075544-3fe6b732f888/go.mod h1:DUewcVNEdXyDveQholE4GAsiqqA3C2+SJYqia3nCf00=
23
+ github.com/samchon/ttsc/packages/ttsc/shim/diagnosticwriter v0.0.0-20260820075544-3fe6b732f888 h1:lfw9JjPoUilJPkP/2sWmHPPk7hupGjvVUS51jO9JVYM=
24
+ github.com/samchon/ttsc/packages/ttsc/shim/diagnosticwriter v0.0.0-20260820075544-3fe6b732f888/go.mod h1:v86GtrD7qALo6Xkgz1MDomPMSV2D9NdniQWB5t8eY6k=
25
+ github.com/samchon/ttsc/packages/ttsc/shim/parser v0.0.0-20260820075544-3fe6b732f888 h1:VfBPOZsU736NVxZncttHSSnTHg3wmGJciamo2WK/mXQ=
26
+ github.com/samchon/ttsc/packages/ttsc/shim/parser v0.0.0-20260820075544-3fe6b732f888/go.mod h1:inUjC/bNlCkO0zIzHZRXlHR/WgLcK0vi2KLc7tpQ1ek=
27
+ github.com/samchon/ttsc/packages/ttsc/shim/printer v0.0.0-20260820075544-3fe6b732f888 h1:rWSO7jtTdfmthgJvkQ3875LfrGL6kQM+eU4hakjT9zQ=
28
+ github.com/samchon/ttsc/packages/ttsc/shim/printer v0.0.0-20260820075544-3fe6b732f888/go.mod h1:Hz8BbCqKCrykLfIX+PburWsGEKR8+bkrBJDe2TMLLS0=
29
+ github.com/samchon/ttsc/packages/ttsc/shim/scanner v0.0.0-20260820075544-3fe6b732f888 h1:PWwuDTnPxbj0tVl0B7/wDoZHgysUqnyQMsoKwJ1D6Q4=
30
+ github.com/samchon/ttsc/packages/ttsc/shim/scanner v0.0.0-20260820075544-3fe6b732f888/go.mod h1:abIC7C28cUA5IQKmLJulsl2qOvmimhkMNOfjJhRm5jM=
31
+ github.com/samchon/ttsc/packages/ttsc/shim/tsoptions v0.0.0-20260820075544-3fe6b732f888 h1:lz0eJbiPb4e0DnWNfZRIW2+FEtEdkStClUCEko481s8=
32
+ github.com/samchon/ttsc/packages/ttsc/shim/tsoptions v0.0.0-20260820075544-3fe6b732f888/go.mod h1:EQwrCr3nY0U1SZBNyp6cQSogAiXsjFxTuT8NlMit1lc=
33
+ github.com/samchon/ttsc/packages/ttsc/shim/tspath v0.0.0-20260820075544-3fe6b732f888 h1:gx0BaA7+aiZH8gadWxlUc1rJ0uFS9lyP2FIDPMTcxD0=
34
+ github.com/samchon/ttsc/packages/ttsc/shim/tspath v0.0.0-20260820075544-3fe6b732f888/go.mod h1:hsE2c1bZquSNlDLIkT3SfLH3MrDmMk1BLzWI/KomT1A=
35
+ github.com/samchon/ttsc/packages/ttsc/shim/vfs v0.0.0-20260820075544-3fe6b732f888 h1:hluGlN8yDeNO9fOn3nmPuEpnrQ7HLqb+kZITTwlc2jc=
36
+ github.com/samchon/ttsc/packages/ttsc/shim/vfs v0.0.0-20260820075544-3fe6b732f888/go.mod h1:HoQcoC0FEG3iMI6zvjg8r6j/ves+RVH6SRn48VSi5H0=
37
+ github.com/samchon/ttsc/packages/ttsc/shim/vfs/cachedvfs v0.0.0-20260820075544-3fe6b732f888 h1:rFmIUXTH4TVyii/qidmmHDRtwYwORquRd83WUoUkdmk=
38
+ github.com/samchon/ttsc/packages/ttsc/shim/vfs/cachedvfs v0.0.0-20260820075544-3fe6b732f888/go.mod h1:XS3LhXkn5xadyRe3tW+9+suW/7gh7dPdL43Q+s/lUDo=
39
+ github.com/samchon/ttsc/packages/ttsc/shim/vfs/osvfs v0.0.0-20260820075544-3fe6b732f888 h1:ihiKD2OhuYc7Dngxw3uFYbVoiA/xuPwwQoUakB59E40=
40
+ github.com/samchon/ttsc/packages/ttsc/shim/vfs/osvfs v0.0.0-20260820075544-3fe6b732f888/go.mod h1:otX+qw8aZLNCoBmCwMAn53Nw0RQTPzSoId3DxmE67So=
41
+ github.com/samchon/typia/packages/typia/native v0.0.0-20260818045905-f692fd63a846 h1:x9xL0zn2AqPf19lTp8dNal+Ia3cIu0uYnyXlY4mo3QI=
42
+ github.com/samchon/typia/packages/typia/native v0.0.0-20260818045905-f692fd63a846/go.mod h1:pUTSG5IZxw8Hohle//RsDXnE+8ZhAus7mPDKFqzvZnk=
43
43
  github.com/zeebo/assert v1.3.0 h1:g7C04CbJuIDKNPFHmsk4hwZDO5O+kntRxzaUoNXj+IQ=
44
44
  github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0=
45
45
  github.com/zeebo/xxh3 v1.1.0 h1:s7DLGDK45Dyfg7++yxI0khrfwq9661w9EN78eP/UZVs=
@@ -8,6 +8,7 @@ import (
8
8
  "io"
9
9
  "os"
10
10
  "path/filepath"
11
+ "sync"
11
12
  "time"
12
13
 
13
14
  shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
@@ -68,21 +69,54 @@ func runBuild(args []string) int {
68
69
  return 2
69
70
  }
70
71
  if len(diags) > 0 {
72
+ if prog != nil {
73
+ prog.Close()
74
+ }
71
75
  driver.WritePrettyDiagnostics(stderr, diags, cwd)
72
76
  return 2
73
77
  }
74
- defer prog.Close()
75
78
  if profile {
76
79
  started = time.Now()
77
80
  }
78
81
  if diags := prog.Diagnostics(); len(diags) > 0 {
79
82
  profileBuildStep(profile, "diagnostics", started)
83
+ prog.Close()
80
84
  driver.WritePrettyDiagnostics(stderr, diags, cwd)
81
85
  return 2
82
86
  }
83
87
  profileBuildStep(profile, "diagnostics", started)
84
88
 
85
89
  shouldEmit := !prog.ParsedConfig.ParsedConfig.CompilerOptions.NoEmit.IsTrue()
90
+ if !shouldEmit {
91
+ // Plugin transformers are part of tsgo's emit pipeline. Reload with emit
92
+ // enabled so check/noEmit traverses the same source set, then discard every
93
+ // generated output below. The original program already proved the project's
94
+ // diagnostics; diagnosing this private reload would reject valid analysis-
95
+ // only options such as allowImportingTsExtensions.
96
+ prog.Close()
97
+ if profile {
98
+ started = time.Now()
99
+ }
100
+ prog, diags, err = driver.LoadProgram(cwd, *tsconfigPath, driver.LoadProgramOptions{
101
+ ForceEmit: true,
102
+ OutDir: *outDir,
103
+ })
104
+ profileBuildStep(profile, "load-transform-program", started)
105
+ if err != nil {
106
+ fmt.Fprintf(stderr, "ttsc-nestia build: %v\n", err)
107
+ return 2
108
+ }
109
+ if len(diags) > 0 {
110
+ if prog != nil {
111
+ prog.Close()
112
+ }
113
+ driver.WritePrettyDiagnostics(stderr, diags, cwd)
114
+ return 2
115
+ }
116
+ }
117
+ defer prog.Close()
118
+ releaseTypiaRegistries := registerTypiaDefaultLibraryClassifier(prog)
119
+ defer releaseTypiaRegistries()
86
120
  if !*quiet {
87
121
  fmt.Fprintf(
88
122
  stdout,
@@ -95,9 +129,6 @@ func runBuild(args []string) int {
95
129
  shouldEmit,
96
130
  )
97
131
  }
98
- if !shouldEmit {
99
- return 0
100
- }
101
132
 
102
133
  // AST-integration emit: typia's per-file transformer and @nestia/core's own
103
134
  // per-file transformer both run inside tsgo's emit pipeline (sharing the
@@ -130,10 +161,20 @@ func runBuild(args []string) int {
130
161
  transforms := append([]driver.PluginTransform{typiaTransform, coreTransform}, contributorTransforms...)
131
162
 
132
163
  emitted := []string{}
164
+ pending := []buildPendingOutput{}
165
+ var writeMu sync.Mutex
133
166
  writeFile := shimcompiler.WriteFile(func(fileName, text string, data *shimcompiler.WriteFileData) error {
134
167
  _ = data
135
- emitted = append(emitted, fileName)
136
- return driver.DefaultWriteFile(fileName, text)
168
+ if shouldEmit {
169
+ // TypeScript-Go emits declarations in parallel. Serialize the shared
170
+ // slices so buffering cannot lose an artifact or race while the
171
+ // declaration workers call this callback concurrently.
172
+ writeMu.Lock()
173
+ defer writeMu.Unlock()
174
+ emitted = append(emitted, fileName)
175
+ pending = append(pending, buildPendingOutput{FileName: fileName, Text: text})
176
+ }
177
+ return nil
137
178
  })
138
179
 
139
180
  // Declaration emit: ttsc delegates the whole emit of a transform-plugin
@@ -143,7 +184,7 @@ func runBuild(args []string) int {
143
184
  // core runtime transforms never change the public type surface, so the
144
185
  // declarations are taken from the pristine program — done before the JS
145
186
  // transform runs so it reads the un-mutated AST.
146
- if prog.ParsedConfig.ParsedConfig.CompilerOptions.Declaration.IsTrue() {
187
+ if shouldEmit && prog.ParsedConfig.ParsedConfig.CompilerOptions.Declaration.IsTrue() {
147
188
  if profile {
148
189
  started = time.Now()
149
190
  }
@@ -160,10 +201,6 @@ func runBuild(args []string) int {
160
201
  fmt.Fprintf(stderr, "ttsc-nestia build: emit failed: %v\n", err)
161
202
  return 3
162
203
  }
163
- if len(transformDiags) > 0 {
164
- WriteTypiaTransformDiagnostics(stderr, transformDiags, cwd)
165
- return 3
166
- }
167
204
  emitHasError := false
168
205
  for _, d := range eDiags {
169
206
  fmt.Fprintln(stderr, " -", d.String())
@@ -171,31 +208,48 @@ func runBuild(args []string) int {
171
208
  emitHasError = true
172
209
  }
173
210
  }
211
+ if len(transformDiags) > 0 {
212
+ WriteTypiaTransformDiagnostics(stderr, transformDiags, cwd)
213
+ return 3
214
+ }
174
215
  if emitHasError {
175
216
  return 3
176
217
  }
177
- if *manifestPath != "" {
178
- data, err := json.Marshal(emitted)
179
- if err != nil {
180
- fmt.Fprintf(stderr, "ttsc-nestia build: manifest marshal failed: %v\n", err)
181
- return 3
218
+ if shouldEmit {
219
+ for _, output := range pending {
220
+ if err := driver.DefaultWriteFile(output.FileName, output.Text); err != nil {
221
+ fmt.Fprintf(stderr, "ttsc-nestia build: emit write failed: %v\n", err)
222
+ return 3
223
+ }
182
224
  }
183
- if err := os.MkdirAll(filepath.Dir(*manifestPath), 0o755); err != nil {
184
- fmt.Fprintf(stderr, "ttsc-nestia build: manifest mkdir failed: %v\n", err)
185
- return 3
225
+ if *manifestPath != "" {
226
+ data, err := json.Marshal(emitted)
227
+ if err != nil {
228
+ fmt.Fprintf(stderr, "ttsc-nestia build: manifest marshal failed: %v\n", err)
229
+ return 3
230
+ }
231
+ if err := os.MkdirAll(filepath.Dir(*manifestPath), 0o755); err != nil {
232
+ fmt.Fprintf(stderr, "ttsc-nestia build: manifest mkdir failed: %v\n", err)
233
+ return 3
234
+ }
235
+ if err := os.WriteFile(*manifestPath, data, 0o644); err != nil {
236
+ fmt.Fprintf(stderr, "ttsc-nestia build: manifest write failed: %v\n", err)
237
+ return 3
238
+ }
186
239
  }
187
- if err := os.WriteFile(*manifestPath, data, 0o644); err != nil {
188
- fmt.Fprintf(stderr, "ttsc-nestia build: manifest write failed: %v\n", err)
189
- return 3
240
+ if !*quiet {
241
+ fmt.Fprintf(stdout, "// ttsc-nestia build: emitted=%d files\n", len(emitted))
190
242
  }
191
243
  }
192
- if !*quiet {
193
- fmt.Fprintf(stdout, "// ttsc-nestia build: emitted=%d files\n", len(emitted))
194
- }
195
244
  profileBuildStep(profile, "total", totalStarted)
196
245
  return 0
197
246
  }
198
247
 
248
+ type buildPendingOutput struct {
249
+ FileName string
250
+ Text string
251
+ }
252
+
199
253
  // emitDeclarations runs tsgo's standard declaration emitter for the program.
200
254
  // tsgo's MarkLinkedReferences pass can nil-panic on some cross-module reference
201
255
  // shapes (e.g. a nestia.config.ts that calls NestFactory.create, compiled by the
@@ -218,39 +272,7 @@ func emitDeclarations(prog *driver.Program, writeFile shimcompiler.WriteFile) {
218
272
  }
219
273
 
220
274
  func runCheck(args []string) int {
221
- fs := flag.NewFlagSet("check", flag.ContinueOnError)
222
- fs.SetOutput(stderr)
223
- tsconfigPath := fs.String("tsconfig", "tsconfig.json", "path to tsconfig.json")
224
- cwdOverride := fs.String("cwd", "", "override the working directory")
225
- pluginsJSON := fs.String("plugins-json", "", "ordered ttsc plugin payload")
226
- if err := fs.Parse(args); err != nil {
227
- return 2
228
- }
229
- if _, err := plugin.ParsePlan(*pluginsJSON); err != nil {
230
- fmt.Fprintf(stderr, "ttsc-nestia check: %v\n", err)
231
- return 2
232
- }
233
- cwd, ok := resolveCWD("ttsc-nestia check", *cwdOverride)
234
- if !ok {
235
- return 2
236
- }
237
- prog, diags, err := driver.LoadProgram(cwd, *tsconfigPath, driver.LoadProgramOptions{
238
- ForceNoEmit: true,
239
- })
240
- if err != nil {
241
- fmt.Fprintf(stderr, "ttsc-nestia check: %v\n", err)
242
- return 2
243
- }
244
- if len(diags) > 0 {
245
- driver.WritePrettyDiagnostics(stderr, diags, cwd)
246
- return 2
247
- }
248
- defer prog.Close()
249
- if diags := prog.Diagnostics(); len(diags) > 0 {
250
- driver.WritePrettyDiagnostics(stderr, diags, cwd)
251
- return 2
252
- }
253
- return 0
275
+ return runBuild(append([]string{"--noEmit"}, args...))
254
276
  }
255
277
 
256
278
  type Diagnostic struct {
@@ -42,6 +42,35 @@ func Run(args []string) (code int) {
42
42
  return run(args)
43
43
  }
44
44
 
45
+ // RunWithOutput is Run with the host's stdout and stderr writers redirected for
46
+ // the duration of the call, then restored.
47
+ //
48
+ // The project-mode `transform` subcommand publishes its whole result — the
49
+ // transformed sources, the diagnostics, and the reference graph — as one JSON
50
+ // envelope on stdout, and unlike the single-file path it has no `--out` seam. An
51
+ // exit code is therefore the only thing an external test module can observe
52
+ // about it, which is not enough to pin what the envelope carries. This makes the
53
+ // envelope itself observable without giving the CLI a flag ttsc never passes.
54
+ //
55
+ // Restoring inside the call keeps the redirect scoped: a nil writer is ignored,
56
+ // so a caller can redirect one stream and leave the other on the process. The
57
+ // writers are package state, so concurrent calls would interleave; the host runs
58
+ // one command per process and Go tests in one package run sequentially unless
59
+ // they opt into t.Parallel.
60
+ func RunWithOutput(args []string, out io.Writer, errOut io.Writer) int {
61
+ previousOut, previousErr := stdout, stderr
62
+ defer func() {
63
+ stdout, stderr = previousOut, previousErr
64
+ }()
65
+ if out != nil {
66
+ stdout = out
67
+ }
68
+ if errOut != nil {
69
+ stderr = errOut
70
+ }
71
+ return Run(args)
72
+ }
73
+
45
74
  func run(args []string) int {
46
75
  if len(args) == 0 {
47
76
  return runHelp(nil)
@@ -14,11 +14,34 @@ import (
14
14
  shimprinter "github.com/microsoft/typescript-go/shim/printer"
15
15
  "github.com/samchon/nestia/packages/core/native/plugin"
16
16
  "github.com/samchon/ttsc/packages/ttsc/driver"
17
+ schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
17
18
  )
18
19
 
19
20
  type transformProjectOutput struct {
20
21
  Diagnostics []transformCompilerDiagnostic `json:"diagnostics,omitempty"`
21
22
  TypeScript map[string]string `json:"typescript"`
23
+ // Graph is the host-owned reference graph of the loaded program produced by
24
+ // the ttsc driver SDK (driver.NewTransformGraph): direct resolved reference
25
+ // edges, ambient global-scope files, the tsconfig extends chain, and the
26
+ // module-resolution candidates that outrank a selected target. Keys and
27
+ // values share TypeScript's keying through driver.TransformOutputKey, so a
28
+ // consumer joins the sections by key.
29
+ //
30
+ // A bundler erases type-only imports from its own module graph, so without
31
+ // this section nothing tells a persistent filesystem cache that a generated
32
+ // validator depends on the DTO declaration it was generated from, and the
33
+ // cache replays the stale module after the DTO's type changes. Stamping it
34
+ // also moves `@ttsc/unplugin` off the whole-snapshot revalidation path onto
35
+ // its narrow per-file one. Omitted only for a nil or unloaded program, which
36
+ // cannot happen here: LoadProgram failures return before this point.
37
+ Graph *driver.TransformGraph `json:"graph,omitempty"`
38
+ // Dependencies maps each transformed file (same keys as TypeScript) to the
39
+ // source files owning the declarations typia's metadata analysis consulted
40
+ // while generating that file's validators and stringifiers. A consumer
41
+ // unions them with Graph rather than choosing between them, so the list is
42
+ // additive: an omission costs nothing, and narrowing would require the
43
+ // separate `dependenciesComplete` declaration this envelope does not make.
44
+ Dependencies map[string][]string `json:"dependencies,omitempty"`
22
45
  }
23
46
 
24
47
  type transformCompilerDiagnostic struct {
@@ -68,6 +91,8 @@ func runTransform(args []string) int {
68
91
  return 2
69
92
  }
70
93
  defer prog.Close()
94
+ releaseTypiaRegistries := registerTypiaDefaultLibraryClassifier(prog)
95
+ defer releaseTypiaRegistries()
71
96
 
72
97
  // AST-integration source-to-source: typia's, core's, and any linked
73
98
  // contributor's per-file node transformers run inside one shared EmitContext
@@ -123,16 +148,42 @@ func runTransformProject(
123
148
  Diagnostics: []transformCompilerDiagnostic{},
124
149
  TypeScript: map[string]string{},
125
150
  }
151
+ // Compute the reference graph from the loaded program before the transform
152
+ // loop runs: the graph must describe the original sources' resolved
153
+ // references, which are the transform's inputs, and the loop's printing pass
154
+ // sets parent pointers on the node tree it walks. ttsc's own `api-transform`
155
+ // host stamps it at the same point.
156
+ output.Graph = driver.NewTransformGraph(prog, cwd)
157
+ // `dependencies` is the second, narrower channel: the declaration files
158
+ // typia's analysis actually read for each file, reported alongside the graph
159
+ // rather than instead of it. The two are unioned by the consumer, so this
160
+ // list can only add inputs.
161
+ //
162
+ // The envelope deliberately declares no `dependenciesComplete`. That field
163
+ // transfers responsibility -- a listed file stops watching everything the
164
+ // reference closure carries -- and this host cannot honor it: whether a file
165
+ // is transformed at all depends on symbol resolutions that no listener
166
+ // reports, including the negative ones, and typia's own trigger set belongs
167
+ // to typia rather than to this host. See samchon/typia#2357.
168
+ collector := newTransformDependencyCollector(cwd, func(fileName string) bool {
169
+ sf := prog.SourceFile(fileName)
170
+ return sf != nil && prog.TSProgram.IsLibFile(sf)
171
+ })
172
+ schemametadata.MetadataDependency_listen(prog.Checker, collector.Touch)
173
+ defer schemametadata.MetadataDependency_release(prog.Checker)
126
174
  for _, sf := range prog.SourceFiles() {
127
175
  if sf.IsDeclarationFile {
128
176
  continue
129
177
  }
130
- key := sourceFileKey(cwd, filepath.ToSlash(sf.FileName()))
178
+ key := driver.TransformOutputKey(cwd, sf.FileName())
131
179
  if filepath.IsAbs(key) || key == ".." || strings.HasPrefix(key, "../") {
132
180
  continue
133
181
  }
182
+ collector.Begin(key)
134
183
  output.TypeScript[key] = transformFileToTypeScript(prog, transforms, sf)
184
+ collector.End()
135
185
  }
186
+ output.Dependencies = collector.ToJSON()
136
187
  for _, diag := range *transformDiags {
137
188
  output.Diagnostics = append(output.Diagnostics, transformDiagnosticToCompilerDiagnostic(diag))
138
189
  }
@@ -221,13 +272,6 @@ var (
221
272
  normalizeParenNullishPattern = regexp.MustCompile(`\| \((null|undefined)\)`)
222
273
  )
223
274
 
224
- func sourceFileKey(cwd string, file string) string {
225
- rel, err := filepath.Rel(cwd, filepath.FromSlash(file))
226
- if err != nil || rel == ".." || strings.HasPrefix(rel, ".."+string(os.PathSeparator)) {
227
- return filepath.ToSlash(file)
228
- }
229
- return filepath.ToSlash(rel)
230
- }
231
275
  func transformDiagnosticToCompilerDiagnostic(
232
276
  diag Diagnostic,
233
277
  ) transformCompilerDiagnostic {
@@ -0,0 +1,117 @@
1
+ package transform
2
+
3
+ import (
4
+ "sort"
5
+ "strings"
6
+
7
+ "github.com/samchon/ttsc/packages/ttsc/driver"
8
+ )
9
+
10
+ // transformDependencyCollector accumulates the declaration files typia's
11
+ // metadata analysis reports while one project file is transformed, attributing
12
+ // them to that file's envelope key.
13
+ //
14
+ // These are the envelope's `dependencies`: the source files owning the
15
+ // declarations the analysis actually read to generate that file's validators and
16
+ // stringifiers. A consumer unions them with the host-owned reference graph, so
17
+ // the list is additive and an omission costs nothing; it never narrows anything
18
+ // on its own. Narrowing is what `dependenciesComplete` would do, and this
19
+ // envelope does not declare it -- see the note in runTransformProject.
20
+ type transformDependencyCollector struct {
21
+ cwd string
22
+ current string
23
+ files map[string]map[string]bool
24
+ // isLibraryFile reports the compiler's own classification of a file as a
25
+ // default library. Classification must come from the program, never from a
26
+ // file-name pattern, for the reason registerTypiaDefaultLibraryClassifier
27
+ // records: a project's own ambient declaration file may legitimately be
28
+ // named `lib.custom.d.ts`, and dropping it by base name silently loses cache
29
+ // invalidation for the types it declares.
30
+ isLibraryFile func(fileName string) bool
31
+ // values memoizes fileName -> envelope value ("" for a dropped file). The
32
+ // listener reports the same declaration files repeatedly across call sites.
33
+ values map[string]string
34
+ }
35
+
36
+ func newTransformDependencyCollector(
37
+ cwd string,
38
+ isLibraryFile func(fileName string) bool,
39
+ ) *transformDependencyCollector {
40
+ return &transformDependencyCollector{
41
+ cwd: cwd,
42
+ isLibraryFile: isLibraryFile,
43
+ files: map[string]map[string]bool{},
44
+ values: map[string]string{},
45
+ }
46
+ }
47
+
48
+ // Begin attributes subsequent touches to the given envelope key.
49
+ func (collector *transformDependencyCollector) Begin(key string) {
50
+ collector.current = key
51
+ }
52
+
53
+ // End closes the window Begin opened, so a touch arriving between two files is
54
+ // dropped rather than charged against whichever file happened to run last.
55
+ func (collector *transformDependencyCollector) End() {
56
+ collector.current = ""
57
+ }
58
+
59
+ // Touch records one consulted declaration file for the current key. Default
60
+ // library files, virtual URI sources (tsgo's `bundled:///` libraries), and the
61
+ // transformed file itself are dropped: the first two are toolchain-versioned
62
+ // rather than project inputs, and the third is already the cache key.
63
+ func (collector *transformDependencyCollector) Touch(fileName string) {
64
+ if collector.current == "" {
65
+ return
66
+ }
67
+ value, memoized := collector.values[fileName]
68
+ if memoized == false {
69
+ value = collector.value(fileName)
70
+ collector.values[fileName] = value
71
+ }
72
+ if value == "" || value == collector.current {
73
+ return
74
+ }
75
+ set := collector.files[collector.current]
76
+ if set == nil {
77
+ set = map[string]bool{}
78
+ collector.files[collector.current] = set
79
+ }
80
+ set[value] = true
81
+ }
82
+
83
+ // value renders one reported file as its envelope key, or "" when it is dropped.
84
+ // The key is driver.TransformOutputKey, the same one `typescript` and `graph`
85
+ // use, so a consumer joins every section by key.
86
+ func (collector *transformDependencyCollector) value(fileName string) string {
87
+ if strings.Contains(fileName, "://") || collector.isLibraryFile(fileName) {
88
+ return ""
89
+ }
90
+ return driver.TransformOutputKey(collector.cwd, fileName)
91
+ }
92
+
93
+ // ToJSON renders the collected sets as the envelope's `dependencies` map with
94
+ // deterministically sorted values, or nil when nothing was collected. The nil
95
+ // keeps the field off the wire entirely, which is what an envelope with nothing
96
+ // to report must send.
97
+ func (collector *transformDependencyCollector) ToJSON() map[string][]string {
98
+ if len(collector.files) == 0 {
99
+ return nil
100
+ }
101
+ output := map[string][]string{}
102
+ for key, set := range collector.files {
103
+ if len(set) == 0 {
104
+ continue
105
+ }
106
+ values := make([]string, 0, len(set))
107
+ for value := range set {
108
+ values = append(values, value)
109
+ }
110
+ sort.Strings(values)
111
+ output[key] = values
112
+ }
113
+ if len(output) == 0 {
114
+ return nil
115
+ }
116
+ return output
117
+ }
@@ -0,0 +1,40 @@
1
+ package transform
2
+
3
+ import (
4
+ shimast "github.com/microsoft/typescript-go/shim/ast"
5
+ "github.com/samchon/ttsc/packages/ttsc/driver"
6
+ schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
7
+ )
8
+
9
+ // registerTypiaDefaultLibraryClassifier hands typia's metadata analysis the
10
+ // program's own default-library classification and returns the release the
11
+ // caller defers.
12
+ //
13
+ // @nestia/core hosts typia's transform rather than reimplementing it, so it
14
+ // owes that analysis the same per-program registrations typia's own host
15
+ // installs. Runtime-native identity is decided from this classifier: a global is
16
+ // the JavaScript built-in only when a runtime authority declares it. With no
17
+ // classifier registered the analysis falls back to a `lib.*.d.ts` base-name
18
+ // test, and a default library is not recognizable from its file name --
19
+ // `libReplacement` points it at `node_modules/@typescript/lib-es2022/index.d.ts`,
20
+ // which does not even start with `lib.`, while `lib.d.ts` is an ordinary
21
+ // published file name any dependency may use. Without this, the same DTO
22
+ // generates one validator through typia's plugin and a different one through
23
+ // nestia's host.
24
+ //
25
+ // The registry is keyed by checker, so the release must run before the program
26
+ // closes; otherwise a closed program's checker stays reachable from a
27
+ // process-global map.
28
+ func registerTypiaDefaultLibraryClassifier(prog *driver.Program) func() {
29
+ if prog == nil || prog.TSProgram == nil {
30
+ return func() {}
31
+ }
32
+ program := prog.TSProgram
33
+ checker := prog.Checker
34
+ schemametadata.MetadataDefaultLibrary_register(checker, func(source *shimast.SourceFile) bool {
35
+ return source != nil && program.IsLibFile(source)
36
+ })
37
+ return func() {
38
+ schemametadata.MetadataDefaultLibrary_release(checker)
39
+ }
40
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nestia/core",
3
- "version": "12.1.0",
3
+ "version": "13.0.1",
4
4
  "description": "Super-fast validation decorators of NestJS",
5
5
  "main": "lib/index.js",
6
6
  "exports": {
@@ -45,8 +45,8 @@
45
45
  },
46
46
  "homepage": "https://nestia.io",
47
47
  "dependencies": {
48
- "@typia/interface": "^13.2.0",
49
- "@typia/utils": "^13.2.0",
48
+ "@typia/interface": "^14.0.2",
49
+ "@typia/utils": "^14.0.2",
50
50
  "get-function-location": "^2.0.0",
51
51
  "glob": "^11.0.3",
52
52
  "path-parser": "^6.1.0",
@@ -54,9 +54,9 @@
54
54
  "reflect-metadata": ">=0.1.12",
55
55
  "rxjs": ">=6.0.3",
56
56
  "tgrid": "^1.1.0",
57
- "typia": "^13.2.0",
57
+ "typia": "^14.0.2",
58
58
  "ws": "^7.5.3",
59
- "@nestia/fetcher": "^12.1.0"
59
+ "@nestia/fetcher": "^13.0.1"
60
60
  },
61
61
  "peerDependencies": {
62
62
  "@modelcontextprotocol/sdk": "^1.18.0",
@@ -64,12 +64,16 @@
64
64
  "@nestjs/core": ">=7.0.1",
65
65
  "reflect-metadata": ">=0.1.12",
66
66
  "rxjs": ">=6.0.3",
67
- "typia": "^13.2.0",
68
- "@nestia/fetcher": "^12.1.0"
67
+ "ttsc": ">=0.19.2",
68
+ "typia": "^14.0.2",
69
+ "@nestia/fetcher": "^13.0.1"
69
70
  },
70
71
  "peerDependenciesMeta": {
71
72
  "@modelcontextprotocol/sdk": {
72
73
  "optional": true
74
+ },
75
+ "ttsc": {
76
+ "optional": true
73
77
  }
74
78
  },
75
79
  "devDependencies": {
@@ -82,7 +86,7 @@
82
86
  "@types/ws": "^8.5.10",
83
87
  "fastify": "^4.28.1",
84
88
  "rimraf": "^6.1.3",
85
- "ttsc": "^0.20.0",
89
+ "ttsc": "^0.28.1",
86
90
  "tstl": "^3.0.0",
87
91
  "typescript": "^7.0.2"
88
92
  },
@@ -138,11 +138,7 @@ export namespace McpRoute {
138
138
  value: IMcpRouteReflect.IArgument,
139
139
  ) => {
140
140
  const array: IMcpRouteReflect.IArgument[] | undefined =
141
- Reflect.getOwnMetadata(
142
- "nestia/McpRoute/Parameters",
143
- target,
144
- propertyKey,
145
- );
141
+ Reflect.getOwnMetadata("nestia/McpRoute/Parameters", target, propertyKey);
146
142
  if (array !== undefined) array.push(value);
147
143
  else
148
144
  Reflect.defineMetadata(
@@ -24,11 +24,7 @@ export function SwaggerCustomizer(
24
24
  ) {
25
25
  const array: Array<(props: SwaggerCustomizer.IProps) => unknown> = (() => {
26
26
  if (
27
- Reflect.hasOwnMetadata(
28
- "nestia/SwaggerCustomizer",
29
- target,
30
- propertyKey,
31
- )
27
+ Reflect.hasOwnMetadata("nestia/SwaggerCustomizer", target, propertyKey)
32
28
  )
33
29
  return Reflect.getOwnMetadata(
34
30
  "nestia/SwaggerCustomizer",
@@ -160,12 +160,11 @@ const emplaceArrayOfParameters = (
160
160
  target: Object,
161
161
  propertyKey: string | symbol,
162
162
  ): SwaggerExample.IData<any>[] => {
163
- const array: SwaggerExample.IData<any>[] | undefined =
164
- Reflect.getOwnMetadata(
165
- "nestia/SwaggerExample/Parameters",
166
- target,
167
- propertyKey,
168
- );
163
+ const array: SwaggerExample.IData<any>[] | undefined = Reflect.getOwnMetadata(
164
+ "nestia/SwaggerExample/Parameters",
165
+ target,
166
+ propertyKey,
167
+ );
169
168
  if (array !== undefined) return array;
170
169
  const newbie: SwaggerExample.IData<any>[] = [];
171
170
  Reflect.defineMetadata(