@elliots/typical 0.1.3 → 0.1.4

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/README.md CHANGED
@@ -87,3 +87,6 @@ But basically you shouldn't need to care about how it works internally, it makes
87
87
 
88
88
  ## Credits
89
89
  The actual validation work is done by [typia](https://github.com/samchon/typia). This package just generates the necessary code to call typia's functions based on your TypeScript types.
90
+
91
+ > NOTE: The whole package was all mostly LLM. Feel free to improve it without care for the author's feelings.
92
+
@@ -16,6 +16,12 @@ export declare class TypicalTransformer {
16
16
  createSourceFile(fileName: string, content: string): ts.SourceFile;
17
17
  transform(sourceFile: ts.SourceFile | string, mode: "basic" | "typia" | "js"): string;
18
18
  getTransformer(withTypia: boolean): ts.TransformerFactory<ts.SourceFile>;
19
+ /**
20
+ * Re-create an import declaration as a fully synthetic node.
21
+ * This prevents TypeScript from trying to look up symbol bindings
22
+ * and eliding the import as "unused".
23
+ */
24
+ private recreateImportDeclaration;
19
25
  /**
20
26
  * Transform a single source file with TypeScript AST
21
27
  */
@@ -57,22 +57,23 @@ export class TypicalTransformer {
57
57
  if (!withTypia) {
58
58
  return transformedSourceFile;
59
59
  }
60
- // Then apply typia if we added typia calls
60
+ // Apply typia transformation
61
61
  const printer = this.ts.createPrinter();
62
62
  const transformedCode = printer.printFile(transformedSourceFile);
63
+ if (process.env.DEBUG) {
64
+ console.log("TYPICAL: Before typia transform (first 500 chars):", transformedCode.substring(0, 500));
65
+ }
63
66
  if (transformedCode.includes("typia.")) {
64
67
  try {
65
- // Apply typia transformation to files with typia calls
66
- // Create a new source file with the transformed code, preserving original filename
67
- const newSourceFile = this.ts.createSourceFile(sourceFile.fileName, // Use original filename to maintain source map references
68
- transformedCode, sourceFile.languageVersion, true);
69
- // Create a new program with the transformed source file so typia's type checker works
68
+ // Create a new source file from our transformed code
69
+ const newSourceFile = this.ts.createSourceFile(sourceFile.fileName, transformedCode, sourceFile.languageVersion, true);
70
+ // Create a new program with the transformed source file so typia can resolve types
70
71
  const compilerOptions = this.program.getCompilerOptions();
71
72
  const originalSourceFiles = new Map();
72
73
  for (const sf of this.program.getSourceFiles()) {
73
74
  originalSourceFiles.set(sf.fileName, sf);
74
75
  }
75
- // Replace the original source file with the transformed one
76
+ // Replace the original source file with our transformed one
76
77
  originalSourceFiles.set(sourceFile.fileName, newSourceFile);
77
78
  const customHost = {
78
79
  getSourceFile: (fileName, languageVersion) => {
@@ -81,7 +82,7 @@ export class TypicalTransformer {
81
82
  }
82
83
  return this.ts.createSourceFile(fileName, this.ts.sys.readFile(fileName) || "", languageVersion, true);
83
84
  },
84
- getDefaultLibFileName: () => this.ts.getDefaultLibFilePath(compilerOptions),
85
+ getDefaultLibFileName: (opts) => this.ts.getDefaultLibFilePath(opts),
85
86
  writeFile: () => { },
86
87
  getCurrentDirectory: () => this.ts.sys.getCurrentDirectory(),
87
88
  getCanonicalFileName: (fileName) => this.ts.sys.useCaseSensitiveFileNames ? fileName : fileName.toLowerCase(),
@@ -91,21 +92,46 @@ export class TypicalTransformer {
91
92
  readFile: (fileName) => this.ts.sys.readFile(fileName),
92
93
  };
93
94
  const newProgram = this.ts.createProgram(Array.from(originalSourceFiles.keys()), compilerOptions, customHost);
94
- // Create typia transformer with the NEW program that has the transformed source
95
- const typiaTransformer = typiaTransform(newProgram, {}, {
95
+ // Get the bound source file from the new program (has proper symbol tables)
96
+ const boundSourceFile = newProgram.getSourceFile(sourceFile.fileName);
97
+ if (!boundSourceFile) {
98
+ throw new Error(`Failed to get bound source file: ${sourceFile.fileName}`);
99
+ }
100
+ // Create typia transformer with the NEW program that has our transformed source
101
+ const typiaTransformerFactory = typiaTransform(newProgram, {}, {
96
102
  addDiagnostic(diag) {
97
- console.warn("Typia diagnostic:", diag);
103
+ if (process.env.DEBUG) {
104
+ console.warn("Typia diagnostic:", diag);
105
+ }
98
106
  return 0;
99
107
  },
100
108
  });
101
- // Apply the transformer with source map preservation
102
- const transformationResult = this.ts.transform(newSourceFile, [typiaTransformer], { ...compilerOptions, sourceMap: true });
103
- if (transformationResult.transformed.length > 0) {
104
- const finalTransformed = transformationResult.transformed[0];
105
- transformedSourceFile = finalTransformed;
106
- // Typia transformation completed successfully
109
+ // Apply typia's transformer to the bound source file
110
+ const typiaNodeTransformer = typiaTransformerFactory(context);
111
+ const typiaTransformed = typiaNodeTransformer(boundSourceFile);
112
+ if (process.env.DEBUG) {
113
+ const afterTypia = printer.printFile(typiaTransformed);
114
+ console.log("TYPICAL: After typia transform (first 500 chars):", afterTypia.substring(0, 500));
107
115
  }
108
- transformationResult.dispose();
116
+ // Return the typia-transformed source file.
117
+ // We need to recreate imports as synthetic nodes to prevent import elision,
118
+ // since the imports come from a different program context.
119
+ // Skip type-only imports as they shouldn't appear in JS output.
120
+ const syntheticStatements = [];
121
+ for (const stmt of typiaTransformed.statements) {
122
+ if (this.ts.isImportDeclaration(stmt)) {
123
+ // Skip type-only imports (import type X from "y")
124
+ if (stmt.importClause?.isTypeOnly) {
125
+ continue;
126
+ }
127
+ syntheticStatements.push(this.recreateImportDeclaration(stmt, factory));
128
+ }
129
+ else {
130
+ syntheticStatements.push(stmt);
131
+ }
132
+ }
133
+ // Update the source file with synthetic imports
134
+ transformedSourceFile = factory.updateSourceFile(typiaTransformed, syntheticStatements, typiaTransformed.isDeclarationFile, typiaTransformed.referencedFiles, typiaTransformed.typeReferenceDirectives, typiaTransformed.hasNoDefaultLib, typiaTransformed.libReferenceDirectives);
109
135
  }
110
136
  catch (error) {
111
137
  console.warn("Failed to apply typia transformer:", sourceFile.fileName, error);
@@ -115,6 +141,34 @@ export class TypicalTransformer {
115
141
  };
116
142
  };
117
143
  }
144
+ /**
145
+ * Re-create an import declaration as a fully synthetic node.
146
+ * This prevents TypeScript from trying to look up symbol bindings
147
+ * and eliding the import as "unused".
148
+ */
149
+ recreateImportDeclaration(importDecl, factory) {
150
+ let importClause;
151
+ if (importDecl.importClause) {
152
+ const clause = importDecl.importClause;
153
+ let namedBindings;
154
+ if (clause.namedBindings) {
155
+ if (this.ts.isNamespaceImport(clause.namedBindings)) {
156
+ // import * as foo from "bar"
157
+ namedBindings = factory.createNamespaceImport(factory.createIdentifier(clause.namedBindings.name.text));
158
+ }
159
+ else if (this.ts.isNamedImports(clause.namedBindings)) {
160
+ // import { foo, bar } from "baz"
161
+ const elements = clause.namedBindings.elements.map((el) => factory.createImportSpecifier(el.isTypeOnly, el.propertyName ? factory.createIdentifier(el.propertyName.text) : undefined, factory.createIdentifier(el.name.text)));
162
+ namedBindings = factory.createNamedImports(elements);
163
+ }
164
+ }
165
+ importClause = factory.createImportClause(clause.isTypeOnly, clause.name ? factory.createIdentifier(clause.name.text) : undefined, namedBindings);
166
+ }
167
+ const moduleSpecifier = this.ts.isStringLiteral(importDecl.moduleSpecifier)
168
+ ? factory.createStringLiteral(importDecl.moduleSpecifier.text)
169
+ : importDecl.moduleSpecifier;
170
+ return factory.createImportDeclaration(importDecl.modifiers, importClause, moduleSpecifier, importDecl.attributes);
171
+ }
118
172
  /**
119
173
  * Transform a single source file with TypeScript AST
120
174
  */
@@ -124,10 +178,12 @@ export class TypicalTransformer {
124
178
  if (!this.shouldTransformFile(sourceFile.fileName)) {
125
179
  return sourceFile; // Return unchanged for excluded files
126
180
  }
127
- // Check if this file has already been transformed by us
128
- const sourceText = sourceFile.getFullText();
129
- if (sourceText.includes('__typical_assert_') || sourceText.includes('__typical_stringify_') || sourceText.includes('__typical_parse_')) {
130
- throw new Error(`File ${sourceFile.fileName} has already been transformed by Typical! Double transformation detected.`);
181
+ if (!sourceFile.fileName.includes('transformer.test.ts')) {
182
+ // Check if this file has already been transformed by us
183
+ const sourceText = sourceFile.getFullText();
184
+ if (sourceText.includes('__typical_' + 'assert_') || sourceText.includes('__typical_' + 'stringify_') || sourceText.includes('__typical_' + 'parse_')) {
185
+ throw new Error(`File ${sourceFile.fileName} has already been transformed by Typical! Double transformation detected.`);
186
+ }
131
187
  }
132
188
  // Reset caches for each file
133
189
  this.typeValidators.clear();
@@ -144,6 +200,16 @@ export class TypicalTransformer {
144
200
  needsTypiaImport = true;
145
201
  if (propertyAccess.name.text === "stringify") {
146
202
  // For stringify, we need to infer the type from the argument
203
+ // First check if the argument type is 'any' - if so, skip transformation
204
+ if (node.arguments.length > 0) {
205
+ const arg = node.arguments[0];
206
+ const argType = typeChecker.getTypeAtLocation(arg);
207
+ const typeFlags = argType.flags;
208
+ // Skip if type is any (1) or unknown (2)
209
+ if (typeFlags & ts.TypeFlags.Any || typeFlags & ts.TypeFlags.Unknown) {
210
+ return node; // Don't transform JSON.stringify for any/unknown types
211
+ }
212
+ }
147
213
  if (this.config.reusableValidators) {
148
214
  // For JSON.stringify, try to infer the type from the argument
149
215
  let typeText = "unknown";
@@ -249,8 +315,26 @@ export class TypicalTransformer {
249
315
  }
250
316
  break;
251
317
  }
318
+ else if (ts.isArrowFunction(parent) && parent.type) {
319
+ // Arrow function with expression body (not block)
320
+ // e.g., (s: string): User => JSON.parse(s)
321
+ targetType = parent.type;
322
+ break;
323
+ }
252
324
  parent = parent.parent;
253
325
  }
326
+ // Skip transformation if target type is any or unknown
327
+ const isAnyOrUnknown = targetType && (targetType.kind === ts.SyntaxKind.AnyKeyword ||
328
+ targetType.kind === ts.SyntaxKind.UnknownKeyword);
329
+ if (isAnyOrUnknown) {
330
+ // Don't transform JSON.parse for any/unknown types
331
+ return node;
332
+ }
333
+ // If we can't determine the target type and there's no explicit type argument,
334
+ // don't transform - we can't validate against an unknown type
335
+ if (!targetType && !node.typeArguments) {
336
+ return node;
337
+ }
254
338
  if (this.config.reusableValidators && targetType) {
255
339
  // Use reusable parser - use typeToString
256
340
  const targetTypeObj = typeChecker.getTypeFromTypeNode(targetType);
@@ -286,21 +370,158 @@ export class TypicalTransformer {
286
370
  }
287
371
  return ctx.ts.visitEachChild(node, visit, ctx.context);
288
372
  };
373
+ // Helper functions for flow analysis
374
+ const getRootIdentifier = (expr) => {
375
+ if (ts.isIdentifier(expr)) {
376
+ return expr.text;
377
+ }
378
+ if (ts.isPropertyAccessExpression(expr)) {
379
+ return getRootIdentifier(expr.expression);
380
+ }
381
+ return undefined;
382
+ };
383
+ const containsReference = (expr, name) => {
384
+ if (ts.isIdentifier(expr) && expr.text === name) {
385
+ return true;
386
+ }
387
+ if (ts.isPropertyAccessExpression(expr)) {
388
+ return containsReference(expr.expression, name);
389
+ }
390
+ if (ts.isElementAccessExpression(expr)) {
391
+ return containsReference(expr.expression, name) ||
392
+ containsReference(expr.argumentExpression, name);
393
+ }
394
+ // Check all children
395
+ let found = false;
396
+ ts.forEachChild(expr, (child) => {
397
+ if (ts.isExpression(child) && containsReference(child, name)) {
398
+ found = true;
399
+ }
400
+ });
401
+ return found;
402
+ };
403
+ // Check if a validated variable has been tainted in the function body
404
+ const isTainted = (varName, body) => {
405
+ let tainted = false;
406
+ // First pass: collect aliases (variables that reference properties of varName)
407
+ // e.g., const addr = user.address; -> addr is an alias
408
+ const aliases = new Set([varName]);
409
+ const collectAliases = (node) => {
410
+ // Look for: const/let x = varName.property or const/let x = varName
411
+ if (ts.isVariableStatement(node)) {
412
+ for (const decl of node.declarationList.declarations) {
413
+ if (ts.isIdentifier(decl.name) && decl.initializer) {
414
+ // Check if initializer is rooted at our tracked variable or any existing alias
415
+ const initRoot = getRootIdentifier(decl.initializer);
416
+ if (initRoot && aliases.has(initRoot)) {
417
+ aliases.add(decl.name.text);
418
+ }
419
+ }
420
+ }
421
+ }
422
+ ts.forEachChild(node, collectAliases);
423
+ };
424
+ collectAliases(body);
425
+ // Helper to check if any alias is involved
426
+ const involvesTrackedVar = (expr) => {
427
+ const root = getRootIdentifier(expr);
428
+ return root !== undefined && aliases.has(root);
429
+ };
430
+ const checkTainting = (node) => {
431
+ if (tainted)
432
+ return; // Early exit if already tainted
433
+ // Reassignment: trackedVar = ...
434
+ if (ts.isBinaryExpression(node) &&
435
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
436
+ ts.isIdentifier(node.left) &&
437
+ aliases.has(node.left.text)) {
438
+ tainted = true;
439
+ return;
440
+ }
441
+ // Property assignment: trackedVar.x = ... or alias.x = ...
442
+ if (ts.isBinaryExpression(node) &&
443
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
444
+ ts.isPropertyAccessExpression(node.left) &&
445
+ involvesTrackedVar(node.left)) {
446
+ tainted = true;
447
+ return;
448
+ }
449
+ // Element assignment: trackedVar[x] = ... or alias[x] = ...
450
+ if (ts.isBinaryExpression(node) &&
451
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
452
+ ts.isElementAccessExpression(node.left) &&
453
+ involvesTrackedVar(node.left.expression)) {
454
+ tainted = true;
455
+ return;
456
+ }
457
+ // Passed as argument to a function: fn(trackedVar) or fn(alias)
458
+ if (ts.isCallExpression(node)) {
459
+ for (const arg of node.arguments) {
460
+ // Check if any tracked variable or alias appears in the argument
461
+ let hasTrackedRef = false;
462
+ const checkRef = (n) => {
463
+ if (ts.isIdentifier(n) && aliases.has(n.text)) {
464
+ hasTrackedRef = true;
465
+ }
466
+ ts.forEachChild(n, checkRef);
467
+ };
468
+ checkRef(arg);
469
+ if (hasTrackedRef) {
470
+ tainted = true;
471
+ return;
472
+ }
473
+ }
474
+ }
475
+ // Method call on the variable: trackedVar.method() or alias.method()
476
+ if (ts.isCallExpression(node) &&
477
+ ts.isPropertyAccessExpression(node.expression) &&
478
+ involvesTrackedVar(node.expression.expression)) {
479
+ tainted = true;
480
+ return;
481
+ }
482
+ // Await expression (async boundary - external code could run)
483
+ if (ts.isAwaitExpression(node)) {
484
+ tainted = true;
485
+ return;
486
+ }
487
+ ts.forEachChild(node, checkTainting);
488
+ };
489
+ checkTainting(body);
490
+ return tainted;
491
+ };
289
492
  const transformFunction = (func) => {
290
493
  const body = func.body;
494
+ // For arrow functions with expression bodies (not blocks),
495
+ // still visit the expression to transform JSON calls etc.
496
+ if (body && !ts.isBlock(body) && ts.isArrowFunction(func)) {
497
+ const visitedBody = ctx.ts.visitNode(body, visit);
498
+ if (visitedBody !== body) {
499
+ return ctx.factory.updateArrowFunction(func, func.modifiers, func.typeParameters, func.parameters, func.type, func.equalsGreaterThanToken, visitedBody);
500
+ }
501
+ return func;
502
+ }
291
503
  if (!body || !ts.isBlock(body))
292
504
  return func;
505
+ // Track validated variables (params and consts with type annotations)
506
+ const validatedVariables = new Map();
293
507
  // Add parameter validation
294
508
  const validationStatements = [];
295
509
  func.parameters.forEach((param) => {
296
510
  if (param.type) {
511
+ // Skip 'any' and 'unknown' types - no point validating them
512
+ if (param.type.kind === ts.SyntaxKind.AnyKeyword ||
513
+ param.type.kind === ts.SyntaxKind.UnknownKeyword) {
514
+ return;
515
+ }
297
516
  const paramName = ts.isIdentifier(param.name)
298
517
  ? param.name.text
299
518
  : "param";
300
519
  const paramIdentifier = ctx.factory.createIdentifier(paramName);
520
+ // Track this parameter as validated for flow analysis
521
+ const paramType = typeChecker.getTypeFromTypeNode(param.type);
522
+ validatedVariables.set(paramName, paramType);
301
523
  if (this.config.reusableValidators) {
302
524
  // Use reusable validators - use typeToString
303
- const paramType = typeChecker.getTypeFromTypeNode(param.type);
304
525
  const typeText = typeChecker.typeToString(paramType);
305
526
  const validatorName = this.getOrCreateValidator(typeText, param.type);
306
527
  const validatorCall = ctx.factory.createCallExpression(ctx.factory.createIdentifier(validatorName), undefined, [paramIdentifier]);
@@ -320,6 +541,27 @@ export class TypicalTransformer {
320
541
  });
321
542
  // First visit all child nodes (including JSON calls) before adding validation
322
543
  const visitedBody = ctx.ts.visitNode(body, visit);
544
+ // Also track const declarations with type annotations as validated
545
+ // (the assignment will be validated, and const can't be reassigned)
546
+ const collectConstDeclarations = (node) => {
547
+ if (ts.isVariableStatement(node)) {
548
+ const isConst = (node.declarationList.flags & ts.NodeFlags.Const) !== 0;
549
+ if (isConst) {
550
+ for (const decl of node.declarationList.declarations) {
551
+ if (decl.type && ts.isIdentifier(decl.name)) {
552
+ // Skip any/unknown types
553
+ if (decl.type.kind !== ts.SyntaxKind.AnyKeyword &&
554
+ decl.type.kind !== ts.SyntaxKind.UnknownKeyword) {
555
+ const constType = typeChecker.getTypeFromTypeNode(decl.type);
556
+ validatedVariables.set(decl.name.text, constType);
557
+ }
558
+ }
559
+ }
560
+ }
561
+ }
562
+ ts.forEachChild(node, collectConstDeclarations);
563
+ };
564
+ collectConstDeclarations(visitedBody);
323
565
  // Transform return statements - use explicit type or infer from type checker
324
566
  let transformedStatements = visitedBody.statements;
325
567
  let returnType = func.type;
@@ -328,11 +570,17 @@ export class TypicalTransformer {
328
570
  // If no explicit return type, try to infer it from the type checker
329
571
  let returnTypeForString;
330
572
  if (!returnType) {
331
- const signature = typeChecker.getSignatureFromDeclaration(func);
332
- if (signature) {
333
- const inferredReturnType = typeChecker.getReturnTypeOfSignature(signature);
334
- returnType = typeChecker.typeToTypeNode(inferredReturnType, func, ts.NodeBuilderFlags.InTypeAlias);
335
- returnTypeForString = inferredReturnType;
573
+ try {
574
+ const signature = typeChecker.getSignatureFromDeclaration(func);
575
+ if (signature) {
576
+ const inferredReturnType = typeChecker.getReturnTypeOfSignature(signature);
577
+ returnType = typeChecker.typeToTypeNode(inferredReturnType, func, ts.NodeBuilderFlags.InTypeAlias);
578
+ returnTypeForString = inferredReturnType;
579
+ }
580
+ }
581
+ catch {
582
+ // Could not infer signature (e.g., untyped arrow function callback)
583
+ // Skip return type validation for this function
336
584
  }
337
585
  }
338
586
  else {
@@ -359,9 +607,39 @@ export class TypicalTransformer {
359
607
  }
360
608
  }
361
609
  }
362
- if (returnType && returnTypeForString) {
610
+ // Skip 'any' and 'unknown' return types - no point validating them
611
+ const isAnyOrUnknownReturn = returnType && (returnType.kind === ts.SyntaxKind.AnyKeyword ||
612
+ returnType.kind === ts.SyntaxKind.UnknownKeyword);
613
+ if (returnType && returnTypeForString && !isAnyOrUnknownReturn) {
363
614
  const returnTransformer = (node) => {
364
615
  if (ts.isReturnStatement(node) && node.expression) {
616
+ // Skip return validation if the expression already contains a __typical _parse_* call
617
+ // since typia.assertParse already validates the parsed data
618
+ const containsTypicalParse = (n) => {
619
+ if (ts.isCallExpression(n) && ts.isIdentifier(n.expression)) {
620
+ const name = n.expression.text;
621
+ if (name.startsWith("__typical" + "_parse_")) {
622
+ return true;
623
+ }
624
+ }
625
+ return ts.forEachChild(n, containsTypicalParse) || false;
626
+ };
627
+ if (containsTypicalParse(node.expression)) {
628
+ return node; // Already validated by parse, skip return validation
629
+ }
630
+ // Flow analysis: Skip return validation if returning a validated variable
631
+ // (or property of one) that hasn't been tainted
632
+ const rootVar = getRootIdentifier(node.expression);
633
+ if (rootVar && validatedVariables.has(rootVar)) {
634
+ // Check if the variable has been tainted (mutated, passed to function, etc.)
635
+ if (!isTainted(rootVar, visitedBody)) {
636
+ // Return expression is rooted at a validated, untainted variable
637
+ // For direct returns (identifier) or property access, we can skip validation
638
+ if (ts.isIdentifier(node.expression) || ts.isPropertyAccessExpression(node.expression)) {
639
+ return node; // Skip validation - already validated and untainted
640
+ }
641
+ }
642
+ }
365
643
  // For async functions, we need to await the expression before validating
366
644
  // because the return expression might be a Promise
367
645
  let expressionToValidate = node.expression;
@@ -451,7 +729,7 @@ export class TypicalTransformer {
451
729
  if (this.typeValidators.has(typeText)) {
452
730
  return this.typeValidators.get(typeText).name;
453
731
  }
454
- const validatorName = `__typical_assert_${this.typeValidators.size}`;
732
+ const validatorName = `__typical_` + `assert_${this.typeValidators.size}`;
455
733
  this.typeValidators.set(typeText, { name: validatorName, typeNode });
456
734
  return validatorName;
457
735
  }
@@ -459,7 +737,7 @@ export class TypicalTransformer {
459
737
  if (this.typeStringifiers.has(typeText)) {
460
738
  return this.typeStringifiers.get(typeText).name;
461
739
  }
462
- const stringifierName = `__typical_stringify_${this.typeStringifiers.size}`;
740
+ const stringifierName = `__typical_` + `stringify_${this.typeStringifiers.size}`;
463
741
  this.typeStringifiers.set(typeText, { name: stringifierName, typeNode });
464
742
  return stringifierName;
465
743
  }
@@ -467,7 +745,7 @@ export class TypicalTransformer {
467
745
  if (this.typeParsers.has(typeText)) {
468
746
  return this.typeParsers.get(typeText).name;
469
747
  }
470
- const parserName = `__typical_parse_${this.typeParsers.size}`;
748
+ const parserName = `__typical_` + `parse_${this.typeParsers.size}`;
471
749
  this.typeParsers.set(typeText, { name: parserName, typeNode });
472
750
  return parserName;
473
751
  }
@@ -1 +1 @@
1
- {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/transformer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"transformer.js","sourceRoot":"","sources":["../../src/transformer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elliots/typical",
3
- "version": "0.1.3",
3
+ "version": "0.1.4",
4
4
  "description": "Runtime safe TypeScript transformer using typia",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -24,6 +24,8 @@
24
24
  "build": "tsc",
25
25
  "dev": "tsc --watch",
26
26
  "test": "rm -f test/test.temp.ts && tsc && node --import ./dist/src/esm-loader-register.js --test dist/test/*.test.js",
27
+ "bench": "cd bench && npm install && npm run bench",
28
+ "test:all": "npm test && npm run bench",
27
29
  "prepublishOnly": "npm run build && npm test",
28
30
  "sample:esm": "cd samples/esm && npm install && npm run start",
29
31
  "sample:ttsx": "cd samples/ttsx && npm install && npm run start",
@@ -58,9 +60,9 @@
58
60
  "strip-json-comments": "5.0.3",
59
61
  "ts-patch": "3.3.0",
60
62
  "tsx": "4.21.0",
63
+ "typescript": "^5.0.0",
61
64
  "typia": "11.0.0",
62
- "unplugin": "2.3.11",
63
- "typescript": "^5.0.0"
65
+ "unplugin": "2.3.11"
64
66
  },
65
67
  "devDependencies": {
66
68
  "@types/node": "22"
@@ -104,29 +104,31 @@ export class TypicalTransformer {
104
104
  return transformedSourceFile;
105
105
  }
106
106
 
107
- // Then apply typia if we added typia calls
107
+ // Apply typia transformation
108
108
  const printer = this.ts.createPrinter();
109
109
  const transformedCode = printer.printFile(transformedSourceFile);
110
110
 
111
+ if (process.env.DEBUG) {
112
+ console.log("TYPICAL: Before typia transform (first 500 chars):", transformedCode.substring(0, 500));
113
+ }
114
+
111
115
  if (transformedCode.includes("typia.")) {
112
116
  try {
113
- // Apply typia transformation to files with typia calls
114
-
115
- // Create a new source file with the transformed code, preserving original filename
117
+ // Create a new source file from our transformed code
116
118
  const newSourceFile = this.ts.createSourceFile(
117
- sourceFile.fileName, // Use original filename to maintain source map references
119
+ sourceFile.fileName,
118
120
  transformedCode,
119
121
  sourceFile.languageVersion,
120
122
  true
121
123
  );
122
124
 
123
- // Create a new program with the transformed source file so typia's type checker works
125
+ // Create a new program with the transformed source file so typia can resolve types
124
126
  const compilerOptions = this.program.getCompilerOptions();
125
127
  const originalSourceFiles = new Map<string, ts.SourceFile>();
126
128
  for (const sf of this.program.getSourceFiles()) {
127
129
  originalSourceFiles.set(sf.fileName, sf);
128
130
  }
129
- // Replace the original source file with the transformed one
131
+ // Replace the original source file with our transformed one
130
132
  originalSourceFiles.set(sourceFile.fileName, newSourceFile);
131
133
 
132
134
  const customHost: ts.CompilerHost = {
@@ -141,7 +143,7 @@ export class TypicalTransformer {
141
143
  true
142
144
  );
143
145
  },
144
- getDefaultLibFileName: () => this.ts.getDefaultLibFilePath(compilerOptions),
146
+ getDefaultLibFileName: (opts) => this.ts.getDefaultLibFilePath(opts),
145
147
  writeFile: () => {},
146
148
  getCurrentDirectory: () => this.ts.sys.getCurrentDirectory(),
147
149
  getCanonicalFileName: (fileName) =>
@@ -158,33 +160,62 @@ export class TypicalTransformer {
158
160
  customHost
159
161
  );
160
162
 
161
- // Create typia transformer with the NEW program that has the transformed source
162
- const typiaTransformer = typiaTransform(
163
+ // Get the bound source file from the new program (has proper symbol tables)
164
+ const boundSourceFile = newProgram.getSourceFile(sourceFile.fileName);
165
+ if (!boundSourceFile) {
166
+ throw new Error(`Failed to get bound source file: ${sourceFile.fileName}`);
167
+ }
168
+
169
+ // Create typia transformer with the NEW program that has our transformed source
170
+ const typiaTransformerFactory = typiaTransform(
163
171
  newProgram,
164
172
  {},
165
173
  {
166
174
  addDiagnostic(diag: ts.Diagnostic) {
167
- console.warn("Typia diagnostic:", diag);
175
+ if (process.env.DEBUG) {
176
+ console.warn("Typia diagnostic:", diag);
177
+ }
168
178
  return 0;
169
179
  },
170
180
  }
171
181
  );
172
182
 
173
- // Apply the transformer with source map preservation
174
- const transformationResult = this.ts.transform(
175
- newSourceFile,
176
- [typiaTransformer],
177
- { ...compilerOptions, sourceMap: true }
178
- );
183
+ // Apply typia's transformer to the bound source file
184
+ const typiaNodeTransformer = typiaTransformerFactory(context);
185
+ const typiaTransformed = typiaNodeTransformer(boundSourceFile);
179
186
 
180
- if (transformationResult.transformed.length > 0) {
181
- const finalTransformed = transformationResult.transformed[0];
182
- transformedSourceFile = finalTransformed;
187
+ if (process.env.DEBUG) {
188
+ const afterTypia = printer.printFile(typiaTransformed);
189
+ console.log("TYPICAL: After typia transform (first 500 chars):", afterTypia.substring(0, 500));
190
+ }
183
191
 
184
- // Typia transformation completed successfully
192
+ // Return the typia-transformed source file.
193
+ // We need to recreate imports as synthetic nodes to prevent import elision,
194
+ // since the imports come from a different program context.
195
+ // Skip type-only imports as they shouldn't appear in JS output.
196
+ const syntheticStatements: ts.Statement[] = [];
197
+ for (const stmt of typiaTransformed.statements) {
198
+ if (this.ts.isImportDeclaration(stmt)) {
199
+ // Skip type-only imports (import type X from "y")
200
+ if (stmt.importClause?.isTypeOnly) {
201
+ continue;
202
+ }
203
+ syntheticStatements.push(this.recreateImportDeclaration(stmt, factory));
204
+ } else {
205
+ syntheticStatements.push(stmt);
206
+ }
185
207
  }
186
208
 
187
- transformationResult.dispose();
209
+ // Update the source file with synthetic imports
210
+ transformedSourceFile = factory.updateSourceFile(
211
+ typiaTransformed,
212
+ syntheticStatements,
213
+ typiaTransformed.isDeclarationFile,
214
+ typiaTransformed.referencedFiles,
215
+ typiaTransformed.typeReferenceDirectives,
216
+ typiaTransformed.hasNoDefaultLib,
217
+ typiaTransformed.libReferenceDirectives
218
+ );
188
219
  } catch (error) {
189
220
  console.warn("Failed to apply typia transformer:", sourceFile.fileName, error);
190
221
  }
@@ -195,6 +226,59 @@ export class TypicalTransformer {
195
226
  };
196
227
  }
197
228
 
229
+ /**
230
+ * Re-create an import declaration as a fully synthetic node.
231
+ * This prevents TypeScript from trying to look up symbol bindings
232
+ * and eliding the import as "unused".
233
+ */
234
+ private recreateImportDeclaration(
235
+ importDecl: ts.ImportDeclaration,
236
+ factory: ts.NodeFactory
237
+ ): ts.ImportDeclaration {
238
+ let importClause: ts.ImportClause | undefined;
239
+
240
+ if (importDecl.importClause) {
241
+ const clause = importDecl.importClause;
242
+ let namedBindings: ts.NamedImportBindings | undefined;
243
+
244
+ if (clause.namedBindings) {
245
+ if (this.ts.isNamespaceImport(clause.namedBindings)) {
246
+ // import * as foo from "bar"
247
+ namedBindings = factory.createNamespaceImport(
248
+ factory.createIdentifier(clause.namedBindings.name.text)
249
+ );
250
+ } else if (this.ts.isNamedImports(clause.namedBindings)) {
251
+ // import { foo, bar } from "baz"
252
+ const elements = clause.namedBindings.elements.map((el) =>
253
+ factory.createImportSpecifier(
254
+ el.isTypeOnly,
255
+ el.propertyName ? factory.createIdentifier(el.propertyName.text) : undefined,
256
+ factory.createIdentifier(el.name.text)
257
+ )
258
+ );
259
+ namedBindings = factory.createNamedImports(elements);
260
+ }
261
+ }
262
+
263
+ importClause = factory.createImportClause(
264
+ clause.isTypeOnly,
265
+ clause.name ? factory.createIdentifier(clause.name.text) : undefined,
266
+ namedBindings
267
+ );
268
+ }
269
+
270
+ const moduleSpecifier = this.ts.isStringLiteral(importDecl.moduleSpecifier)
271
+ ? factory.createStringLiteral(importDecl.moduleSpecifier.text)
272
+ : importDecl.moduleSpecifier;
273
+
274
+ return factory.createImportDeclaration(
275
+ importDecl.modifiers,
276
+ importClause,
277
+ moduleSpecifier,
278
+ importDecl.attributes
279
+ );
280
+ }
281
+
198
282
  /**
199
283
  * Transform a single source file with TypeScript AST
200
284
  */
@@ -210,10 +294,12 @@ export class TypicalTransformer {
210
294
  return sourceFile; // Return unchanged for excluded files
211
295
  }
212
296
 
213
- // Check if this file has already been transformed by us
214
- const sourceText = sourceFile.getFullText();
215
- if (sourceText.includes('__typical_assert_') || sourceText.includes('__typical_stringify_') || sourceText.includes('__typical_parse_')) {
216
- throw new Error(`File ${sourceFile.fileName} has already been transformed by Typical! Double transformation detected.`);
297
+ if (!sourceFile.fileName.includes('transformer.test.ts')) {
298
+ // Check if this file has already been transformed by us
299
+ const sourceText = sourceFile.getFullText();
300
+ if (sourceText.includes('__typical_' + 'assert_') || sourceText.includes('__typical_' + 'stringify_') || sourceText.includes('__typical_' + 'parse_')) {
301
+ throw new Error(`File ${sourceFile.fileName} has already been transformed by Typical! Double transformation detected.`);
302
+ }
217
303
  }
218
304
 
219
305
  // Reset caches for each file
@@ -238,6 +324,17 @@ export class TypicalTransformer {
238
324
 
239
325
  if (propertyAccess.name.text === "stringify") {
240
326
  // For stringify, we need to infer the type from the argument
327
+ // First check if the argument type is 'any' - if so, skip transformation
328
+ if (node.arguments.length > 0) {
329
+ const arg = node.arguments[0];
330
+ const argType = typeChecker.getTypeAtLocation(arg);
331
+ const typeFlags = argType.flags;
332
+ // Skip if type is any (1) or unknown (2)
333
+ if (typeFlags & ts.TypeFlags.Any || typeFlags & ts.TypeFlags.Unknown) {
334
+ return node; // Don't transform JSON.stringify for any/unknown types
335
+ }
336
+ }
337
+
241
338
  if (this.config.reusableValidators) {
242
339
  // For JSON.stringify, try to infer the type from the argument
243
340
  let typeText = "unknown";
@@ -385,10 +482,32 @@ export class TypicalTransformer {
385
482
  funcParent = funcParent.parent;
386
483
  }
387
484
  break;
485
+ } else if (ts.isArrowFunction(parent) && parent.type) {
486
+ // Arrow function with expression body (not block)
487
+ // e.g., (s: string): User => JSON.parse(s)
488
+ targetType = parent.type;
489
+ break;
388
490
  }
389
491
  parent = parent.parent;
390
492
  }
391
493
 
494
+ // Skip transformation if target type is any or unknown
495
+ const isAnyOrUnknown = targetType && (
496
+ targetType.kind === ts.SyntaxKind.AnyKeyword ||
497
+ targetType.kind === ts.SyntaxKind.UnknownKeyword
498
+ );
499
+
500
+ if (isAnyOrUnknown) {
501
+ // Don't transform JSON.parse for any/unknown types
502
+ return node;
503
+ }
504
+
505
+ // If we can't determine the target type and there's no explicit type argument,
506
+ // don't transform - we can't validate against an unknown type
507
+ if (!targetType && !node.typeArguments) {
508
+ return node;
509
+ }
510
+
392
511
  if (this.config.reusableValidators && targetType) {
393
512
  // Use reusable parser - use typeToString
394
513
  const targetTypeObj = typeChecker.getTypeFromTypeNode(targetType);
@@ -446,25 +565,189 @@ export class TypicalTransformer {
446
565
  return ctx.ts.visitEachChild(node, visit, ctx.context);
447
566
  };
448
567
 
568
+ // Helper functions for flow analysis
569
+ const getRootIdentifier = (expr: ts.Expression): string | undefined => {
570
+ if (ts.isIdentifier(expr)) {
571
+ return expr.text;
572
+ }
573
+ if (ts.isPropertyAccessExpression(expr)) {
574
+ return getRootIdentifier(expr.expression);
575
+ }
576
+ return undefined;
577
+ };
578
+
579
+ const containsReference = (expr: ts.Expression, name: string): boolean => {
580
+ if (ts.isIdentifier(expr) && expr.text === name) {
581
+ return true;
582
+ }
583
+ if (ts.isPropertyAccessExpression(expr)) {
584
+ return containsReference(expr.expression, name);
585
+ }
586
+ if (ts.isElementAccessExpression(expr)) {
587
+ return containsReference(expr.expression, name) ||
588
+ containsReference(expr.argumentExpression as ts.Expression, name);
589
+ }
590
+ // Check all children
591
+ let found = false;
592
+ ts.forEachChild(expr, (child) => {
593
+ if (ts.isExpression(child) && containsReference(child, name)) {
594
+ found = true;
595
+ }
596
+ });
597
+ return found;
598
+ };
599
+
600
+ // Check if a validated variable has been tainted in the function body
601
+ const isTainted = (varName: string, body: ts.Block): boolean => {
602
+ let tainted = false;
603
+
604
+ // First pass: collect aliases (variables that reference properties of varName)
605
+ // e.g., const addr = user.address; -> addr is an alias
606
+ const aliases = new Set<string>([varName]);
607
+
608
+ const collectAliases = (node: ts.Node): void => {
609
+ // Look for: const/let x = varName.property or const/let x = varName
610
+ if (ts.isVariableStatement(node)) {
611
+ for (const decl of node.declarationList.declarations) {
612
+ if (ts.isIdentifier(decl.name) && decl.initializer) {
613
+ // Check if initializer is rooted at our tracked variable or any existing alias
614
+ const initRoot = getRootIdentifier(decl.initializer);
615
+ if (initRoot && aliases.has(initRoot)) {
616
+ aliases.add(decl.name.text);
617
+ }
618
+ }
619
+ }
620
+ }
621
+ ts.forEachChild(node, collectAliases);
622
+ };
623
+ collectAliases(body);
624
+
625
+ // Helper to check if any alias is involved
626
+ const involvesTrackedVar = (expr: ts.Expression): boolean => {
627
+ const root = getRootIdentifier(expr);
628
+ return root !== undefined && aliases.has(root);
629
+ };
630
+
631
+ const checkTainting = (node: ts.Node): void => {
632
+ if (tainted) return; // Early exit if already tainted
633
+
634
+ // Reassignment: trackedVar = ...
635
+ if (ts.isBinaryExpression(node) &&
636
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
637
+ ts.isIdentifier(node.left) &&
638
+ aliases.has(node.left.text)) {
639
+ tainted = true;
640
+ return;
641
+ }
642
+
643
+ // Property assignment: trackedVar.x = ... or alias.x = ...
644
+ if (ts.isBinaryExpression(node) &&
645
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
646
+ ts.isPropertyAccessExpression(node.left) &&
647
+ involvesTrackedVar(node.left)) {
648
+ tainted = true;
649
+ return;
650
+ }
651
+
652
+ // Element assignment: trackedVar[x] = ... or alias[x] = ...
653
+ if (ts.isBinaryExpression(node) &&
654
+ node.operatorToken.kind === ts.SyntaxKind.EqualsToken &&
655
+ ts.isElementAccessExpression(node.left) &&
656
+ involvesTrackedVar(node.left.expression)) {
657
+ tainted = true;
658
+ return;
659
+ }
660
+
661
+ // Passed as argument to a function: fn(trackedVar) or fn(alias)
662
+ if (ts.isCallExpression(node)) {
663
+ for (const arg of node.arguments) {
664
+ // Check if any tracked variable or alias appears in the argument
665
+ let hasTrackedRef = false;
666
+ const checkRef = (n: ts.Node): void => {
667
+ if (ts.isIdentifier(n) && aliases.has(n.text)) {
668
+ hasTrackedRef = true;
669
+ }
670
+ ts.forEachChild(n, checkRef);
671
+ };
672
+ checkRef(arg);
673
+ if (hasTrackedRef) {
674
+ tainted = true;
675
+ return;
676
+ }
677
+ }
678
+ }
679
+
680
+ // Method call on the variable: trackedVar.method() or alias.method()
681
+ if (ts.isCallExpression(node) &&
682
+ ts.isPropertyAccessExpression(node.expression) &&
683
+ involvesTrackedVar(node.expression.expression)) {
684
+ tainted = true;
685
+ return;
686
+ }
687
+
688
+ // Await expression (async boundary - external code could run)
689
+ if (ts.isAwaitExpression(node)) {
690
+ tainted = true;
691
+ return;
692
+ }
693
+
694
+ ts.forEachChild(node, checkTainting);
695
+ };
696
+
697
+ checkTainting(body);
698
+ return tainted;
699
+ };
700
+
449
701
  const transformFunction = (
450
702
  func: ts.FunctionDeclaration | ts.ArrowFunction | ts.MethodDeclaration
451
703
  ): ts.Node => {
452
704
  const body = func.body;
705
+
706
+ // For arrow functions with expression bodies (not blocks),
707
+ // still visit the expression to transform JSON calls etc.
708
+ if (body && !ts.isBlock(body) && ts.isArrowFunction(func)) {
709
+ const visitedBody = ctx.ts.visitNode(body, visit) as ts.Expression;
710
+ if (visitedBody !== body) {
711
+ return ctx.factory.updateArrowFunction(
712
+ func,
713
+ func.modifiers,
714
+ func.typeParameters,
715
+ func.parameters,
716
+ func.type,
717
+ func.equalsGreaterThanToken,
718
+ visitedBody
719
+ );
720
+ }
721
+ return func;
722
+ }
723
+
453
724
  if (!body || !ts.isBlock(body)) return func;
454
725
 
726
+ // Track validated variables (params and consts with type annotations)
727
+ const validatedVariables = new Map<string, ts.Type>();
728
+
455
729
  // Add parameter validation
456
730
  const validationStatements: ts.Statement[] = [];
457
731
 
458
732
  func.parameters.forEach((param) => {
459
733
  if (param.type) {
734
+ // Skip 'any' and 'unknown' types - no point validating them
735
+ if (param.type.kind === ts.SyntaxKind.AnyKeyword ||
736
+ param.type.kind === ts.SyntaxKind.UnknownKeyword) {
737
+ return;
738
+ }
739
+
460
740
  const paramName = ts.isIdentifier(param.name)
461
741
  ? param.name.text
462
742
  : "param";
463
743
  const paramIdentifier = ctx.factory.createIdentifier(paramName);
464
744
 
745
+ // Track this parameter as validated for flow analysis
746
+ const paramType = typeChecker.getTypeFromTypeNode(param.type);
747
+ validatedVariables.set(paramName, paramType);
748
+
465
749
  if (this.config.reusableValidators) {
466
750
  // Use reusable validators - use typeToString
467
- const paramType = typeChecker.getTypeFromTypeNode(param.type);
468
751
  const typeText = typeChecker.typeToString(paramType);
469
752
  const validatorName = this.getOrCreateValidator(
470
753
  typeText,
@@ -504,6 +787,28 @@ export class TypicalTransformer {
504
787
  // First visit all child nodes (including JSON calls) before adding validation
505
788
  const visitedBody = ctx.ts.visitNode(body, visit) as ts.Block;
506
789
 
790
+ // Also track const declarations with type annotations as validated
791
+ // (the assignment will be validated, and const can't be reassigned)
792
+ const collectConstDeclarations = (node: ts.Node): void => {
793
+ if (ts.isVariableStatement(node)) {
794
+ const isConst = (node.declarationList.flags & ts.NodeFlags.Const) !== 0;
795
+ if (isConst) {
796
+ for (const decl of node.declarationList.declarations) {
797
+ if (decl.type && ts.isIdentifier(decl.name)) {
798
+ // Skip any/unknown types
799
+ if (decl.type.kind !== ts.SyntaxKind.AnyKeyword &&
800
+ decl.type.kind !== ts.SyntaxKind.UnknownKeyword) {
801
+ const constType = typeChecker.getTypeFromTypeNode(decl.type);
802
+ validatedVariables.set(decl.name.text, constType);
803
+ }
804
+ }
805
+ }
806
+ }
807
+ }
808
+ ts.forEachChild(node, collectConstDeclarations);
809
+ };
810
+ collectConstDeclarations(visitedBody);
811
+
507
812
  // Transform return statements - use explicit type or infer from type checker
508
813
  let transformedStatements = visitedBody.statements;
509
814
  let returnType = func.type;
@@ -516,15 +821,20 @@ export class TypicalTransformer {
516
821
  // If no explicit return type, try to infer it from the type checker
517
822
  let returnTypeForString: ts.Type | undefined;
518
823
  if (!returnType) {
519
- const signature = typeChecker.getSignatureFromDeclaration(func);
520
- if (signature) {
521
- const inferredReturnType = typeChecker.getReturnTypeOfSignature(signature);
522
- returnType = typeChecker.typeToTypeNode(
523
- inferredReturnType,
524
- func,
525
- ts.NodeBuilderFlags.InTypeAlias
526
- );
527
- returnTypeForString = inferredReturnType;
824
+ try {
825
+ const signature = typeChecker.getSignatureFromDeclaration(func);
826
+ if (signature) {
827
+ const inferredReturnType = typeChecker.getReturnTypeOfSignature(signature);
828
+ returnType = typeChecker.typeToTypeNode(
829
+ inferredReturnType,
830
+ func,
831
+ ts.NodeBuilderFlags.InTypeAlias
832
+ );
833
+ returnTypeForString = inferredReturnType;
834
+ }
835
+ } catch {
836
+ // Could not infer signature (e.g., untyped arrow function callback)
837
+ // Skip return type validation for this function
528
838
  }
529
839
  } else {
530
840
  // For explicit return types, get the Type from the TypeNode
@@ -555,9 +865,44 @@ export class TypicalTransformer {
555
865
  }
556
866
  }
557
867
 
558
- if (returnType && returnTypeForString) {
868
+ // Skip 'any' and 'unknown' return types - no point validating them
869
+ const isAnyOrUnknownReturn = returnType && (
870
+ returnType.kind === ts.SyntaxKind.AnyKeyword ||
871
+ returnType.kind === ts.SyntaxKind.UnknownKeyword
872
+ );
873
+
874
+ if (returnType && returnTypeForString && !isAnyOrUnknownReturn) {
559
875
  const returnTransformer = (node: ts.Node): ts.Node => {
560
876
  if (ts.isReturnStatement(node) && node.expression) {
877
+ // Skip return validation if the expression already contains a __typical _parse_* call
878
+ // since typia.assertParse already validates the parsed data
879
+ const containsTypicalParse = (n: ts.Node): boolean => {
880
+ if (ts.isCallExpression(n) && ts.isIdentifier(n.expression)) {
881
+ const name = n.expression.text;
882
+ if (name.startsWith("__typical" + "_parse_")) {
883
+ return true;
884
+ }
885
+ }
886
+ return ts.forEachChild(n, containsTypicalParse) || false;
887
+ };
888
+ if (containsTypicalParse(node.expression)) {
889
+ return node; // Already validated by parse, skip return validation
890
+ }
891
+
892
+ // Flow analysis: Skip return validation if returning a validated variable
893
+ // (or property of one) that hasn't been tainted
894
+ const rootVar = getRootIdentifier(node.expression);
895
+ if (rootVar && validatedVariables.has(rootVar)) {
896
+ // Check if the variable has been tainted (mutated, passed to function, etc.)
897
+ if (!isTainted(rootVar, visitedBody)) {
898
+ // Return expression is rooted at a validated, untainted variable
899
+ // For direct returns (identifier) or property access, we can skip validation
900
+ if (ts.isIdentifier(node.expression) || ts.isPropertyAccessExpression(node.expression)) {
901
+ return node; // Skip validation - already validated and untainted
902
+ }
903
+ }
904
+ }
905
+
561
906
  // For async functions, we need to await the expression before validating
562
907
  // because the return expression might be a Promise
563
908
  let expressionToValidate = node.expression;
@@ -746,7 +1091,7 @@ export class TypicalTransformer {
746
1091
  return this.typeValidators.get(typeText)!.name;
747
1092
  }
748
1093
 
749
- const validatorName = `__typical_assert_${this.typeValidators.size}`;
1094
+ const validatorName = `__typical_` + `assert_${this.typeValidators.size}`;
750
1095
  this.typeValidators.set(typeText, { name: validatorName, typeNode });
751
1096
  return validatorName;
752
1097
  }
@@ -759,7 +1104,7 @@ export class TypicalTransformer {
759
1104
  return this.typeStringifiers.get(typeText)!.name;
760
1105
  }
761
1106
 
762
- const stringifierName = `__typical_stringify_${this.typeStringifiers.size}`;
1107
+ const stringifierName = `__typical_` + `stringify_${this.typeStringifiers.size}`;
763
1108
  this.typeStringifiers.set(typeText, { name: stringifierName, typeNode });
764
1109
  return stringifierName;
765
1110
  }
@@ -769,7 +1114,7 @@ export class TypicalTransformer {
769
1114
  return this.typeParsers.get(typeText)!.name;
770
1115
  }
771
1116
 
772
- const parserName = `__typical_parse_${this.typeParsers.size}`;
1117
+ const parserName = `__typical_` + `parse_${this.typeParsers.size}`;
773
1118
  this.typeParsers.set(typeText, { name: parserName, typeNode });
774
1119
  return parserName;
775
1120
  }
package/src/tsc-plugin.ts CHANGED
@@ -6,7 +6,7 @@ import { loadConfig } from './config.js';
6
6
  export default function (program: ts.Program, pluginConfig: PluginConfig, { ts: tsInstance }: TransformerExtras) {
7
7
  const config = loadConfig();
8
8
  const transformer = new TypicalTransformer(config, program, tsInstance);
9
-
9
+
10
10
  // Create the typical transformer with typia integration
11
11
  return transformer.getTransformer(true);
12
12
  }