Comparing version 1.1.0-beta.4 to 1.1.0-beta.5
@@ -5,4 +5,7 @@ import colorizer from "json-colorizer"; | ||
import picocolors from "picocolors"; | ||
import select from "@inquirer/select"; | ||
import autocomplete, { Separator } from "inquirer-autocomplete-standalone"; | ||
import Fuse from "fuse.js"; | ||
import { glob } from "glob"; | ||
import spaceCase from "to-space-case"; | ||
import titleize from "titleize"; | ||
@@ -18,17 +21,52 @@ export const getStory = (storyFilePath: string) => | ||
} else { | ||
const storyFiles = await glob("**/*.fetch.ts", { | ||
const pattern = "**/*.fetch.ts"; | ||
const storyFiles = await glob(pattern, { | ||
ignore: ["node_modules/**"], | ||
}); | ||
if (storyFiles.length === 0) { | ||
console.log("No story files (*.fetch.ts) found"); | ||
console.log(`No story files (${pattern}) found`); | ||
process.exit(0); | ||
} | ||
const stories = await Promise.all(storyFiles.map(getStory)); | ||
return select({ | ||
const items = await Promise.all( | ||
storyFiles.map(async (file) => ({ file, story: await getStory(file) })), | ||
); | ||
const fuse = new Fuse(items, { | ||
keys: [ | ||
{ | ||
name: "title", | ||
getFn: (item) => item.story.name, | ||
}, | ||
], | ||
}); | ||
return await autocomplete({ | ||
message: "Select a fetch story", | ||
choices: stories.map((story) => ({ | ||
name: story.name, | ||
value: story, | ||
description: story.url, | ||
})), | ||
source: async (input) => { | ||
const results = input | ||
? fuse.search(input).map((result) => result.item) | ||
: items; | ||
const groups: { [K: string]: RequestStory[] } = {}; | ||
await Promise.all( | ||
results.map(async (item) => { | ||
const group = path.dirname(item.file); | ||
groups[group] ??= []; | ||
groups[group].push(item.story); | ||
}), | ||
); | ||
return Object.keys(groups) | ||
.map((group) => [ | ||
new Separator( | ||
picocolors.gray( | ||
group.split(path.sep).map(spaceCase).map(titleize).join(" / "), | ||
), | ||
), | ||
...groups[group].map((story) => ({ | ||
name: story.name, | ||
value: story, | ||
description: `${picocolors.green(story.request.method)} ${ | ||
story.url | ||
}`, | ||
})), | ||
]) | ||
.flat(); | ||
}, | ||
}); | ||
@@ -35,0 +73,0 @@ } |
{ | ||
"name": "fetchbook", | ||
"version": "1.1.0-beta.4", | ||
"version": "1.1.0-beta.5", | ||
"description": "Manage your HTTP requests", | ||
@@ -12,9 +12,17 @@ "author": "Alejandro Tardín <alejandro@tardin.com>", | ||
"fetch-to-curl": "^0.6.0", | ||
"fuse.js": "^6.6.2", | ||
"glob": "^10.3.10", | ||
"inquirer-autocomplete-standalone": "^0.7.0", | ||
"json-colorizer": "^2.2.2", | ||
"picocolors": "^1.0.0" | ||
"picocolors": "^1.0.0", | ||
"titleize": "^4.0.0", | ||
"to-space-case": "^1.0.0" | ||
}, | ||
"devDependencies": { | ||
"@types/to-space-case": "^1.0.0", | ||
"bun-types": "latest", | ||
"husky": "^8.0.3", | ||
"json-server": "^0.17.4", | ||
"lint-staged": "^14.0.1", | ||
"prettier": "^3.0.3", | ||
"semantic-release": "^22.0.5", | ||
@@ -31,3 +39,4 @@ "start-server-and-test": "^2.0.1", | ||
"test:start": "json-server --quiet --host :: test/db.json", | ||
"semantic-release": "semantic-release" | ||
"semantic-release": "semantic-release", | ||
"prepare": "husky install" | ||
}, | ||
@@ -46,3 +55,6 @@ "repository": { | ||
] | ||
}, | ||
"lint-staged": { | ||
"*.{js,ts,json,md,yml}": "prettier --write" | ||
} | ||
} |
8918
12
248
11
9
+ Addedfuse.js@^6.6.2
+ Addedtitleize@^4.0.0
+ Addedto-space-case@^1.0.0
+ Added@inquirer/core@3.1.2(transitive)
+ Added@types/mute-stream@0.0.1(transitive)
+ Addedescape-string-regexp@5.0.0(transitive)
+ Addedfigures@5.0.0(transitive)
+ Addedfuse.js@6.6.2(transitive)
+ Addedinquirer-autocomplete-standalone@0.7.0(transitive)
+ Addedis-unicode-supported@1.3.0(transitive)
+ Addedtitleize@4.0.0(transitive)
+ Addedto-no-case@1.0.2(transitive)
+ Addedto-space-case@1.0.0(transitive)