-
Notifications
You must be signed in to change notification settings - Fork 330
Maximum call stack size exceeded #324
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
Could you describe what you’re trying to do, when the error occurs and what you have tried to fix it? |
hey @domoritz, I am having the same issue In my case, the problems occur when I use the types from React. run.ts import { resolve } from "path";
import * as TJS from "typescript-json-schema";
const compilerOptions = {
"target": "es5",
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"lib": [
"dom",
"es2017",
"es2015"
],
"types": [
"react"
],
"declaration": true,
"jsx": "react",
"sourceMap": true,
"strict": true,
"strictNullChecks": false,
"noImplicitAny": true,
"esModuleInterop": true,
"baseUrl": "./",
"outDir": "lib",
};
// optionally pass argument to schema generator
const settings: TJS.PartialArgs = {};
const program = TJS.getProgramFromFiles([resolve("src/Elements/Button/interface.ts")], compilerOptions);
const generator = TJS.buildGenerator(program, settings);
generator.getSchemaForSymbol("ButtonInterface"); ButtonInterface with react import React from 'react';
export type ButtonInterface =
React.ButtonHTMLAttributes<React.ReactNode> &
{
className?: string;
text?: string;
full?: boolean;
small?: boolean;
outline?: boolean;
noUnderline?: boolean;
} ButtonInterface without react export type ButtonInterface =
{
className?: string;
text?: string;
full?: boolean;
small?: boolean;
outline?: boolean;
noUnderline?: boolean;
} |
Excellent. Those details will help with debugging if someone wants to pick this up. For now, I suggest that you increase the stack size for node to or try https://github.com/vega/ts-json-schema-generator. |
@domoritz thank you for your quick answer, I tried to increase the stack size but now I got this error: [1] 7595 segmentation fault (core dumped) node --stack_size=14000 test.js I tried to use ts-json-schema-generator before, but when I add react I got: Error: Unknown node "JSXElementConstructor<any>" (ts.SyntaxKind = 167) at ..... I also comment at issue #209 |
Thanks for trying. I don’t have the cycles to look into your specific case right now but I hope you find a solution that works for you. |
i have this issue too. i think it may have something to do w/ recursive types, which are now permitted in typescript? i debugged and found the stack exploding trying to model [NUMERIC_INDEX_PATTERN]: this.getTypeDefinition(arrayType) |
i moved my typedef as follows out of the compile tree, and it began working again: export type ExtendedWindow = (typeof window) & {
someRandomGlobalOnTheWindow: bool
} slap that little buddy into this and watch her break down! |
That’s a super useful test case. Thanks for sharing it. |
Repro: interface Test {
children: TestChildren;
}
type TestChildren = TestChild | Array<TestChild | TestChildren>;
interface TestChild {
type: "child";
} npx typescript-json-schema tsconfig.json Test --include repro.ts
|
Works with really advanced React types! Check it here https://github.com/Guidewire/ts-to-json-schema-tests/blob/main/schemas/typescript-json-schema-ExampleProps.json yeah it's huge and you (we) probably don't want it but at least it works |
ts-node t.ts
`xxx\node_modules_typescript@3.7.2@typescript\lib\typescript.js:35954
function trySymbolTable(symbols, ignoreQualification) {
^
RangeError: Maximum call stack size exceeded
`
// t.ts
const path = require('path')
const TJS = require('typescript-json-schema')
const glob = require('glob')
// optionally pass argument to schema generator
const settings = {
required: true,
uniqueNames: true,
out: './a.json',
strictNullChecks: true,
include: ['**/*schema.ts'],
}
TJS.exec('./tsconfig.json', '*', settings)
// tsconfig.json
`{
"compilerOptions": {
/* Basic Options /
// "incremental": true, / Enable incremental compilation /
"target": "es5", / Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. /
"module": "ESNext", / Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. /
// "lib": [], / Specify library files to be included in the compilation. /
"allowJs": true, / Allow javascript files to be compiled. /
// "checkJs": true, / Report errors in .js files. /
"jsx": "preserve", / Specify JSX code generation: 'preserve', 'react-native', or 'react'. /
// "declaration": true, / Generates corresponding '.d.ts' file. /
// "declarationMap": true, / Generates a sourcemap for each corresponding '.d.ts' file. /
"sourceMap": true, / Generates corresponding '.map' file. /
// "outFile": "./", / Concatenate and emit output to single file. /
// "outDir": "./", / Redirect output structure to the directory. /
// "rootDir": "./", / Specify the root directory of input files. Use to control the output directory structure with --outDir. /
// "composite": true, / Enable project compilation /
// "tsBuildInfoFile": "./", / Specify file to store incremental compilation information /
// "removeComments": true, / Do not emit comments to output. /
// "noEmit": true, / Do not emit outputs. /
// "importHelpers": true, / Import emit helpers from 'tslib'. /
// "downlevelIteration": true, / Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. /
// "isolatedModules": true, / Transpile each file as a separate module (similar to 'ts.transpileModule'). */
}
}
`
The text was updated successfully, but these errors were encountered: