@xyd-js/sources 0.0.1-xyd.0
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/CHANGELOG.md +9 -0
- package/README.md +3 -0
- package/TODO.md +6 -0
- package/dist/example.cjs +642 -0
- package/dist/example.cjs.map +1 -0
- package/dist/example.d.cts +2 -0
- package/dist/example.d.ts +2 -0
- package/dist/example.js +618 -0
- package/dist/example.js.map +1 -0
- package/dist/index.cjs +647 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +83 -0
- package/dist/index.d.ts +83 -0
- package/dist/index.js +612 -0
- package/dist/index.js.map +1 -0
- package/docs/README.md +20 -0
- package/docs/classes/ExampleClass.md +35 -0
- package/docs/functions/gqlSchemaToReferences.md +27 -0
- package/docs/functions/helloWorld.md +17 -0
- package/docs/functions/helloWorldV2.md +33 -0
- package/docs/functions/helloWorldV3.md +35 -0
- package/docs.json +551 -0
- package/example/package-a/package.json +4 -0
- package/example/package-a/src/index.ts +56 -0
- package/example/package-a/tsconfig.json +23 -0
- package/example/package-b/package.json +7 -0
- package/example/package-b/src/billing.ts +193 -0
- package/example/package-b/src/index.ts +8 -0
- package/example/package-b/tsconfig.json +20 -0
- package/package.json +22 -0
- package/references_todo.json +220 -0
- package/src/SignatureText.ts +214 -0
- package/src/TypeDocTransformer.ts +572 -0
- package/src/index.ts +45 -0
- package/test-cmd/index.ts +62 -0
- package/tsconfig.json +30 -0
- package/tsup.config.ts +39 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../test-cmd/index.ts","../src/TypeDocTransformer.ts","../src/SignatureText.ts"],"sourcesContent":["import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nimport * as TypeDoc from 'typedoc';\nimport type {TypeDocOptions} from \"typedoc\";\n//@ts-ignore\nimport {PluginOptions} from 'typedoc-plugin-markdown'\n\nimport {typedocToUniform} from \"../src/TypeDocTransformer\"\n\nasync function generateDocs() {\n const options = {\n entryPoints: [\n \"example/package-a\",\n // \"example/package-b\",\n ],\n plugin: [\n \"typedoc-plugin-markdown\"\n ],\n readme: \"none\",\n disableSources: true,\n entryPointStrategy: TypeDoc.EntryPointStrategy.Packages,\n\n indexFormat: \"table\",\n useCodeBlocks: true,\n } satisfies Partial<PluginOptions | TypeDocOptions>;\n\n const app = await TypeDoc.Application.bootstrapWithPlugins(options);\n const project = await app.convert()\n\n if (!project) {\n throw new Error('Failed to generate documentation.');\n }\n\n const jsonOutput = await app.serializer.projectToObject(project, path.resolve(\"./example\"));\n fs.writeFileSync('docs.json', JSON.stringify(jsonOutput, null, 2));\n\n await app.generateOutputs(project);\n // await app.generateJson(project, 'docs.json');\n\n {\n const projectRaw = fs.readFileSync('docs.json', 'utf-8');\n const projectJson = JSON.parse(projectRaw);\n const ref = typedocToUniform(\n path.resolve(\"./example\"),\n projectJson\n );\n\n fs.writeFileSync('references_todo.json', JSON.stringify(ref, null, 2));\n }\n\n // {\n // const loader = new SignatureTextLoader(\n // path.resolve('./example/package-a/src/index.ts')\n // );\n //\n // // TODO: some issues if line number higher than file lines\n // const signature = signatureTextByLine(loader, 15);\n // }\n}\n\ngenerateDocs().catch(console.error);","import * as fs from \"node:fs\";\nimport * as path from \"node:path\";\n\nimport type {Reference, Definition} from \"@xyd-js/uniform\";\n\nimport type {\n JSONOutput,\n ContainerReflection,\n DeclarationReflection,\n SomeType,\n ReflectionSymbolId,\n Comment,\n} from 'typedoc';\nimport {ReflectionKind} from \"typedoc\";\n\nimport {\n MultiSignatureLoader,\n signatureTextByLine,\n signatureSourceCodeByLine\n} from \"./SignatureText\";\n\nclass TypeDocSignatureTextLoader extends MultiSignatureLoader {\n constructor(\n private project: JSONOutput.ProjectReflection,\n private packagePathMap: { [id: number]: string }\n ) {\n super();\n }\n\n public signatureText(\n id: number,\n line: number\n ) {\n const loader = this.getSignatuerLoader(id)\n if (!loader) {\n return\n }\n\n const signTxt = signatureTextByLine(loader, line)\n if (!signTxt) {\n console.warn('(TypeDocSignatureTextLoader.signatureText): Signature text is empty', id)\n return\n }\n\n return signTxt\n }\n\n public signatureSourceCode(\n id: number,\n line: number\n ) {\n const loader = this.getSignatuerLoader(id)\n if (!loader) {\n return\n }\n\n const sourceCode = signatureSourceCodeByLine(loader, line)\n if (!sourceCode) {\n console.warn('(TypeDocSignatureTextLoader.signatureSourceCode): Source code is empty', id)\n return\n }\n\n return sourceCode\n }\n\n private getSignatuerLoader(id: number) {\n const symbolMap = this.project.symbolIdMap[id] as ReflectionSymbolId\n if (!symbolMap) {\n console.warn('(TypeDocSignatureTextLoader.getSignatuerLoader): Symbol not found', id)\n return\n }\n\n const fullPath = this.packagePathMap[id]\n if (!fullPath) {\n console.warn('(TypeDocSignatureTextLoader.getSignatuerLoader): Package path not found for symbol', symbolMap.packageName)\n return\n }\n\n const loader = this.load(fullPath)\n if (!loader) {\n console.warn('(TypeDocSignatureTextLoader.getSignatuerLoader): Loader not found', fullPath)\n return\n }\n\n return loader\n }\n}\n\nclass Transformer {\n public packagePathMap: { [id: number]: string } = {};\n public signatureTextLoader!: TypeDocSignatureTextLoader;\n\n constructor(\n private rootPath: string,\n protected project: JSONOutput.ProjectReflection,\n protected references: Reference[] = []\n ) {\n const packagePathMap = this.createPackagePathMap()\n if (packagePathMap) {\n this.packagePathMap = packagePathMap\n }\n }\n\n private createPackagePathMap() {\n const packagePathMap: { [id: number]: string } = {};\n const packageJsonPaths = this.findPackageJsonPaths(this.rootPath);\n\n if (!packageJsonPaths.length) {\n console.warn('(Transformer.createPackagePathMap): No package.json found in rootPath', this.rootPath)\n return {packageMap: null, moduleRootMap: null}\n }\n\n for (const packageJsonPath of packageJsonPaths) {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));\n const packageName = packageJson.name;\n const moduleRoot = path.dirname(packageJsonPath);\n\n if (!packageName) {\n console.warn('(Transformer.createPackagePathMap): Package name not found in package.json', packageJsonPath)\n continue\n }\n\n for (const id in this.project.symbolIdMap) {\n const symbolMap = this.project.symbolIdMap[id] as ReflectionSymbolId;\n\n if (symbolMap.packageName === packageName) {\n const fullPath = path.join(moduleRoot, symbolMap.packagePath);\n packagePathMap[Number.parseInt(id)] = fullPath;\n }\n }\n }\n\n return packagePathMap\n }\n\n private findPackageJsonPaths(dir: string): string[] {\n let results: string[] = [];\n const list = fs.readdirSync(dir);\n\n for (const file of list) {\n const filePath = path.join(dir, file);\n const stat = fs.statSync(filePath);\n if (stat && stat.isDirectory()) {\n results = results.concat(this.findPackageJsonPaths(filePath));\n } else if (file === 'package.json') {\n results.push(filePath);\n }\n }\n return results;\n }\n}\n\nexport function typedocToUniform(\n rootPath: string,\n project: JSONOutput.ProjectReflection\n): Reference[] {\n const references: Reference[] = []\n const transformer = new Transformer(\n rootPath,\n project,\n references\n )\n const signatureTextLoader = new TypeDocSignatureTextLoader(\n project,\n transformer.packagePathMap,\n )\n transformer.signatureTextLoader = signatureTextLoader\n\n // TODO: in the future abstraction?\n if (project.kind !== ReflectionKind.Project) {\n throw new Error('Project reflection expected');\n }\n\n for (const child of project.children || []) {\n if (!(\"kind\" in child)) {\n throw new Error('(typedocToUniform): Child reflection expected in project childrens');\n }\n\n if (typeof child.kind != \"number\") {\n throw new Error('(typedocToUniform): Child reflection kind expected to be a number');\n }\n\n if (!(child.kind satisfies ReflectionKind)) {\n throw new Error('(typedocToUniform): Child reflection kind expected to be a valid ReflectionKind');\n }\n\n const kind = child.kind as ReflectionKind\n\n switch (kind) {\n case ReflectionKind.Module: {\n const container = child as ContainerReflection\n\n for (const group of container.children || []) {\n const ref = typedocGroupToUniform.call(\n transformer,\n group\n )\n\n if (!ref) {\n continue\n }\n\n ref.context = {\n ...ref.context,\n package: container.name,\n }\n references.push(ref)\n }\n\n break\n }\n\n case ReflectionKind.Function:\n case ReflectionKind.Class: {\n if (!(child satisfies DeclarationReflection)) {\n throw new Error('(typedocToUniform): Function reflection expected to be a DeclarationReflection');\n }\n\n const ref = typedocGroupToUniform.call(\n transformer,\n child as DeclarationReflection\n )\n\n if (!ref) {\n break\n }\n\n ref.context = {\n ...ref.context,\n package: project.name,\n }\n references.push(ref)\n\n break\n }\n\n default: {\n console.warn(\"(typedocToUniform): Another children project kind not supported\", child.kind)\n }\n }\n }\n\n return references\n}\n\nfunction typedocGroupToUniform(\n this: Transformer,\n group: DeclarationReflection\n) {\n let ref: Reference | undefined\n\n switch (group.kind) {\n case ReflectionKind.Class: {\n ref = jsClassToUniformRef.call(this, group)\n\n break\n }\n case ReflectionKind.Function: {\n ref = jsFunctionToUniformRef.call(this, group)\n\n break\n }\n default: {\n console.warn('(typedocGroupToUniform): Unhandled reflection kind', group.kind)\n }\n }\n\n return ref\n}\n\nfunction jsClassToUniformRef(\n this: Transformer,\n dec: DeclarationReflection\n) {\n const definitions: Definition[] = []\n\n const ref: Reference = {\n title: `Class ${dec.name}`,\n canonical: `class-${dec.name}`,\n description: '',\n context: {},\n examples: {\n groups: []\n },\n definitions\n }\n\n const declarationCtx = declarationUniformContext.call(this, dec)\n if (declarationCtx) {\n ref.context = {\n ...ref.context,\n ...declarationCtx\n }\n }\n\n if (dec.comment) {\n const description = commentToUniform(dec.comment)\n const group = (declarationCtx?.packageName.split('/') || [])\n .map(name => `\"${name}\"`)\n .join(\",\")\n\n ref.description = `---\ntitle: ${dec.name} \ngroup: [${group}, Classes]\n---\n${description}`\n }\n\n // handle constructor\n {\n const constructor = dec.children?.find(child => child.name === 'constructor')\n if (constructor?.signatures?.[0]) {\n const constructorDef: Definition = {\n title: 'Constructor',\n properties: []\n }\n\n const constructorSign = constructor.signatures[0]\n for (const param of constructorSign.parameters || []) {\n if (!param.type) {\n console.warn('(jsClassToUniformRef): Constructor parameter type not found', param.name)\n continue\n }\n\n let description = \"\"\n if (param.comment) {\n description = commentToUniform(param.comment)\n }\n constructorDef.properties.push({\n name: param.name,\n type: someTypeToUniformType(param.type),\n description\n })\n }\n definitions.push(constructorDef)\n }\n }\n\n // handle methods\n {\n const methods = dec.children?.filter(child =>\n child.kind === ReflectionKind.Method && child.name !== 'constructor'\n ) || []\n\n if (methods.length > 0) {\n const methodsDef: Definition = {\n title: 'Methods',\n properties: []\n }\n\n for (const method of methods) {\n if (!method.signatures?.[0]) continue\n\n const methodSign = method.signatures[0]\n let methodDesc = \"\"\n if (methodSign.comment) {\n methodDesc = commentToUniform(methodSign.comment)\n }\n\n methodsDef.properties.push({\n name: method.name,\n type: methodSign.type ? someTypeToUniformType(methodSign.type) : \"void\",\n description: methodDesc\n })\n }\n\n definitions.push(methodsDef)\n }\n }\n\n return ref\n}\n\nfunction jsFunctionToUniformRef(\n this: Transformer,\n dec: DeclarationReflection\n) {\n const definitions: Definition[] = []\n const ref: Reference = {\n title: `Function ${dec.name}`,\n canonical: `fn-${dec.name}`,\n description: '',\n context: {},\n examples: {\n groups: [],\n },\n definitions,\n }\n\n const declarationCtx = declarationUniformContext.call(this, dec)\n if (declarationCtx) {\n ref.context = {\n ...ref.context,\n ...declarationCtx\n }\n }\n\n const signatures = dec.signatures || []\n if (signatures.length > 1) {\n console.error('(jsFunctionToUniformRef): Multiple signatures not supported for function declaration', dec.name)\n return\n }\n\n for (const sign of dec.signatures || []) {\n {\n if (sign.comment) {\n const description = commentToUniform(sign.comment)\n const group = (declarationCtx?.packageName.split('/') || [])\n .map(name => `\"${name}\"`)\n .join(\",\")\n\n ref.description = `---\ntitle: ${dec.name}\ngroup: [${group}, Functions]\n---\n${description}`\n }\n }\n\n // handle returns\n {\n const returnsUniformDef: Definition = {\n title: 'Returns',\n properties: [],\n }\n\n if (sign.type) {\n let desc = \"\"\n\n if (sign.comment) {\n desc = returnCommentToUniform(sign.comment) || \"\"\n }\n returnsUniformDef.properties.push({\n name: \"\",\n type: someTypeToUniformType(sign.type),\n description: desc\n })\n }\n\n ref.definitions.push(returnsUniformDef)\n }\n\n // handle parameters\n {\n const parametersUniformDef: Definition = {\n title: 'Parameters',\n properties: [],\n }\n\n for (const param of sign.parameters || []) {\n if (!param.type) {\n console.warn('(jsFunctionToUniformRef): Parameter type not found', param.name)\n continue\n }\n\n let description = \"\"\n if (param.comment) {\n description = commentToUniform(param.comment)\n }\n parametersUniformDef.properties.push({\n name: param.name,\n type: someTypeToUniformType(param.type),\n description\n })\n }\n\n ref.definitions.push(parametersUniformDef)\n }\n }\n\n return ref\n}\n\n\nfunction declarationUniformContext(\n this: Transformer,\n dec: DeclarationReflection,\n) {\n if (!dec.sources || !dec.sources.length) {\n return\n }\n\n if (dec.sources.length > 1) {\n console.warn('(declarationUniformContext): Multiple sources not supported for function declaration', dec.name)\n return\n }\n\n const source = dec.sources[0]\n if (!source.fileName) {\n return\n }\n\n const signTxt = this.signatureTextLoader.signatureText(\n dec.id,\n source.line\n ) || \"\"\n\n const sourceCode = this.signatureTextLoader.signatureSourceCode(\n dec.id,\n source.line\n ) || \"\"\n\n // Get the symbol map to find the package path\n const symbolMap = this.project.symbolIdMap[dec.id] as ReflectionSymbolId\n if (!symbolMap) {\n console.warn('(declarationUniformContext): Symbol not found', dec.id)\n return\n }\n\n // Use the packagePath directly as it's already relative to the module root\n const fileFullPath = symbolMap.packagePath\n\n return {\n packageName: symbolMap.packageName,\n fileName: source.fileName,\n fileFullPath,\n line: source.line,\n col: source.character,\n signatureText: {\n code: signTxt,\n lang: \"ts\",\n },\n sourcecode: {\n code: sourceCode,\n lang: \"ts\"\n }\n }\n}\n\nfunction someTypeToUniformType(someType: SomeType) {\n if (!(\"name\" in someType)) {\n console.warn('SomeType does not have name property', someType)\n return \"\"\n }\n\n switch (someType.type) {\n case \"reference\": {\n // TODO: abstract definition properties like GenericDefinitionProperty extends DefinitionProperty?\n return `<${someType.name}>`\n }\n default: {\n return someType.name\n }\n }\n}\n\nfunction commentToUniform(comment: Comment) {\n let desc = \"\"\n\n for (const summary of comment?.summary || []) {\n desc += `${summary.text}\\n`\n }\n\n return desc\n}\n\nfunction returnCommentToUniform(comment: Comment) {\n if (!comment.blockTags || !comment.blockTags.length) {\n return\n }\n\n let desc = \"\"\n for (const tag of comment.blockTags) {\n if (tag.tag === \"@returns\") {\n for (const content of tag.content || []) {\n desc += `${content.text}\\n`\n }\n }\n }\n\n return desc\n}","import * as ts from 'typescript';\nimport * as fs from \"node:fs\";\n\n// TODO: in the future more lightweight solution ??? - currently it's fine cuz it uses battle-tested TypeScript API\n\nconst printer = ts.createPrinter({removeComments: true});\n\nexport class SignatureTextLoader {\n protected sourceFile: ts.SourceFile;\n\n constructor(sourcePath: string) {\n const source = fs.readFileSync(sourcePath, 'utf-8');\n\n this.sourceFile = ts.createSourceFile(\n sourcePath,\n source,\n ts.ScriptTarget.Latest,\n true\n );\n }\n}\n\nexport class MultiSignatureLoader {\n private loaders: Map<string, SignatureTextLoader>\n\n constructor() {\n this.loaders = new Map<string, SignatureTextLoader>()\n }\n\n protected load(path: string) {\n if (this.loaders.has(path)) {\n return this.loaders.get(path)\n }\n\n const loader = new SignatureTextLoader(path)\n this.loaders.set(path, loader)\n\n return loader\n }\n}\n\n/**\n * Get the signature text of a function, class, interface, enum, or type alias at a specific line.\n *\n * @param sign - instance of SignatureText\n * @param targetLine - the line number of the signature in source code\n *\n * @returns code friendly signature text\n */\nexport function signatureTextByLine(\n sign: SignatureTextLoader,\n targetLine: number\n) {\n return signatureText.call(sign, targetLine)\n}\n\n/**\n * Get the source code of a function, class, interface, enum, or type alias at a specific line.\n *\n * @param sign - instance of SignatureText\n * @param targetLine - the line number of the signature in source code\n *\n * @returns source code of the signature\n*/\nexport function signatureSourceCodeByLine(\n sign: SignatureTextLoader,\n targetLine: number\n) {\n return signatureSourceCode.call(sign, targetLine)\n}\n\nfunction signatureText(\n this: SignatureTextLoader,\n targetLine: number\n) {\n const sourceFile = this.sourceFile;\n const signatureNode = findSignatureNode.call(\n this,\n sourceFile,\n [targetLine]\n );\n\n if (!signatureNode) {\n console.error(\"(signatureText): `signatureNode` is empty, something went wrong\");\n return\n }\n\n const printableSignatureNode = nodeToPrintableSignatureNode(signatureNode);\n if (!printableSignatureNode) {\n console.error(\"(signatureText): cannot convert `signatureNode` to `printableSignatureNode`\");\n return\n }\n\n return printer.printNode(ts.EmitHint.Unspecified, printableSignatureNode, sourceFile).trim()\n\n}\n\n// TODO: this function is probably not optimized well (recursion when not needed)\nfunction findSignatureNode(\n this: SignatureTextLoader,\n node: ts.Node,\n targetLines: number[]\n) {\n let isSourceFile = false\n if (node === node.getSourceFile()) {\n isSourceFile = true\n }\n\n if (!isSourceFile && isNodeAtLine(node, targetLines, this.sourceFile)) {\n return node\n }\n\n let signatureNode: ts.Node | undefined;\n\n ts.forEachChild(node, (n) => {\n if (signatureNode) {\n return\n }\n signatureNode = findSignatureNode.call(this, n, targetLines)\n });\n\n return signatureNode\n}\n\n\nfunction signatureSourceCode(\n this: SignatureTextLoader,\n targetLine: number\n) {\n const sourceFile = this.sourceFile;\n const signatureNode = findSignatureNode.call(\n this,\n sourceFile,\n [targetLine]\n );\n\n if (!signatureNode) {\n console.error(\"(signatureSourceCode): `signatureNode` is empty, something went wrong\");\n return\n }\n\n // Get the start and end positions of the node\n const start = signatureNode.getStart(sourceFile);\n const end = signatureNode.getEnd();\n\n // Get the source text between start and end\n return sourceFile.text.substring(start, end).trim();\n}\n\nfunction nodeToPrintableSignatureNode(node: ts.Node) {\n let resp: ts.Node | undefined;\n\n if (ts.isFunctionDeclaration(node)) {\n resp = ts.factory.updateFunctionDeclaration(\n node,\n node.modifiers,\n node.asteriskToken,\n node.name,\n node.typeParameters,\n node.parameters,\n node.type,\n undefined\n );\n } else if (ts.isClassDeclaration(node)) {\n resp = ts.factory.updateClassDeclaration(\n node,\n node.modifiers,\n node.name,\n node.typeParameters,\n node.heritageClauses,\n []\n );\n } else if (ts.isInterfaceDeclaration(node)) {\n resp = ts.factory.updateInterfaceDeclaration(\n node,\n node.modifiers,\n node.name,\n node.typeParameters,\n node.heritageClauses,\n []\n );\n } else if (ts.isEnumDeclaration(node)) {\n resp = ts.factory.updateEnumDeclaration(\n node,\n node.modifiers,\n node.name,\n []\n );\n } else if (ts.isTypeAliasDeclaration(node)) {\n resp = ts.factory.updateTypeAliasDeclaration(\n node,\n node.modifiers,\n node.name,\n node.typeParameters,\n node.type\n );\n }\n\n if (!resp) {\n console.error(\"(nodeToPrintableSignatureNode): resp is empty, something went wrong\");\n return;\n }\n\n return resp\n}\n\nfunction isNodeAtLine(node: ts.Node, lines: number[], sf: ts.SourceFile): boolean {\n const {line: startLine} = sf.getLineAndCharacterOfPosition(node.getStart());\n\n return lines.includes(startLine + 1); // lines are 0-based internally\n}\n\n\n\n"],"mappings":"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","names":["fs","path","fs","path"]}
|