@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.
- package/lib/decorators/McpRoute.js.map +1 -1
- package/lib/decorators/SwaggerCustomizer.js.map +1 -1
- package/lib/decorators/SwaggerExample.js.map +1 -1
- package/native/go.mod +1 -1
- package/native/go.sum +32 -32
- package/native/transform/build.go +80 -58
- package/native/transform/run.go +29 -0
- package/native/transform/transform.go +52 -8
- package/native/transform/typia_dependency.go +117 -0
- package/native/transform/typia_registry.go +40 -0
- package/package.json +12 -8
- package/src/decorators/McpRoute.ts +1 -5
- package/src/decorators/SwaggerCustomizer.ts +1 -5
- package/src/decorators/SwaggerExample.ts +5 -6
|
@@ -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,
|
|
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,
|
|
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":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,IAAiB,cAAc,CAwE9B;AAxED,WAAiB,cAAc;IAoB7B,SAAgB,QAAQ,CAAC,GAAG,IAAW;QACrC,OAAO,SAAS,sBAAsB,CACpC,OAAe,EACf,YAA6B,EAC7B,UAAwC;YAExC,YAAY,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC;IATe,eAAA,QAAQ,WASvB,CAAA;IAqBD,SAAgB,SAAS,CAAC,GAAG,IAAW;QACtC,OAAO,SAAS,uBAAuB,CACrC,MAAc,EACd,WAAwC,EACxC,KAAa;YAEb,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC;IACJ,CAAC;IARe,eAAA,SAAS,YAQxB,CAAA;AAcH,CAAC,EAxEgB,cAAc,aAAd,cAAc,GAAd,cAAc,QAwE9B;AAED,MAAM,YAAY,GAChB,CAAI,IAA6B,EAAE,EAAE,CACrC,CAAC,IAAW,EAAE,EAAE;;IACd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC;QACJ,MAAM,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAA,IAAI,CAAC,QAAQ,oCAAb,IAAI,CAAC,QAAQ,GAAK,EAAE,EAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,iBAAiB,GAAG,CACxB,UAAwC,EACf,EAAE;IAC3B,MAAM,MAAM,GAAwC,OAAO,CAAC,WAAW,CACrE,gCAAgC,EAChC,UAAU,CAAC,KAAK,CACjB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,OAAO,CAAC,cAAc,CACpB,gCAAgC,EAChC,MAAM,EACN,UAAU,CAAC,KAAK,CACjB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,MAAc,EACd,WAA4B,EAC5B,KAAa,EACc,EAAE;IAC7B,MAAM,KAAK,GAAgC,wBAAwB,CACjE,MAAM,EACN,WAAW,CACZ,CAAC;IACF,MAAM,MAAM,GAA0C,KAAK,CAAC,IAAI,CAC9D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CACzB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,IAAI,GAA8B,EAAE,KAAK,EAAE,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC/B,MAAc,EACd,WAA4B,EACC,EAAE;IAC/B,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"SwaggerExample.js","sourceRoot":"","sources":["../../src/decorators/SwaggerExample.ts"],"names":[],"mappings":";;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,IAAiB,cAAc,CAwE9B;AAxED,WAAiB,cAAc;IAoB7B,SAAgB,QAAQ,CAAC,GAAG,IAAW;QACrC,OAAO,SAAS,sBAAsB,CACpC,OAAe,EACf,YAA6B,EAC7B,UAAwC;YAExC,YAAY,CAAC,iBAAiB,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,OAAO,UAAU,CAAC;QACpB,CAAC,CAAC;IACJ,CAAC;IATe,eAAA,QAAQ,WASvB,CAAA;IAqBD,SAAgB,SAAS,CAAC,GAAG,IAAW;QACtC,OAAO,SAAS,uBAAuB,CACrC,MAAc,EACd,WAAwC,EACxC,KAAa;YAEb,YAAY,CAAC,kBAAkB,CAAC,MAAM,EAAE,WAAW,aAAX,WAAW,cAAX,WAAW,GAAI,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC3E,CAAC,CAAC;IACJ,CAAC;IARe,eAAA,SAAS,YAQxB,CAAA;AAcH,CAAC,EAxEgB,cAAc,aAAd,cAAc,GAAd,cAAc,QAwE9B;AAED,MAAM,YAAY,GAChB,CAAI,IAA6B,EAAE,EAAE,CACrC,CAAC,IAAW,EAAE,EAAE;;IACd,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;SACzC,CAAC;QACJ,MAAM,GAAG,GAAW,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAM,IAAI,CAAC,CAAC,CAAC,CAAC;QACzB,MAAA,IAAI,CAAC,QAAQ,oCAAb,IAAI,CAAC,QAAQ,GAAK,EAAE,EAAC;QACrB,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IAC7B,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,iBAAiB,GAAG,CACxB,UAAwC,EACf,EAAE;IAC3B,MAAM,MAAM,GAAwC,OAAO,CAAC,WAAW,CACrE,gCAAgC,EAChC,UAAU,CAAC,KAAK,CACjB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IACxC,MAAM,MAAM,GAA4B,EAAE,CAAC;IAC3C,OAAO,CAAC,cAAc,CACpB,gCAAgC,EAChC,MAAM,EACN,UAAU,CAAC,KAAK,CACjB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,MAAc,EACd,WAA4B,EAC5B,KAAa,EACc,EAAE;IAC7B,MAAM,KAAK,GAAgC,wBAAwB,CACjE,MAAM,EACN,WAAW,CACZ,CAAC;IACF,MAAM,MAAM,GAA0C,KAAK,CAAC,IAAI,CAC9D,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,KAAK,CACzB,CAAC;IACF,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC;IAExC,MAAM,IAAI,GAA8B,EAAE,KAAK,EAAE,CAAC;IAClD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjB,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,wBAAwB,GAAG,CAC/B,MAAc,EACd,WAA4B,EACC,EAAE;IAC/B,MAAM,KAAK,GAA4C,OAAO,CAAC,cAAc,CAC3E,kCAAkC,EAClC,MAAM,EACN,WAAW,CACZ,CAAC;IACF,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IACtC,MAAM,MAAM,GAAgC,EAAE,CAAC;IAC/C,OAAO,CAAC,cAAc,CACpB,kCAAkC,EAClC,MAAM,EACN,MAAM,EACN,WAAW,CACZ,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC"}
|
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-
|
|
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-
|
|
12
|
-
github.com/samchon/ttsc/packages/ttsc v0.0.0-
|
|
13
|
-
github.com/samchon/ttsc/packages/ttsc/shim/ast v0.0.0-
|
|
14
|
-
github.com/samchon/ttsc/packages/ttsc/shim/ast v0.0.0-
|
|
15
|
-
github.com/samchon/ttsc/packages/ttsc/shim/bundled v0.0.0-
|
|
16
|
-
github.com/samchon/ttsc/packages/ttsc/shim/bundled v0.0.0-
|
|
17
|
-
github.com/samchon/ttsc/packages/ttsc/shim/checker v0.0.0-
|
|
18
|
-
github.com/samchon/ttsc/packages/ttsc/shim/checker v0.0.0-
|
|
19
|
-
github.com/samchon/ttsc/packages/ttsc/shim/compiler v0.0.0-
|
|
20
|
-
github.com/samchon/ttsc/packages/ttsc/shim/compiler v0.0.0-
|
|
21
|
-
github.com/samchon/ttsc/packages/ttsc/shim/core v0.0.0-
|
|
22
|
-
github.com/samchon/ttsc/packages/ttsc/shim/core v0.0.0-
|
|
23
|
-
github.com/samchon/ttsc/packages/ttsc/shim/diagnosticwriter v0.0.0-
|
|
24
|
-
github.com/samchon/ttsc/packages/ttsc/shim/diagnosticwriter v0.0.0-
|
|
25
|
-
github.com/samchon/ttsc/packages/ttsc/shim/parser v0.0.0-
|
|
26
|
-
github.com/samchon/ttsc/packages/ttsc/shim/parser v0.0.0-
|
|
27
|
-
github.com/samchon/ttsc/packages/ttsc/shim/printer v0.0.0-
|
|
28
|
-
github.com/samchon/ttsc/packages/ttsc/shim/printer v0.0.0-
|
|
29
|
-
github.com/samchon/ttsc/packages/ttsc/shim/scanner v0.0.0-
|
|
30
|
-
github.com/samchon/ttsc/packages/ttsc/shim/scanner v0.0.0-
|
|
31
|
-
github.com/samchon/ttsc/packages/ttsc/shim/tsoptions v0.0.0-
|
|
32
|
-
github.com/samchon/ttsc/packages/ttsc/shim/tsoptions v0.0.0-
|
|
33
|
-
github.com/samchon/ttsc/packages/ttsc/shim/tspath v0.0.0-
|
|
34
|
-
github.com/samchon/ttsc/packages/ttsc/shim/tspath v0.0.0-
|
|
35
|
-
github.com/samchon/ttsc/packages/ttsc/shim/vfs v0.0.0-
|
|
36
|
-
github.com/samchon/ttsc/packages/ttsc/shim/vfs v0.0.0-
|
|
37
|
-
github.com/samchon/ttsc/packages/ttsc/shim/vfs/cachedvfs v0.0.0-
|
|
38
|
-
github.com/samchon/ttsc/packages/ttsc/shim/vfs/cachedvfs v0.0.0-
|
|
39
|
-
github.com/samchon/ttsc/packages/ttsc/shim/vfs/osvfs v0.0.0-
|
|
40
|
-
github.com/samchon/ttsc/packages/ttsc/shim/vfs/osvfs v0.0.0-
|
|
41
|
-
github.com/samchon/typia/packages/typia/native v0.0.0-
|
|
42
|
-
github.com/samchon/typia/packages/typia/native v0.0.0-
|
|
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
|
-
|
|
136
|
-
|
|
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
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
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
|
|
184
|
-
|
|
185
|
-
|
|
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
|
|
188
|
-
fmt.Fprintf(
|
|
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
|
-
|
|
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 {
|
package/native/transform/run.go
CHANGED
|
@@ -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 :=
|
|
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": "
|
|
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": "^
|
|
49
|
-
"@typia/utils": "^
|
|
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": "^
|
|
57
|
+
"typia": "^14.0.2",
|
|
58
58
|
"ws": "^7.5.3",
|
|
59
|
-
"@nestia/fetcher": "^
|
|
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
|
-
"
|
|
68
|
-
"
|
|
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.
|
|
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
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
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(
|