@refrakt-md/cli 0.5.0 → 0.5.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/dist/bin.js +222 -0
- package/dist/bin.js.map +1 -1
- package/dist/commands/edit.d.ts +8 -0
- package/dist/commands/edit.d.ts.map +1 -0
- package/dist/commands/edit.js +100 -0
- package/dist/commands/edit.js.map +1 -0
- package/dist/commands/extract.d.ts +10 -0
- package/dist/commands/extract.d.ts.map +1 -0
- package/dist/commands/extract.js +158 -0
- package/dist/commands/extract.js.map +1 -0
- package/dist/commands/theme.d.ts +10 -0
- package/dist/commands/theme.d.ts.map +1 -0
- package/dist/commands/theme.js +160 -0
- package/dist/commands/theme.js.map +1 -0
- package/dist/config-file.d.ts +15 -0
- package/dist/config-file.d.ts.map +1 -0
- package/dist/config-file.js +47 -0
- package/dist/config-file.js.map +1 -0
- package/dist/extractors/index.d.ts +3 -0
- package/dist/extractors/index.d.ts.map +1 -0
- package/dist/extractors/index.js +15 -0
- package/dist/extractors/index.js.map +1 -0
- package/dist/extractors/python.d.ts +6 -0
- package/dist/extractors/python.d.ts.map +1 -0
- package/dist/extractors/python.js +8 -0
- package/dist/extractors/python.js.map +1 -0
- package/dist/extractors/types.d.ts +55 -0
- package/dist/extractors/types.d.ts.map +1 -0
- package/dist/extractors/types.js +2 -0
- package/dist/extractors/types.js.map +1 -0
- package/dist/extractors/typescript.d.ts +28 -0
- package/dist/extractors/typescript.d.ts.map +1 -0
- package/dist/extractors/typescript.js +566 -0
- package/dist/extractors/typescript.js.map +1 -0
- package/dist/lib/layout-generator.d.ts +8 -0
- package/dist/lib/layout-generator.d.ts.map +1 -0
- package/dist/lib/layout-generator.js +22 -0
- package/dist/lib/layout-generator.js.map +1 -0
- package/dist/lib/symbol-generator.d.ts +14 -0
- package/dist/lib/symbol-generator.d.ts.map +1 -0
- package/dist/lib/symbol-generator.js +202 -0
- package/dist/lib/symbol-generator.js.map +1 -0
- package/package.json +8 -6
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
+
import { resolve, isAbsolute } from 'node:path';
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
import { detectPackageManager, loadRefraktConfigFile, writeRefraktConfigFile, } from '../config-file.js';
|
|
5
|
+
/** Install a theme package and update refrakt.config.json */
|
|
6
|
+
export async function themeInstallCommand(options) {
|
|
7
|
+
const { source } = options;
|
|
8
|
+
const cwd = process.cwd();
|
|
9
|
+
// 1. Determine source type and package name
|
|
10
|
+
const absSource = isAbsolute(source) ? source : resolve(cwd, source);
|
|
11
|
+
let packageName;
|
|
12
|
+
let installSource;
|
|
13
|
+
if (existsSync(absSource)) {
|
|
14
|
+
// Local directory or tarball
|
|
15
|
+
const pkgJsonPath = source.endsWith('.tgz')
|
|
16
|
+
? null // Can't easily read from tarball without tar parser
|
|
17
|
+
: resolve(absSource, 'package.json');
|
|
18
|
+
if (pkgJsonPath && existsSync(pkgJsonPath)) {
|
|
19
|
+
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
20
|
+
packageName = pkg.name;
|
|
21
|
+
if (!packageName) {
|
|
22
|
+
console.error('Error: Theme package.json is missing a "name" field');
|
|
23
|
+
process.exit(1);
|
|
24
|
+
}
|
|
25
|
+
installSource = `file:${absSource}`;
|
|
26
|
+
}
|
|
27
|
+
else if (source.endsWith('.tgz')) {
|
|
28
|
+
// For tarballs, install first then read name from node_modules
|
|
29
|
+
installSource = absSource;
|
|
30
|
+
packageName = ''; // resolved after install
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
console.error(`Error: No package.json found in ${absSource}`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
// npm package name
|
|
39
|
+
packageName = source;
|
|
40
|
+
installSource = source;
|
|
41
|
+
}
|
|
42
|
+
// 2. Detect package manager
|
|
43
|
+
const pm = detectPackageManager(cwd);
|
|
44
|
+
console.log(`Using ${pm.name} to install theme...`);
|
|
45
|
+
// 3. Install
|
|
46
|
+
const cmd = pm.installCmd(installSource);
|
|
47
|
+
try {
|
|
48
|
+
execSync(cmd, { cwd, stdio: 'inherit' });
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
console.error(`\nError: Failed to install theme. Command: ${cmd}`);
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
// 4. For tarballs, resolve package name from the install output
|
|
55
|
+
if (!packageName) {
|
|
56
|
+
// After npm install of a tarball, the package is in node_modules
|
|
57
|
+
// We need to search for it — check recent additions
|
|
58
|
+
console.error('Error: Could not determine package name from tarball.');
|
|
59
|
+
console.error('Please install from the unzipped directory instead:');
|
|
60
|
+
console.error(' refrakt theme install ./path/to/theme-directory');
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
// 5. Update refrakt.config.json
|
|
64
|
+
let configData;
|
|
65
|
+
try {
|
|
66
|
+
configData = loadRefraktConfigFile(cwd);
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
console.error('Error: No refrakt.config.json found in the current directory.');
|
|
70
|
+
console.error('Are you in a refrakt.md project root?');
|
|
71
|
+
process.exit(1);
|
|
72
|
+
}
|
|
73
|
+
const previousTheme = configData.config.theme;
|
|
74
|
+
configData.config.theme = packageName;
|
|
75
|
+
writeRefraktConfigFile(configData.path, configData.config);
|
|
76
|
+
// 6. Validate the installed theme
|
|
77
|
+
const warnings = [];
|
|
78
|
+
try {
|
|
79
|
+
const themeDir = resolve(cwd, 'node_modules', packageName);
|
|
80
|
+
if (!existsSync(themeDir)) {
|
|
81
|
+
warnings.push('Theme directory not found in node_modules — install may have failed');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
const themePkg = JSON.parse(readFileSync(resolve(themeDir, 'package.json'), 'utf-8'));
|
|
85
|
+
const exports = themePkg.exports ?? {};
|
|
86
|
+
if (!exports['./svelte'] && !exports['./svelte/index.js']) {
|
|
87
|
+
warnings.push('Theme is missing ./svelte export — runtime rendering may fail');
|
|
88
|
+
}
|
|
89
|
+
if (!exports['./transform']) {
|
|
90
|
+
warnings.push('Theme is missing ./transform export — CSS tree-shaking will be skipped');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
// Validation is best-effort
|
|
96
|
+
}
|
|
97
|
+
// 7. Output results
|
|
98
|
+
console.log('');
|
|
99
|
+
console.log(`Theme "${packageName}" installed successfully.`);
|
|
100
|
+
if (previousTheme !== packageName) {
|
|
101
|
+
console.log(` Updated refrakt.config.json: "${previousTheme}" → "${packageName}"`);
|
|
102
|
+
}
|
|
103
|
+
if (warnings.length > 0) {
|
|
104
|
+
console.log('');
|
|
105
|
+
console.log('Warnings:');
|
|
106
|
+
for (const w of warnings) {
|
|
107
|
+
console.log(` ⚠ ${w}`);
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
console.log('');
|
|
111
|
+
console.log('Run your dev server to see the new theme in action.');
|
|
112
|
+
}
|
|
113
|
+
/** Show info about the currently configured theme */
|
|
114
|
+
export async function themeInfoCommand(_options) {
|
|
115
|
+
const cwd = process.cwd();
|
|
116
|
+
let configData;
|
|
117
|
+
try {
|
|
118
|
+
configData = loadRefraktConfigFile(cwd);
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
console.error('Error: No refrakt.config.json found in the current directory.');
|
|
122
|
+
process.exit(1);
|
|
123
|
+
}
|
|
124
|
+
const themeName = configData.config.theme;
|
|
125
|
+
console.log(`Current theme: ${themeName}`);
|
|
126
|
+
// Try to resolve and show details
|
|
127
|
+
try {
|
|
128
|
+
const themeDir = resolve(cwd, 'node_modules', themeName);
|
|
129
|
+
if (existsSync(themeDir)) {
|
|
130
|
+
const pkg = JSON.parse(readFileSync(resolve(themeDir, 'package.json'), 'utf-8'));
|
|
131
|
+
console.log(` Version: ${pkg.version ?? 'unknown'}`);
|
|
132
|
+
console.log(` Path: ${themeDir}`);
|
|
133
|
+
if (pkg.description) {
|
|
134
|
+
console.log(` Description: ${pkg.description}`);
|
|
135
|
+
}
|
|
136
|
+
const exports = pkg.exports ?? {};
|
|
137
|
+
const features = [];
|
|
138
|
+
if (exports['./svelte'])
|
|
139
|
+
features.push('svelte');
|
|
140
|
+
if (exports['./transform'])
|
|
141
|
+
features.push('transform');
|
|
142
|
+
if (exports['./styles/runes/*.css'])
|
|
143
|
+
features.push('rune CSS');
|
|
144
|
+
if (features.length > 0) {
|
|
145
|
+
console.log(` Exports: ${features.join(', ')}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
else if (themeName.startsWith('.')) {
|
|
149
|
+
console.log(` Type: Local directory`);
|
|
150
|
+
console.log(` Path: ${resolve(cwd, themeName)}`);
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
console.log(` Status: Not found in node_modules`);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
catch {
|
|
157
|
+
// Best-effort info display
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
//# sourceMappingURL=theme.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { RefraktConfig } from '@refrakt-md/types';
|
|
2
|
+
export interface PackageManager {
|
|
3
|
+
name: 'npm' | 'pnpm' | 'yarn' | 'bun';
|
|
4
|
+
installCmd: (source: string) => string;
|
|
5
|
+
}
|
|
6
|
+
/** Detect the project's package manager by checking for lockfiles */
|
|
7
|
+
export declare function detectPackageManager(cwd?: string): PackageManager;
|
|
8
|
+
/** Load refrakt.config.json from a directory */
|
|
9
|
+
export declare function loadRefraktConfigFile(cwd?: string): {
|
|
10
|
+
path: string;
|
|
11
|
+
config: RefraktConfig;
|
|
12
|
+
};
|
|
13
|
+
/** Write refrakt.config.json, preserving formatting */
|
|
14
|
+
export declare function writeRefraktConfigFile(path: string, config: RefraktConfig): void;
|
|
15
|
+
//# sourceMappingURL=config-file.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-file.d.ts","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,KAAK,CAAC;IACtC,UAAU,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,MAAM,CAAC;CACvC;AA0BD,qEAAqE;AACrE,wBAAgB,oBAAoB,CAAC,GAAG,GAAE,MAAsB,GAAG,cAAc,CAKhF;AAED,gDAAgD;AAChD,wBAAgB,qBAAqB,CAAC,GAAG,GAAE,MAAsB,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,aAAa,CAAA;CAAE,CAQ1G;AAED,uDAAuD;AACvD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAEhF"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
const PM_LOCKFILES = [
|
|
4
|
+
{
|
|
5
|
+
file: 'bun.lock',
|
|
6
|
+
pm: { name: 'bun', installCmd: (s) => `bun add ${s}` },
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
file: 'bun.lockb',
|
|
10
|
+
pm: { name: 'bun', installCmd: (s) => `bun add ${s}` },
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
file: 'pnpm-lock.yaml',
|
|
14
|
+
pm: { name: 'pnpm', installCmd: (s) => `pnpm add ${s}` },
|
|
15
|
+
},
|
|
16
|
+
{
|
|
17
|
+
file: 'yarn.lock',
|
|
18
|
+
pm: { name: 'yarn', installCmd: (s) => `yarn add ${s}` },
|
|
19
|
+
},
|
|
20
|
+
];
|
|
21
|
+
const NPM_DEFAULT = {
|
|
22
|
+
name: 'npm',
|
|
23
|
+
installCmd: (s) => `npm install ${s}`,
|
|
24
|
+
};
|
|
25
|
+
/** Detect the project's package manager by checking for lockfiles */
|
|
26
|
+
export function detectPackageManager(cwd = process.cwd()) {
|
|
27
|
+
for (const { file, pm } of PM_LOCKFILES) {
|
|
28
|
+
if (existsSync(resolve(cwd, file)))
|
|
29
|
+
return pm;
|
|
30
|
+
}
|
|
31
|
+
return NPM_DEFAULT;
|
|
32
|
+
}
|
|
33
|
+
/** Load refrakt.config.json from a directory */
|
|
34
|
+
export function loadRefraktConfigFile(cwd = process.cwd()) {
|
|
35
|
+
const configPath = resolve(cwd, 'refrakt.config.json');
|
|
36
|
+
if (!existsSync(configPath)) {
|
|
37
|
+
throw new Error(`No refrakt.config.json found in ${cwd}`);
|
|
38
|
+
}
|
|
39
|
+
const raw = readFileSync(configPath, 'utf-8');
|
|
40
|
+
const config = JSON.parse(raw);
|
|
41
|
+
return { path: configPath, config };
|
|
42
|
+
}
|
|
43
|
+
/** Write refrakt.config.json, preserving formatting */
|
|
44
|
+
export function writeRefraktConfigFile(path, config) {
|
|
45
|
+
writeFileSync(path, JSON.stringify(config, null, '\t') + '\n');
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=config-file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-file.js","sourceRoot":"","sources":["../src/config-file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,MAAM,YAAY,GAAgD;IACjE;QACC,IAAI,EAAE,UAAU;QAChB,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;KACtD;IACD;QACC,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE;KACtD;IACD;QACC,IAAI,EAAE,gBAAgB;QACtB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;KACxD;IACD;QACC,IAAI,EAAE,WAAW;QACjB,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,EAAE;KACxD;CACD,CAAC;AAEF,MAAM,WAAW,GAAmB;IACnC,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE;CACrC,CAAC;AAEF,qEAAqE;AACrE,MAAM,UAAU,oBAAoB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAC/D,KAAK,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,IAAI,YAAY,EAAE,CAAC;QACzC,IAAI,UAAU,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YAAE,OAAO,EAAE,CAAC;IAC/C,CAAC;IACD,OAAO,WAAW,CAAC;AACpB,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,qBAAqB,CAAC,MAAc,OAAO,CAAC,GAAG,EAAE;IAChE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,qBAAqB,CAAC,CAAC;IACvD,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,GAAG,GAAG,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAkB,CAAC;IAChD,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;AACrC,CAAC;AAED,uDAAuD;AACvD,MAAM,UAAU,sBAAsB,CAAC,IAAY,EAAE,MAAqB;IACzE,aAAa,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC;AAChE,CAAC"}
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
export type { SymbolDoc, SymbolExtractor, ExtractorResult, SymbolKind, SymbolParameter, SymbolReturn, SymbolThrows, SymbolMemberDoc, SymbolGroupDoc, } from './types.js';
|
|
2
|
+
export declare function loadExtractor(lang: 'typescript' | 'python', rootDir: string, sourceUrl?: string): Promise<import('./types.js').SymbolExtractor>;
|
|
3
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACX,SAAS,EAAE,eAAe,EAAE,eAAe,EAAE,UAAU,EACvD,eAAe,EAAE,YAAY,EAAE,YAAY,EAC3C,eAAe,EAAE,cAAc,GAC/B,MAAM,YAAY,CAAC;AAEpB,wBAAsB,aAAa,CAClC,IAAI,EAAE,YAAY,GAAG,QAAQ,EAC7B,OAAO,EAAE,MAAM,EACf,SAAS,CAAC,EAAE,MAAM,GAChB,OAAO,CAAC,OAAO,YAAY,EAAE,eAAe,CAAC,CAa/C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export async function loadExtractor(lang, rootDir, sourceUrl) {
|
|
2
|
+
switch (lang) {
|
|
3
|
+
case 'typescript': {
|
|
4
|
+
const { TypeScriptExtractor } = await import('./typescript.js');
|
|
5
|
+
return new TypeScriptExtractor(rootDir, sourceUrl);
|
|
6
|
+
}
|
|
7
|
+
case 'python': {
|
|
8
|
+
const { PythonExtractor } = await import('./python.js');
|
|
9
|
+
return new PythonExtractor(rootDir, sourceUrl);
|
|
10
|
+
}
|
|
11
|
+
default:
|
|
12
|
+
throw new Error(`Unsupported language: ${lang}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/extractors/index.ts"],"names":[],"mappings":"AAMA,MAAM,CAAC,KAAK,UAAU,aAAa,CAClC,IAA6B,EAC7B,OAAe,EACf,SAAkB;IAElB,QAAQ,IAAI,EAAE,CAAC;QACd,KAAK,YAAY,CAAC,CAAC,CAAC;YACnB,MAAM,EAAE,mBAAmB,EAAE,GAAG,MAAM,MAAM,CAAC,iBAAiB,CAAC,CAAC;YAChE,OAAO,IAAI,mBAAmB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACf,MAAM,EAAE,eAAe,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;YACxD,OAAO,IAAI,eAAe,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;QAChD,CAAC;QACD;YACC,MAAM,IAAI,KAAK,CAAC,yBAAyB,IAAI,EAAE,CAAC,CAAC;IACnD,CAAC;AACF,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { SymbolExtractor, ExtractorResult } from './types.js';
|
|
2
|
+
export declare class PythonExtractor implements SymbolExtractor {
|
|
3
|
+
constructor(_rootDir: string, _sourceUrl?: string);
|
|
4
|
+
extractFile(_filePath: string): ExtractorResult;
|
|
5
|
+
}
|
|
6
|
+
//# sourceMappingURL=python.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.d.ts","sourceRoot":"","sources":["../../src/extractors/python.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEnE,qBAAa,eAAgB,YAAW,eAAe;gBAC1C,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;IAEjD,WAAW,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe;CAM/C"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export class PythonExtractor {
|
|
2
|
+
constructor(_rootDir, _sourceUrl) { }
|
|
3
|
+
extractFile(_filePath) {
|
|
4
|
+
throw new Error('Python extraction is not yet implemented. ' +
|
|
5
|
+
'Install tree-sitter-python and contribute a Python extractor.');
|
|
6
|
+
}
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=python.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"python.js","sourceRoot":"","sources":["../../src/extractors/python.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,eAAe;IAC3B,YAAY,QAAgB,EAAE,UAAmB,IAAG,CAAC;IAErD,WAAW,CAAC,SAAiB;QAC5B,MAAM,IAAI,KAAK,CACd,4CAA4C;YAC5C,+DAA+D,CAC/D,CAAC;IACH,CAAC;CACD"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type SymbolKind = 'function' | 'class' | 'interface' | 'enum' | 'type' | 'module' | 'hook' | 'component';
|
|
2
|
+
export interface SymbolParameter {
|
|
3
|
+
name: string;
|
|
4
|
+
type: string;
|
|
5
|
+
description: string;
|
|
6
|
+
optional: boolean;
|
|
7
|
+
defaultValue?: string;
|
|
8
|
+
children?: SymbolParameter[];
|
|
9
|
+
}
|
|
10
|
+
export interface SymbolReturn {
|
|
11
|
+
type: string;
|
|
12
|
+
description: string;
|
|
13
|
+
}
|
|
14
|
+
export interface SymbolThrows {
|
|
15
|
+
type: string;
|
|
16
|
+
description: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SymbolMemberDoc {
|
|
19
|
+
name: string;
|
|
20
|
+
kind: 'property' | 'method' | 'constructor' | 'accessor' | 'index-signature';
|
|
21
|
+
signature: string;
|
|
22
|
+
description: string;
|
|
23
|
+
parameters?: SymbolParameter[];
|
|
24
|
+
returns?: SymbolReturn;
|
|
25
|
+
throws?: SymbolThrows[];
|
|
26
|
+
since?: string;
|
|
27
|
+
deprecated?: string;
|
|
28
|
+
}
|
|
29
|
+
export interface SymbolGroupDoc {
|
|
30
|
+
label: string;
|
|
31
|
+
members: SymbolMemberDoc[];
|
|
32
|
+
}
|
|
33
|
+
export interface SymbolDoc {
|
|
34
|
+
name: string;
|
|
35
|
+
kind: SymbolKind;
|
|
36
|
+
signature: string;
|
|
37
|
+
description: string;
|
|
38
|
+
parameters?: SymbolParameter[];
|
|
39
|
+
returns?: SymbolReturn;
|
|
40
|
+
throws?: SymbolThrows[];
|
|
41
|
+
since?: string;
|
|
42
|
+
deprecated?: string;
|
|
43
|
+
source?: string;
|
|
44
|
+
groups?: SymbolGroupDoc[];
|
|
45
|
+
filePath: string;
|
|
46
|
+
line: number;
|
|
47
|
+
}
|
|
48
|
+
export interface ExtractorResult {
|
|
49
|
+
symbols: SymbolDoc[];
|
|
50
|
+
filePath: string;
|
|
51
|
+
}
|
|
52
|
+
export interface SymbolExtractor {
|
|
53
|
+
extractFile(filePath: string): ExtractorResult;
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/extractors/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,UAAU,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,GAAG,WAAW,CAAC;AAEhH,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,GAAG,QAAQ,GAAG,aAAa,GAAG,UAAU,GAAG,iBAAiB,CAAC;IAC7E,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC9B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,eAAe,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,eAAe;IAC/B,OAAO,EAAE,SAAS,EAAE,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,eAAe;IAC/B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe,CAAC;CAC/C"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/extractors/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { SymbolExtractor, ExtractorResult } from './types.js';
|
|
2
|
+
export declare class TypeScriptExtractor implements SymbolExtractor {
|
|
3
|
+
private program;
|
|
4
|
+
private checker;
|
|
5
|
+
private rootDir;
|
|
6
|
+
private sourceUrl?;
|
|
7
|
+
constructor(rootDir: string, sourceUrl?: string);
|
|
8
|
+
extractFile(filePath: string): ExtractorResult;
|
|
9
|
+
private extractExport;
|
|
10
|
+
private extractFunction;
|
|
11
|
+
private extractVariable;
|
|
12
|
+
private extractClass;
|
|
13
|
+
private extractClassMembers;
|
|
14
|
+
private extractInterface;
|
|
15
|
+
private extractInterfaceMembers;
|
|
16
|
+
private extractEnum;
|
|
17
|
+
private extractTypeAlias;
|
|
18
|
+
private extractMemberDoc;
|
|
19
|
+
private extractParameters;
|
|
20
|
+
private extractReturn;
|
|
21
|
+
private extractThrows;
|
|
22
|
+
private isPrivateOrProtected;
|
|
23
|
+
private hasModifier;
|
|
24
|
+
private buildSourceUrl;
|
|
25
|
+
}
|
|
26
|
+
/** Find all TypeScript source files in a directory */
|
|
27
|
+
export declare function findSourceFiles(dir: string): string[];
|
|
28
|
+
//# sourceMappingURL=typescript.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typescript.d.ts","sourceRoot":"","sources":["../../src/extractors/typescript.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAEsB,eAAe,EAAE,eAAe,EACjE,MAAM,YAAY,CAAC;AAkFpB,qBAAa,mBAAoB,YAAW,eAAe;IAC1D,OAAO,CAAC,OAAO,CAAa;IAC5B,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAC,CAAS;gBAEf,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;IAoB/C,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,eAAe;IAmB9C,OAAO,CAAC,aAAa;IAuCrB,OAAO,CAAC,eAAe;IAyBvB,OAAO,CAAC,eAAe;IAiDvB,OAAO,CAAC,YAAY;IA0BpB,OAAO,CAAC,mBAAmB;IAuC3B,OAAO,CAAC,gBAAgB;IA4BxB,OAAO,CAAC,uBAAuB;IAuB/B,OAAO,CAAC,WAAW;IAyCnB,OAAO,CAAC,gBAAgB;IAqBxB,OAAO,CAAC,gBAAgB;IAkFxB,OAAO,CAAC,iBAAiB;IA8CzB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,oBAAoB;IAK5B,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,cAAc;CAKtB;AAED,sDAAsD;AACtD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAQrD"}
|