generate-jsdoc-example-tests
Advanced tools
Comparing version
@@ -15,3 +15,3 @@ export interface GenerateOptions { | ||
/** | ||
* Only generate test files for examples including one of the given strings | ||
* Keywords the example body must contain to be included in the generated tests. | ||
* @default ['assert', 'expect'] | ||
@@ -18,0 +18,0 @@ */ |
156
lib/app.js
@@ -1,17 +0,1 @@ | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
var __asyncValues = (this && this.__asyncValues) || function (o) { | ||
if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined."); | ||
var m = o[Symbol.asyncIterator], i; | ||
return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i); | ||
function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; } | ||
function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); } | ||
}; | ||
import { glob, readFile, writeFile } from 'node:fs/promises'; | ||
@@ -54,79 +38,69 @@ import * as path from "node:path"; | ||
*/ | ||
export function generateTests(pattern, providedOptions) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
var _a, e_1, _b, _c; | ||
const options = Object.assign(Object.assign({}, defaultOptions), providedOptions); | ||
try { | ||
for (var _d = true, _e = __asyncValues(glob(pattern)), _f; _f = yield _e.next(), _a = _f.done, !_a; _d = true) { | ||
_c = _f.value; | ||
_d = false; | ||
const fileName = _c; | ||
if (fileName.includes(options.testFileExtension)) | ||
continue; | ||
yield generateTestFile(fileName, options); | ||
} | ||
} | ||
catch (e_1_1) { e_1 = { error: e_1_1 }; } | ||
finally { | ||
try { | ||
if (!_d && !_a && (_b = _e.return)) yield _b.call(_e); | ||
} | ||
finally { if (e_1) throw e_1.error; } | ||
} | ||
}); | ||
export async function generateTests(pattern, providedOptions) { | ||
const options = { ...defaultOptions, ...providedOptions }; | ||
for await (const fileName of glob(pattern)) { | ||
if (fileName.includes(options.testFileExtension)) | ||
continue; | ||
await generateTestFile(fileName, options); | ||
} | ||
} | ||
function generateTestFile(filePath, options) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const { ext, name, dir } = path.parse(filePath); | ||
let kind; | ||
switch (ext.toUpperCase()) { | ||
case ".TS": | ||
kind = ts.ScriptKind.TS; | ||
break; | ||
case ".JS": | ||
kind = ts.ScriptKind.JS; | ||
break; | ||
case ".TSX": | ||
case ".JSX": | ||
console.log("currently unsupported tsx ", filePath); | ||
return; | ||
default: | ||
return; | ||
} | ||
const source = ts.createSourceFile(filePath, yield readFile(filePath, 'utf-8'), ts.ScriptTarget.Latest, false, kind); | ||
const foundComments = extractComments(source); | ||
if (foundComments.length === 0) { | ||
// console.debug(`${filePath} comments not found`) | ||
async function generateTestFile(filePath, options) { | ||
const { ext, name, dir } = path.parse(filePath); | ||
let kind; | ||
switch (ext.toUpperCase()) { | ||
case ".TS": | ||
kind = ts.ScriptKind.TS; | ||
break; | ||
case ".JS": | ||
kind = ts.ScriptKind.JS; | ||
break; | ||
case ".TSX": | ||
case ".JSX": | ||
console.log("currently unsupported tsx ", filePath); | ||
return; | ||
} | ||
const { imports, testBody } = foundComments | ||
.map((f) => { | ||
return { docNode: parseTSDoc(f), node: f.compilerNode }; | ||
}) | ||
.map(({ docNode, node }) => { | ||
return collectExampleCodes(node, source, docNode, options); | ||
}) | ||
.flat() | ||
.map((example) => { | ||
return Object.assign(Object.assign({}, example), { exampleSource: ts.createSourceFile(example.name, example.code, ts.ScriptTarget.Latest, false, kind) }); | ||
}) | ||
.reduce((acc, { /* source, */ exampleSource, name }) => { | ||
const { imports, body } = splitImport(exampleSource); | ||
// const fileName = path.relative(process.cwd(), source.fileName) | ||
const funcName = name || `Example ${++acc.counter}`; | ||
const testBody = wrapTestFunction(funcName, body, options); | ||
return Object.assign(Object.assign({}, acc), { imports: [...acc.imports, ...imports], testBody: [...acc.testBody, testBody] }); | ||
}, { imports: [], testBody: [], counter: 0 }); | ||
const mergedImports = mergeImports(imports); | ||
if (testBody.length === 0) | ||
return; // do not generate an empty test file. | ||
const ast = ts.factory.updateSourceFile(ts.createSourceFile(filePath + options.testFileExtension, "", ts.ScriptTarget.Latest, false, kind), [...mergedImports, ...testBody]); | ||
const banner = `// DO NOT EDIT: Code generated by "generate-jsdoc-example-tests".`; | ||
if (options.headers.length > 0) | ||
options.headers.push(''); // add empty line. | ||
const header = [banner, ...options.headers].join("\n"); | ||
const printed = yield print(ast, options); | ||
yield writeFile(`${dir}/${name}${options.testFileExtension}${ext}`, `${header}\n${printed}`); | ||
}); | ||
default: | ||
return; | ||
} | ||
const source = ts.createSourceFile(filePath, await readFile(filePath, 'utf-8'), ts.ScriptTarget.Latest, false, kind); | ||
const foundComments = extractComments(source); | ||
if (foundComments.length === 0) { | ||
// console.debug(`${filePath} comments not found`) | ||
return; | ||
} | ||
const { imports, testBody } = foundComments | ||
.map((f) => { | ||
return { docNode: parseTSDoc(f), node: f.compilerNode }; | ||
}) | ||
.map(({ docNode, node }) => { | ||
return collectExampleCodes(node, source, docNode, options); | ||
}) | ||
.flat() | ||
.map((example) => { | ||
return { | ||
...example, | ||
exampleSource: ts.createSourceFile(example.name, example.code, ts.ScriptTarget.Latest, false, kind), | ||
}; | ||
}) | ||
.reduce((acc, { /* source, */ exampleSource, name }) => { | ||
const { imports, body } = splitImport(exampleSource); | ||
// const fileName = path.relative(process.cwd(), source.fileName) | ||
const funcName = name || `Example ${++acc.counter}`; | ||
const testBody = wrapTestFunction(funcName, body, options); | ||
return { | ||
...acc, | ||
imports: [...acc.imports, ...imports], | ||
testBody: [...acc.testBody, testBody], | ||
}; | ||
}, { imports: [], testBody: [], counter: 0 }); | ||
const mergedImports = mergeImports(imports); | ||
if (testBody.length === 0) | ||
return; // do not generate an empty test file. | ||
const ast = ts.factory.updateSourceFile(ts.createSourceFile(filePath + options.testFileExtension, "", ts.ScriptTarget.Latest, false, kind), [...mergedImports, ...testBody]); | ||
const banner = `// DO NOT EDIT: Code generated by "generate-jsdoc-example-tests".`; | ||
if (options.headers.length > 0) | ||
options.headers.push(''); // add empty line. | ||
const header = [banner, ...options.headers].join("\n"); | ||
const printed = await print(ast, options); | ||
await writeFile(`${dir}/${name}${options.testFileExtension}${ext}`, `${header}\n${printed}`); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDNUQsT0FBTyxLQUFLLElBQUksTUFBTSxXQUFXLENBQUE7QUFDakMsT0FBTyxLQUFLLEVBQUUsTUFBTSxZQUFZLENBQUE7QUFDaEMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDbkQsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDdkQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLGVBQWUsRUFBRSxVQUFVLEVBQUUsTUFBTSxhQUFhLENBQUE7QUFDOUUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQXFCcEMsTUFBTSxjQUFjLEdBQW9CO0lBQ3RDLGdCQUFnQixFQUFFLE1BQU07SUFDeEIsaUJBQWlCLEVBQUUsZUFBZTtJQUNsQyxPQUFPLEVBQUUsRUFBRTtJQUNYLHdCQUF3QixFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQztDQUMvQyxDQUFBO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBdUJHO0FBQ0gsTUFBTSxVQUFnQixhQUFhLENBQUMsT0FBTyxFQUFFLGVBQTBDOzs7UUFDckYsTUFBTSxPQUFPLG1DQUFRLGNBQWMsR0FBSyxlQUFlLENBQUUsQ0FBQTs7WUFDekQsS0FBNkIsZUFBQSxLQUFBLGNBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFBLElBQUEsc0RBQUUsQ0FBQztnQkFBaEIsY0FBYTtnQkFBYixXQUFhO2dCQUEvQixNQUFNLFFBQVEsS0FBQSxDQUFBO2dCQUN2QixJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDO29CQUFFLFNBQVE7Z0JB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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXBwLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2FwcC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUM1RCxPQUFPLEtBQUssSUFBSSxNQUFNLFdBQVcsQ0FBQTtBQUNqQyxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUNoQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQTtBQUNuRCxPQUFPLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUN2RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsZUFBZSxFQUFFLFVBQVUsRUFBRSxNQUFNLGFBQWEsQ0FBQTtBQUM5RSxPQUFPLEVBQUUsS0FBSyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBcUJwQyxNQUFNLGNBQWMsR0FBb0I7SUFDdEMsZ0JBQWdCLEVBQUUsTUFBTTtJQUN4QixpQkFBaUIsRUFBRSxlQUFlO0lBQ2xDLE9BQU8sRUFBRSxFQUFFO0lBQ1gsd0JBQXdCLEVBQUUsQ0FBQyxRQUFRLEVBQUUsUUFBUSxDQUFDO0NBQy9DLENBQUE7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F1Qkc7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FBQyxPQUFPLEVBQUUsZUFBMEM7SUFDckYsTUFBTSxPQUFPLEdBQUcsRUFBRSxHQUFHLGNBQWMsRUFBRSxHQUFHLGVBQWUsRUFBRSxDQUFBO0lBQ3pELElBQUksS0FBSyxFQUFFLE1BQU0sUUFBUSxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQzNDLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsaUJBQWlCLENBQUM7WUFBRSxTQUFRO1FBQzFELE1BQU0sZ0JBQWdCLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFBO0lBQzND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 |
#!/usr/bin/env node | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
import { cac } from 'cac'; | ||
@@ -28,3 +19,3 @@ import { readFileSync } from 'node:fs'; | ||
.option("--include-example-containing <strings>", 'Only generate test files for examples including one of the given strings', { type: [String], default: ['assert', 'expect'] }) | ||
.action((pattern, options) => __awaiter(void 0, void 0, void 0, function* () { | ||
.action(async (pattern, options) => { | ||
if (!pattern) { | ||
@@ -37,3 +28,3 @@ console.error('Error: Missing required glob pattern'); | ||
try { | ||
yield generateTests(pattern, { | ||
await generateTests(pattern, { | ||
headers: options.header, | ||
@@ -48,5 +39,5 @@ includeExampleContaining: options.includeExampleContaining, | ||
} | ||
})); | ||
}); | ||
cli.help(); | ||
cli.parse(); | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7O0FBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV4QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUN0RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtBQUN0RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUU5RCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFMUIsR0FBRztLQUNBLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0tBQ3BCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsb0NBQW9DLENBQUM7S0FDMUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0tBQy9CLE1BQU0sQ0FDTCw2QkFBNkIsRUFDN0IseUNBQXlDLEVBQ3pDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUNwQjtLQUNBLE1BQU0sQ0FDTCw2QkFBNkIsRUFDN0IsZ0RBQWdELEVBQ2hELEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUM3QjtLQUNBLE1BQU0sQ0FDTCxrQkFBa0IsRUFDbEIsNkdBQTZHLEVBQzdHLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUNoQztLQUNBLE1BQU0sQ0FDTCx3Q0FBd0MsRUFDeEMsMEVBQTBFLEVBQzFFLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQ2xEO0tBQ0EsTUFBTSxDQUFDLENBQU8sT0FBTyxFQUFFLE9BQU8sRUFBRSxFQUFFO0lBQ2pDLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0NBQXNDLENBQUMsQ0FBQTtRQUNyRCxHQUFHLENBQUMsVUFBVSxFQUFFLENBQUE7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO0lBQ3JELElBQUksQ0FBQztRQUNILE1BQU0sYUFBYSxDQUFDLE9BQU8sRUFBRTtZQUMzQixPQUFPLEVBQUUsT0FBTyxDQUFDLE1BQU07WUFDdkIsd0JBQXdCLEVBQUUsT0FBTyxDQUFDLHdCQUF3QjtZQUMxRCxpQkFBaUIsRUFBRSxPQUFPLENBQUMsaUJBQWlCO1lBQzVDLGdCQUFnQixFQUFFLE9BQU8sQ0FBQyxnQkFBZ0I7U0FDM0MsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQ3RCLENBQUM7QUFDSCxDQUFDLENBQUEsQ0FBQyxDQUFBO0FBRUosR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ1YsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFBIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2NsaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQ0EsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLEtBQUssQ0FBQTtBQUN6QixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sU0FBUyxDQUFBO0FBQ3RDLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFDeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUV4QyxNQUFNLGVBQWUsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQTtBQUN0RCxNQUFNLGVBQWUsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTtBQUN0RixNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQTtBQUU5RCxNQUFNLEdBQUcsR0FBRyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUE7QUFFMUIsR0FBRztLQUNBLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO0tBQ3BCLE9BQU8sQ0FBQyxXQUFXLEVBQUUsb0NBQW9DLENBQUM7S0FDMUQsS0FBSyxDQUFDLHdCQUF3QixDQUFDO0tBQy9CLE1BQU0sQ0FDTCw2QkFBNkIsRUFDN0IseUNBQXlDLEVBQ3pDLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxDQUNwQjtLQUNBLE1BQU0sQ0FDTCw2QkFBNkIsRUFDN0IsZ0RBQWdELEVBQ2hELEVBQUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxDQUM3QjtLQUNBLE1BQU0sQ0FDTCxrQkFBa0IsRUFDbEIsNkdBQTZHLEVBQzdHLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsRUFBRSxDQUNoQztLQUNBLE1BQU0sQ0FDTCx3Q0FBd0MsRUFDeEMsMEVBQTBFLEVBQzFFLEVBQUUsSUFBSSxFQUFFLENBQUMsTUFBTSxDQUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLFFBQVEsQ0FBQyxFQUFFLENBQ2xEO0tBQ0EsTUFBTSxDQUFDLEtBQUssRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUU7SUFDakMsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQ0FBc0MsQ0FBQyxDQUFBO1FBQ3JELEdBQUcsQ0FBQyxVQUFVLEVBQUUsQ0FBQTtRQUNoQixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFDRCxPQUFPLENBQUMsS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUE7SUFDckQsSUFBSSxDQUFDO1FBQ0gsTUFBTSxhQUFhLENBQUMsT0FBTyxFQUFFO1lBQzNCLE9BQU8sRUFBRSxPQUFPLENBQUMsTUFBTTtZQUN2Qix3QkFBd0IsRUFBRSxPQUFPLENBQUMsd0JBQXdCO1lBQzFELGlCQUFpQixFQUFFLE9BQU8sQ0FBQyxpQkFBaUI7WUFDNUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLGdCQUFnQjtTQUMzQyxDQUFDLENBQUE7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdEIsQ0FBQztBQUNILENBQUMsQ0FBQyxDQUFBO0FBRUosR0FBRyxDQUFDLElBQUksRUFBRSxDQUFBO0FBQ1YsR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFBIn0= |
@@ -20,5 +20,4 @@ import * as ts from "typescript"; | ||
const reduced = imports.reduce((acc, i) => { | ||
var _a, _b; | ||
if (ts.isNamedImports(i.importClause.namedBindings)) { | ||
const moduleSpecifier = (_a = i === null || i === void 0 ? void 0 : i.moduleSpecifier) === null || _a === void 0 ? void 0 : _a.text; | ||
const moduleSpecifier = i?.moduleSpecifier?.text; | ||
if (!moduleSpecifier) { | ||
@@ -34,3 +33,3 @@ return acc; | ||
if (ts.isNamespaceImport(i.importClause.namedBindings)) { | ||
const moduleSpecifier = (_b = i === null || i === void 0 ? void 0 : i.moduleSpecifier) === null || _b === void 0 ? void 0 : _b.text; | ||
const moduleSpecifier = i?.moduleSpecifier?.text; | ||
if (!moduleSpecifier) { | ||
@@ -51,11 +50,12 @@ return acc; | ||
const names = r.reduce((acc, i) => { | ||
var _a, _b, _c; | ||
const idents = ((_a = i.importClause) === null || _a === void 0 ? void 0 : _a.name) | ||
const idents = i.importClause?.name | ||
? unique([...acc.idents, i.importClause.name.escapedText]) | ||
: acc.idents; | ||
const namedImports = (_b = i.importClause) === null || _b === void 0 ? void 0 : _b.namedBindings; | ||
const namedImports = i.importClause?.namedBindings; | ||
if (!namedImports) { | ||
return Object.assign(Object.assign({}, acc), { idents }); | ||
return { ...acc, idents }; | ||
} | ||
const specifiers = (_c = namedImports.elements) === null || _c === void 0 ? void 0 : _c.filter(e => e).map(s => { | ||
const specifiers = namedImports.elements | ||
?.filter(e => e) | ||
.map(s => { | ||
if (s.propertyName) { | ||
@@ -85,2 +85,2 @@ return `${s.propertyName.text} as ${s.name.escapedText}`; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVoQyxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUFxQjtJQUVyQixNQUFNLE9BQU8sR0FBRyxFQUFpQyxDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLEVBQXlCLENBQUM7SUFFeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUksR0FBYTtJQUM5QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUErQjtJQUMxRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUM1QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTs7UUFDVCxJQUFJLEVBQUUsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsRUFBRSxDQUFDO1lBQ3BELE1BQU0sZUFBZSxHQUFHLE1BQUMsQ0FBQyxhQUFELENBQUMsdUJBQUQsQ0FBQyxDQUFFLGVBQW9DLDBDQUFFLElBQUksQ0FBQztZQUN2RSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7Z0JBQ3JCLE9BQU8sR0FBRyxDQUFDO1lBQ2IsQ0FBQztZQUNELElBQUksQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEdBQUcsQ0FBQyxZQUFZLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQ3pDLENBQUM7WUFDRCxHQUFHLENBQUMsWUFBWSxDQUFDLGVBQWUsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUMxQyxPQUFPLEdBQUcsQ0FBQztRQUNiLENBQUM7UUFDRCxJQUFJLEVBQUUsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDdkQsTUFBTSxlQUFlLEdBQUcsTUFBQyxDQUFDLGFBQUQsQ0FBQyx1QkFBRCxDQUFDLENBQUUsZUFBb0MsMENBQUUsSUFBSSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDckIsT0FBTyxHQUFHLENBQUM7WUFDYixDQUFDO1lBQ0QsSUFBSSxDQUFDLEdBQUcsQ0FBQyxnQkFBZ0IsQ0FBQyxlQUFlLENBQUMsRUFBRSxDQUFDO2dCQUMzQyxHQUFHLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLEdBQUcsRUFBRSxDQUFDO1lBQzdDLENBQUM7WUFDRCxHQUFHLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzlDLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztJQUNILENBQUMsRUFDRCxFQUFFLFlBQVksRUFBRSxFQUFFLEVBQUUsZ0JBQWdCLEVBQUUsRUFBRSxFQUFFLENBQzNDLENBQUM7SUFFRixNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsR0FBRyxDQUNsRSxDQUFDLENBQThCLEVBQUUsRUFBRTtRQUNqQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNkLENBQUMsQ0FDRixDQUFDO0lBRUYsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUMxRCxDQUFDLENBQThCLEVBQUUsRUFBRTtRQUNqQyxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUMsTUFBTSxDQUNwQixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTs7WUFDVCxNQUFNLE1BQU0sR0FBRyxDQUFBLE1BQUEsQ0FBQyxDQUFDLFlBQVksMENBQUUsSUFBSTtnQkFDakMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztnQkFDMUQsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUM7WUFFZixNQUFNLFlBQVksR0FBRyxNQUFBLENBQUMsQ0FBQyxZQUFZLDBDQUFFLGFBQWdDLENBQUM7WUFDdEUsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO2dCQUNsQix1Q0FBWSxHQUFHLEtBQUUsTUFBTSxJQUFHO1lBQzVCLENBQUM7WUFFRCxNQUFNLFVBQVUsR0FBRyxNQUFBLFlBQVksQ0FBQyxRQUFRLDBDQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQ2QsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO2dCQUNQLElBQUksQ0FBQyxDQUFDLFlBQVksRUFBRSxDQUFDO29CQUNuQixPQUFPLEdBQUcsQ0FBQyxDQUFDLFlBQVksQ0FBQyxJQUFJLE9BQU8sQ0FBQyxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDM0QsQ0FBQztnQkFDRCxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDO1lBQzVCLENBQUMsQ0FBQyxDQUFDO1lBRUwsT0FBTztnQkFDTCxRQUFRLEVBQUUsTUFBTSxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsUUFBUSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUM7Z0JBQ2xELE1BQU07YUFDUCxDQUFDO1FBQ0osQ0FBQyxFQUNELEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsRUFBRSxFQUFFLENBQzdCLENBQUM7UUFFRixNQUFNLHFCQUFxQixHQUFHLEtBQUssQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ25ELDhDQUE4QztZQUM5QyxPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMscUJBQXFCLENBQUMsU0FBUyxFQUFFLFNBQVMsRUFBRSxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDaEcsQ0FBQyxDQUFDLENBQUM7UUFDSCxNQUFNLElBQUksR0FDUixLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sS0FBSyxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDOUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztRQUVoQixPQUFPLEVBQUUsQ0FBQyxPQUFPLENBQUMsdUJBQXVCLENBQ3ZDLFNBQVMsRUFBRSxzQ0FBc0M7UUFDakQsRUFBRSxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FDekIsS0FBSyxFQUFFLHNDQUFzQztRQUM3QyxJQUFJLEVBQUcsd0JBQXdCO1FBQy9CLEVBQUUsQ0FBQyxPQUFPLENBQUMsa0JBQWtCLENBQUMscUJBQXFCLENBQUMsQ0FDdkQsRUFDRCxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsZUFBZSxDQUN2QixDQUFDO0lBQ0YsQ0FBQyxDQUNGLENBQUM7SUFFRixPQUFPLENBQUMsR0FBRyxnQkFBZ0IsRUFBRSxHQUFHLFlBQVksQ0FBQyxDQUFDO0FBQ2hELENBQUMifQ== | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW1wb3J0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2ltcG9ydC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssRUFBRSxNQUFNLFlBQVksQ0FBQTtBQUVoQyxNQUFNLFVBQVUsV0FBVyxDQUN6QixNQUFxQjtJQUVyQixNQUFNLE9BQU8sR0FBRyxFQUFpQyxDQUFDO0lBQ2xELE1BQU0sS0FBSyxHQUFHLEVBQXlCLENBQUM7SUFFeEMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7UUFDL0IsSUFBSSxFQUFFLENBQUMsbUJBQW1CLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3JCLENBQUM7YUFBTSxDQUFDO1lBQ04sS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNuQixDQUFDO0lBQ0gsQ0FBQyxDQUFDLENBQUM7SUFFSCxPQUFPLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsQ0FBQztBQUNsQyxDQUFDO0FBRUQsU0FBUyxNQUFNLENBQUksR0FBYTtJQUM5QixPQUFPLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNsQyxDQUFDO0FBRUQsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUErQjtJQUMxRCxNQUFNLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUM1QixDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRTtRQUNULElBQUksRUFBRSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxFQUFFLENBQUM7WUFDcEQsTUFBTSxlQUFlLEdBQUksQ0FBQyxFQUFFLGVBQW9DLEVBQUUsSUFBSSxDQUFDO1lBQ3ZFLElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztnQkFDckIsT0FB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 |
@@ -1,40 +0,30 @@ | ||
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { | ||
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } | ||
return new (P || (P = Promise))(function (resolve, reject) { | ||
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } | ||
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } | ||
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } | ||
step((generator = generator.apply(thisArg, _arguments || [])).next()); | ||
}); | ||
}; | ||
import * as path from 'node:path'; | ||
import * as prettier from "prettier"; | ||
import * as ts from "typescript"; | ||
export function print(ast, options) { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
const resultFile = ts.createSourceFile("result.ts", "", ts.ScriptTarget.Latest, false, ts.ScriptKind.TS); | ||
const printer = ts.createPrinter({ | ||
newLine: ts.NewLineKind.LineFeed, | ||
omitTrailingSemicolon: true, | ||
}); | ||
const result = printer | ||
.printNode(ts.EmitHint.Unspecified, ast, resultFile) | ||
.replaceAll(`\n${options.testFunctionName}(`, `\n\n${options.testFunctionName}(`); | ||
const prettierConfig = yield resolvePrettierConfig(); | ||
const formatted = yield prettier.format(result, Object.assign({ parser: "typescript" }, prettierConfig)); | ||
return formatted; | ||
export async function print(ast, options) { | ||
const resultFile = ts.createSourceFile("result.ts", "", ts.ScriptTarget.Latest, false, ts.ScriptKind.TS); | ||
const printer = ts.createPrinter({ | ||
newLine: ts.NewLineKind.LineFeed, | ||
omitTrailingSemicolon: true, | ||
}); | ||
const result = printer | ||
.printNode(ts.EmitHint.Unspecified, ast, resultFile) | ||
.replaceAll(`\n${options.testFunctionName}(`, `\n\n${options.testFunctionName}(`); | ||
const prettierConfig = await resolvePrettierConfig(); | ||
const formatted = await prettier.format(result, { | ||
parser: "typescript", | ||
...prettierConfig, | ||
}); | ||
return formatted; | ||
} | ||
function resolvePrettierConfig() { | ||
return __awaiter(this, void 0, void 0, function* () { | ||
// NOTE: I am using readme instead of just `process.cwd()` because | ||
// `prettier.resolveConfig` inspects the directory of a file, not the directory directly. | ||
const pathOfReadme = path.resolve(process.cwd(), 'README.md'); | ||
const maybeConfig = yield prettier.resolveConfig(pathOfReadme); | ||
return (maybeConfig !== null && maybeConfig !== void 0 ? maybeConfig : { | ||
semi: false, | ||
singleQuote: true, | ||
}); | ||
async function resolvePrettierConfig() { | ||
// NOTE: I am using readme instead of just `process.cwd()` because | ||
// `prettier.resolveConfig` inspects the directory of a file, not the directory directly. | ||
const pathOfReadme = path.resolve(process.cwd(), 'README.md'); | ||
const maybeConfig = await prettier.resolveConfig(pathOfReadme); | ||
return (maybeConfig ?? { | ||
semi: false, | ||
singleQuote: true, | ||
}); | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmludGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFBO0FBQ3BDLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR2hDLE1BQU0sVUFBZ0IsS0FBSyxDQUN6QixHQUFZLEVBQ1osT0FBa0Q7O1FBRWxELE1BQU0sVUFBVSxHQUFHLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FDcEMsV0FBVyxFQUNYLEVBQUUsRUFDRixFQUFFLENBQUMsWUFBWSxDQUFDLE1BQU0sRUFDdEIsS0FBSyxFQUNMLEVBQUUsQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUNqQixDQUFDO1FBQ0YsTUFBTSxPQUFPLEdBQUcsRUFBRSxDQUFDLGFBQWEsQ0FBQztZQUMvQixPQUFPLEVBQUUsRUFBRSxDQUFDLFdBQVcsQ0FBQyxRQUFRO1lBQ2hDLHFCQUFxQixFQUFFLElBQUk7U0FDNUIsQ0FBQyxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsT0FBTzthQUNuQixTQUFTLENBQUMsRUFBRSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFLFVBQVUsQ0FBQzthQUNuRCxVQUFVLENBQ1QsS0FBSyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsRUFDaEMsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLEdBQUcsQ0FDbkMsQ0FBQztRQUVKLE1BQU0sY0FBYyxHQUFHLE1BQU0scUJBQXFCLEVBQUUsQ0FBQztRQUNyRCxNQUFNLFNBQVMsR0FBRyxNQUFNLFFBQVEsQ0FBQyxNQUFNLENBQUMsTUFBTSxrQkFDNUMsTUFBTSxFQUFFLFlBQVksSUFDakIsY0FBYyxFQUNqQixDQUFDO1FBQ0gsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztDQUFBO0FBRUQsU0FBZSxxQkFBcUI7O1FBQ2xDLGtFQUFrRTtRQUNsRSx5RkFBeUY7UUFDekYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUE7UUFDN0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRS9ELE9BQU8sQ0FDTCxXQUFXLGFBQVgsV0FBVyxjQUFYLFdBQVcsR0FBSTtZQUNiLElBQUksRUFBRSxLQUFLO1lBQ1gsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FDRixDQUFDO0lBQ0osQ0FBQztDQUFBIn0= | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbnRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9wcmludGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxJQUFJLE1BQU0sV0FBVyxDQUFBO0FBQ2pDLE9BQU8sS0FBSyxRQUFRLE1BQU0sVUFBVSxDQUFBO0FBQ3BDLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFBO0FBR2hDLE1BQU0sQ0FBQyxLQUFLLFVBQVUsS0FBSyxDQUN6QixHQUFZLEVBQ1osT0FBa0Q7SUFFbEQsTUFBTSxVQUFVLEdBQUcsRUFBRSxDQUFDLGdCQUFnQixDQUNwQyxXQUFXLEVBQ1gsRUFBRSxFQUNGLEVBQUUsQ0FBQyxZQUFZLENBQUMsTUFBTSxFQUN0QixLQUFLLEVBQ0wsRUFBRSxDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQ2pCLENBQUM7SUFDRixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQy9CLE9BQU8sRUFBRSxFQUFFLENBQUMsV0FBVyxDQUFDLFFBQVE7UUFDaEMscUJBQXFCLEVBQUUsSUFBSTtLQUM1QixDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRyxPQUFPO1NBQ25CLFNBQVMsQ0FBQyxFQUFFLENBQUMsUUFBUSxDQUFDLFdBQVcsRUFBRSxHQUFHLEVBQUUsVUFBVSxDQUFDO1NBQ25ELFVBQVUsQ0FDVCxLQUFLLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxFQUNoQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsR0FBRyxDQUNuQyxDQUFDO0lBRUosTUFBTSxjQUFjLEdBQUcsTUFBTSxxQkFBcUIsRUFBRSxDQUFDO0lBQ3JELE1BQU0sU0FBUyxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7UUFDOUMsTUFBTSxFQUFFLFlBQVk7UUFDcEIsR0FBRyxjQUFjO0tBQ2xCLENBQUMsQ0FBQztJQUNILE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxLQUFLLFVBQVUscUJBQXFCO0lBQ2xDLGtFQUFrRTtJQUNsRSx5RkFBeUY7SUFDekYsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLEVBQUUsV0FBVyxDQUFDLENBQUE7SUFDN0QsTUFBTSxXQUFXLEdBQUcsTUFBTSxRQUFRLENBQUMsYUFBYSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRS9ELE9BQU8sQ0FDTCxXQUFXLElBQUk7UUFDYixJQUFJLEVBQUUsS0FBSztRQUNYLFdBQVcsRUFBRSxJQUFJO0tBQ2xCLENBQ0YsQ0FBQztBQUNKLENBQUMifQ== |
@@ -12,2 +12,3 @@ import * as ts from "typescript"; | ||
class Inspector { | ||
inspector; | ||
constructor(inspector) { | ||
@@ -32,2 +33,4 @@ this.inspector = inspector; | ||
class Filter { | ||
filterKind; | ||
callback; | ||
constructor(kind, inspector) { | ||
@@ -91,2 +94,2 @@ this.filterKind = kind; | ||
} | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBTWpDLE1BQU0sVUFBVSxJQUFJLENBQUMsT0FBaUIsRUFBRSxJQUFtQjtJQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBSUQsTUFBTSxTQUFTO0lBR2IsWUFBWSxTQUFtQztRQUM3QyxJQUFJLENBQUMsU0FBUyxHQUFHLFNBQVMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQW1CO1FBQ3ZCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3pCLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDO0lBQ2QsQ0FBQztDQUNGO0FBRUQsTUFBTSxVQUFVLE9BQU8sQ0FBQyxJQUFtQixFQUFFLFFBQXdCO0lBQ25FLE1BQU0sU0FBUyxHQUFHLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzFDLElBQUksQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDeEIsQ0FBQztBQXNERCxNQUFNLFVBQVUsVUFBVSxDQUN4QixJQUFtQixFQUNuQixJQUFPLEVBQ1AsUUFBZ0M7SUFFaEMsTUFBTSxDQUFDLEdBQUcsSUFBSSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQ3JDLElBQUksQ0FBQyxDQUFDLEVB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 | ||
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sS0FBSyxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBTWpDLE1BQU0sVUFBVSxJQUFJLENBQUMsT0FBaUIsRUFBRSxJQUFtQjtJQUN6RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ2pDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUNWLE9BQU87SUFDVCxDQUFDO0lBRUQsS0FBSyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsYUFBYSxFQUFFLEVBQUUsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2hCLENBQUM7QUFDSCxDQUFDO0FBSUQsTUFBTSxTQUFTO0lBQ0ksU0FBUyxDQUEyQjtJQUVyRCxZQUFZLFNBQW1DO1FBQzdDLElBQUksQ0FBQyxTQUFTLEdBQUcsU0FBUyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBbUI7UUFDdkIsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7WUFDekIsT0FBTyxJQUFJLENBQUM7UUFDZCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0NBQ0Y7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUFDLElBQW1CLEVBQUUsUUFBd0I7SUFDbkUsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDMUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN4QixDQUFDO0FBc0RELE1BQU0sVUFBVSxVQUFVLENBQ3hCLElBQW1CLEVBQ25CLElBQU8sRUFDUCxRQUFnQztJQUVoQyxNQUFNLENBQUMsR0FBRyxJQUFJLE1BQU0sQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUM7SUFDckMs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 |
{ | ||
"name": "generate-jsdoc-example-tests", | ||
"version": "0.1.0", | ||
"version": "0.1.1", | ||
"main": "./lib/app.js", | ||
@@ -10,4 +10,7 @@ "types": "./lib/app.d.ts", | ||
}, | ||
"files": [ | ||
"lib/**/*" | ||
], | ||
"license": "Apache-2.0", | ||
"repository": "SacDeNoeuds/generate-jsdoc-example-tests", | ||
"repository": "https://github.com/SacDeNoeuds/generate-jsdoc-example-tests", | ||
"author": { | ||
@@ -17,2 +20,12 @@ "name": "SacDeNoeuds", | ||
}, | ||
"keywords": [ | ||
"documentation", | ||
"generate", | ||
"jsdoc", | ||
"example", | ||
"test", | ||
"vitest", | ||
"jest", | ||
"tsdoc" | ||
], | ||
"scripts": { | ||
@@ -22,4 +35,5 @@ "test": "vitest src/__tests__", | ||
"prepack": "npm run build", | ||
"postbuild": "rimraf ./lib/__tests__", | ||
"clean": "rimraf ./lib/*", | ||
"try": "npm run build && chmod +x ./lib/cli.js && ./lib/cli.js './examples/*'" | ||
"debug": "npm run build && chmod +x ./lib/cli.js && ./lib/cli.js './examples/*'" | ||
}, | ||
@@ -26,0 +40,0 @@ "devDependencies": { |
281
README.md
# generate-jsdoc-example-tests | ||
Generate test files from your JSDoc @example comments. See [vitest](#vitest) cookbook and adapt it to your test runner π. | ||
Generate test files from your JSDoc @example comments. See configuration details in the [vitest](#vitest) cookbook and adapt it to your favorite test runner π. | ||
**It offers you the certainty that your JSDoc @example are valid.** | ||
## Why | ||
## Why β TL;DR | ||
JSDoc is an awesome documentation tool with great IDE support providing intellisense on-demand. Pure love. | ||
Full announcement [here](https://sacdenoeuds.github.io/generate-jsdoc-example-tests/2025-04-announcement.html). | ||
Yet it is easy for the code examples to go out-of-sync with the implementation. This library bridges this gap. | ||
I love documenting my functions using JSDoc examples β imo example are the best doc one can have! β but I was tired of my doc getting obsolete. And tests don't provide in-IDE doc, so I figured: why not reconcile the 2 ?<br> | ||
Write JSDoc examples, and generate tests from them⦠| ||
1. To make sure examples never go obsolete π. | ||
2. β¦ And to test my stuff like I would anyway, you sillies π€ | ||
I do not aim at writing a test runner though, this is a whole area of expertise and lots of people do an incredible job at it, offering goodies like coverage and various test reporters. | ||
So here comesβ¦ generate-jsdoc-example-tests π. | ||
**I aim at integrating with test runners.** | ||
<details> | ||
<summary>Prior art</summary> | ||
- [tsdoc-testify](https://github.com/akito0107/tsdoc-testify) β see [Thanks](#thanks). Very old and unmaintained project, an excellent base to build this one π. | ||
- [jsdoc-spec](https://github.com/AT-290690/jsdoc-spec) β both an example parser _and_ the test runner, without the test runner goodies. | ||
- [ts-docs](https://ts-docs.github.io/ts-docs/pages/Guides/Documentation%20Tests.html) β same, on the test side, it is both an example parser _and_ a test runner, without the test runner goodies. Stuck to TypeScript v4. | ||
</details> | ||
## Installation | ||
@@ -21,4 +32,174 @@ | ||
npm i -D generate-jsdoc-example-tests | ||
# or directly via npx without installation: | ||
npx generate-jsdoc-example-tests | ||
``` | ||
## Demo | ||
You document your functions, methods, constants & classes, for coworkers or your future self, you get tests for free: | ||
<details> | ||
<summary>Documenting a function</summary> | ||
```ts | ||
// src/date-formatter.ts | ||
/** | ||
* @example | ||
* ```ts | ||
* import { formatDateYear } from './date-formatter' | ||
* | ||
* expect(formatDateYear(new Date('2026-01-01')).toBe('2026') | ||
* ``` | ||
*/ | ||
export function formatDateYear(date: Date) {β¦} | ||
``` | ||
Generate tests: | ||
```sh | ||
npx gen-jet 'src/**' \ | ||
--header 'import { expect, test } from "vitest"' \ | ||
--test-file-extension '.example.test' # do not provide the `.ts` or `.js` | ||
``` | ||
Generated test: | ||
```ts | ||
// src/date-formatter.example.test.ts | ||
// DO NOT EDIT β¦ | ||
import { expect, test } from 'vitest' // the provided header | ||
import { formatDateYear } from './date-formatter' | ||
test('Example 1', () => { | ||
expect(formatDateYear(new Date('2026-01-01'))).toBe('2026') | ||
}) | ||
``` | ||
</details> | ||
<details> | ||
<summary>Documenting a class</summary> | ||
```ts | ||
// src/date-formatter.ts | ||
class DateFormatter { | ||
/** | ||
* @example | ||
* ```ts | ||
* import { DateFormatter } from './date-formatter' | ||
* | ||
* const formatter = new DateFormatter() | ||
* expect(formatter.formatYear(new Date('2026-01-01')).toBe('2026') | ||
* ``` | ||
*/ | ||
formatYear(date: Date) {β¦} | ||
} | ||
``` | ||
Generate tests: | ||
```sh | ||
npx gen-jet 'src/**' \ | ||
--header 'import { expect, test } from "vitest"' \ | ||
--test-file-extension '.example.test' # do not provide the `.ts` or `.js` | ||
``` | ||
Generated test: | ||
```ts | ||
// src/date-formatter.example.test.ts | ||
// DO NOT EDIT β¦ | ||
import { expect, test } from 'vitest' // the provided header | ||
import { DateFormatter } from './date-formatter' | ||
test('Example 1', () => { | ||
const formatter = new DateFormatter() | ||
expect(formatter.formatYear(new Date('2026-01-01'))).toBe('2026') | ||
}) | ||
``` | ||
</details> | ||
<details> | ||
<summary>Documenting a constant</summary> | ||
```ts | ||
// src/date-formatter.ts | ||
/** | ||
* @example | ||
* ```ts | ||
* import { formatDate, yearFormat } from './date-formatter' | ||
* | ||
* const date = new Date('2026-01-01') | ||
* expect(formatDate(date, yearFormat)).toBe('2026') | ||
* ``` | ||
*/ | ||
export const yearFormat = 'YYYY' | ||
export const formatDate = (date: Date, format: string): string => {β¦} | ||
``` | ||
Generate tests: | ||
```sh | ||
npx gen-jet 'src/**' \ | ||
--header 'import { expect, test } from "vitest"' \ | ||
--test-file-extension '.example.test' # do not provide the `.ts` or `.js` | ||
``` | ||
Generated test: | ||
```ts | ||
// src/date-formatter.example.test.ts | ||
// DO NOT EDIT β¦ | ||
import { expect, test } from 'vitest' // the provided header | ||
import { formatDate, yearFormat } from './date-formatter' | ||
test('Example 1', () => { | ||
const date = new Date('2026-01-01') | ||
expect(formatDate(date, yearFormat)).toBe('2026') | ||
}) | ||
``` | ||
</details> | ||
<details> | ||
<summary>Documenting an interface / a type</summary> | ||
```ts | ||
// src/date-formatter.ts | ||
interface DateFormatter { | ||
/** | ||
* @example | ||
* ```ts | ||
* import { makeDateFormatter } from './date-formatter' | ||
* | ||
* const formatter = makeDateFormatter() | ||
* expect(formatter.formatYear(new Date('2026-01-01')).toBe('2026') | ||
* ``` | ||
*/ | ||
formatYear(date: Date): string | ||
} | ||
export const makeDateFormatter = (): DateFormatter => ({ | ||
formatYear: () => {β¦}, | ||
}) | ||
``` | ||
Generate tests: | ||
```sh | ||
npx gen-jet 'src/**' \ | ||
--header 'import { expect, test } from "vitest"' \ | ||
--test-file-extension '.example.test' # do not provide the `.ts` or `.js` | ||
``` | ||
Generated test: | ||
```ts | ||
// src/date-formatter.example.test.ts | ||
// DO NOT EDIT β¦ | ||
import { expect, test } from 'vitest' // the provided header | ||
import { makeDateFormatter } from './date-formatter' | ||
test('Example 1', () => { | ||
const formatter = makeDateFormatter() | ||
expect(formatter.formatYear(new Date('2026-01-01'))).toBe('2026') | ||
}) | ||
``` | ||
</details> | ||
## Usage | ||
@@ -28,19 +209,17 @@ | ||
`gen-jet`: gen = `generate` + j = `jsdoc` + e = `example` + t = `tests`. | ||
`gen-jet`: gen = **gen**erate ; jet = **J**sdoc + **E**xample + **T**ests. | ||
```sh | ||
$ npx gen-jet --help | ||
Usage: | ||
$ gen-jet npx gen-jet './src/**' | ||
$ npx gen-jet 'src/**' | ||
Commands: | ||
[pattern] Generate tests from JSDoc @example | ||
# Usage with options: | ||
$ npx gen-jet 'src/**' \ | ||
--test-file-extension '.example.test' \ | ||
--test-function-name 'it' \ | ||
--header 'import { it, expect } from "vitest | jest | whatever"' | ||
--header 'import { myGlobalImport } from "~/some-global-stuff"' | ||
--include-example-containing expect,assert,assertStrict | ||
Options: | ||
--test-function-name [name] Name of test function (default: "test") (default: test) | ||
--test-file-extension [ext] Test file extension (default: ".example.test") (default: .example.test) | ||
--header [texts] Header texts to include in test files, ie: --header 'import { test } from "vitest"' --header 'import β¦' (default: ) | ||
--include-example-containing <strings> Only generate test files for examples including one of the given strings (default: assert,expect) | ||
-v, --version Display version number | ||
-h, --help Display this message | ||
# For a full CLI usage, checkout | ||
$ gen-jet --help | ||
``` | ||
@@ -51,3 +230,3 @@ | ||
```ts | ||
import { generateTests } from 'generate-jsdoc-example-tests' | ||
import { generateTests, type GenerateOptions } from 'generate-jsdoc-example-tests' | ||
@@ -58,3 +237,5 @@ generateTests('./src/**') | ||
generateTests('./src/**', { ...options }) | ||
const myOptions: GenerateOptions = { β¦ } | ||
generateTests('./src/**', myOptions) | ||
.then(() => console.info('tests generated')) | ||
@@ -75,6 +256,8 @@ .catch(console.error) | ||
generateTests('./src/**', { | ||
testFunctionName: 'it', | ||
testFileExtension: '.generated.test', // default is '.example.test' ; do not provide `.ts` or `.js` ! | ||
testFunctionName: 'it', // default is 'test' | ||
headers: ['import { it, expect } from "vitest"'], | ||
includeExampleContaining: ['expect'], | ||
testFileExtension: '.generated.test', // do not provide `.ts` or `.js` | ||
// keywords the JSDoc @example body must contain to be included in the generated tests. | ||
includeExampleContaining: ['expect'], // default is ['assert', 'expect'] | ||
}) | ||
@@ -85,28 +268,4 @@ .then(() => console.info('tests generated')) | ||
Then you can write examples like this: | ||
```ts | ||
/** | ||
* @example | ||
* ```ts | ||
* import { myFn } from './my-fn' | ||
* | ||
* expect(myFn()).toBe(true) | ||
* ``` | ||
*/ | ||
export const myFn = () => true | ||
``` | ||
## FAQ | ||
It will the generate the following file: | ||
```ts | ||
import { it, expect } from 'vitest' | ||
import { myFn } from './my-fn' | ||
it('myFn', () => { | ||
expect(myFn()).toBe(true) | ||
}) | ||
``` | ||
## Options | ||
### Which tests are included ? | ||
@@ -120,3 +279,3 @@ | ||
/** | ||
* @example This one is included | ||
* @example This one is included because it contains `expect` | ||
* ```ts | ||
@@ -126,5 +285,8 @@ * import { myFn } from './my-fn' | ||
* ``` | ||
* @example this one is omitted | ||
* {@skipTest} | ||
* @example This is omitted because there is no `expect` or `assert` | ||
* ```ts | ||
* myFn('toto') // invalid arg. | ||
* ``` | ||
* @example this one is explicitly omitted {@skipTest} | ||
* ```ts | ||
* import { myFn } from './my-fn' | ||
@@ -151,3 +313,3 @@ * expect(myFn()).toBe(false) | ||
* ``` | ||
* import * as assert from "assert"; | ||
* import assert from "assert"; | ||
* import { sum } from "./sample"; | ||
@@ -164,3 +326,3 @@ * | ||
```ts | ||
import * as assert from "assert"; | ||
import assert from "assert"; | ||
import { sum } from "./sample"; | ||
@@ -184,1 +346,12 @@ | ||
This project is licensed under the Apache License 2.0 License - see the [LICENSE](LICENSE) file for details | ||
## Contributing | ||
First of all, thank you deeply if you want to participate. | ||
Please visit the [contributing](./CONTRIBUTING.md) section for a detailed guide (getting started, roadmap). | ||
> If you like the project but don't have time to contribute, all good ! There are other ways to support the project and show your appreciation, which we would also be very happy about: | ||
> - Star the project | ||
> - Tweet about it | ||
> - Refer this project in your projectβs readme | ||
> - Mention the project at local meetups and tell your friends/colleagues |
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
No repository
Supply chain riskPackage does not have a linked source code repository. Without this field, a package will have no reference to the location of the source code use to generate the package.
Found 1 instance in 1 package
53
130.43%347
99.43%69859
-43.52%17
-61.36%587
-74.39%1
Infinity%6
-14.29%