| 1799 | |
| 1800 | export class TSConfigFile extends PrerequisiteFile { |
| 1801 | generate(tool, typescript = true, javascript = false) { |
| 1802 | if (typescript) { |
| 1803 | // Build paths map for type resolution |
| 1804 | const paths = {}; |
| 1805 | for (let result of tool.dtsFiles) { |
| 1806 | let specifier = result.target; |
| 1807 | if (tool.windows) |
| 1808 | specifier = specifier.replaceAll("\\", "/"); |
| 1809 | specifier = tool.unresolvePrefix(specifier); |
| 1810 | paths[specifier] = [ result.source.slice(0, -5) ]; |
| 1811 | } |
| 1812 | for (let result of tool.tsFiles) { |
| 1813 | let specifier = result.target.slice(0, -4); |
| 1814 | if (tool.windows) |
| 1815 | specifier = specifier.replaceAll("\\", "/"); |
| 1816 | specifier = tool.unresolvePrefix(specifier); |
| 1817 | paths[specifier] = [ result.source.slice(0, -3) ]; |
| 1818 | } |
| 1819 | for (let result of tool.jsFiles) { |
| 1820 | let specifier = result.target.slice(0, -4); |
| 1821 | if (tool.windows) |
| 1822 | specifier = specifier.replaceAll("\\", "/"); |
| 1823 | specifier = tool.unresolvePrefix(specifier); |
| 1824 | if (!(specifier in paths)) |
| 1825 | paths[specifier] = [ result.source.slice(0, result.source.lastIndexOf(".")) ]; |
| 1826 | } |
| 1827 | if ("zephyr" === tool.platform) { |
| 1828 | paths["embedded:provider/builtin"] = [tool.tmpPath + tool.slash + "mc.devicetree"]; |
| 1829 | paths["mc/devicetree"] = [tool.tmpPath + tool.slash + "mc.devicetree.js"]; |
| 1830 | } |
| 1831 | |
| 1832 | // Build base compilerOptions |
| 1833 | const compilerOptions = { |
| 1834 | forceConsistentCasingInFileNames: true, |
| 1835 | module: "preserve", |
| 1836 | resolveJsonModule: true, |
| 1837 | paths, |
| 1838 | lib: ["es2025"], |
| 1839 | sourceMap: true, |
| 1840 | target: "es2025" |
| 1841 | }; |
| 1842 | if (tool.typescript.tsconfig?.compilerOptions) |
| 1843 | Object.assign(compilerOptions, tool.typescript.tsconfig.compilerOptions); |
| 1844 | |
| 1845 | // Write base config (this file = tsconfig-base.json) |
| 1846 | const baseJson = { ...tool.typescript.tsconfig, compilerOptions }; |
| 1847 | delete baseJson.files; |
| 1848 | const baseContent = JSON.stringify(baseJson, null, "\t"); |
| 1849 | this.write(baseContent); |
| 1850 | this.close(); |
| 1851 | |
| 1852 | // Generate per-file tsconfigs with isolated output directories |
| 1853 | const basePath = tool.modulesPath + tool.slash + "tsconfig-base.json"; |
| 1854 | const tscDir = tool.tmpPath + tool.slash + "tsc"; |
| 1855 | for (let result of tool.tsFiles) { |
| 1856 | const target = result.target; |
| 1857 | const targetNoExt = target.slice(0, -4); |
| 1858 | const lastSlash = target.lastIndexOf(tool.slash); |