Skip to content

Conversation

@wdeu
Copy link

@wdeu wdeu commented Jan 8, 2026

Description

Screencast

Checklist

- Prettier
- Change Icon Name
- Icon Change
- Category "Web" added
- docs: improve README formatting and structure
- feat: initial release of Eurobuch Search extension
- Initial commit
@raycastbot
Copy link
Collaborator

Congratulations on your new Raycast extension! 🚀

Due to our current reduced availability, the initial review may take up to 10-15 business days.

Once the PR is approved and merged, the extension will be available on our Store.

Copy link
Author

@wdeu wdeu left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi, thanks for your help. I hope it works now.

wdeu

This comment was marked as resolved.

wdeu added 4 commits January 9, 2026 20:19
- final check
- Merge branch \'contributions/merge-1768067507801\'
- Pull contributions
- flat icon
- pre-publish-check
- fix: add null checks for match variable and void for showToast
- fix: typescript errors and invalid icon references
- Icon Update €
- feat: update extension icon to simpler design
- Typescript Fix
- docs: add properly sized screenshots
- docs: add screenshots
@wdeu wdeu marked this pull request as ready for review January 11, 2026 15:48
@greptile-apps
Copy link
Contributor

greptile-apps bot commented Jan 11, 2026

Greptile Overview

Greptile Summary

This PR introduces a new Raycast extension for searching and comparing book prices on Eurobuch, a European book marketplace aggregator. The extension provides a polished user experience with smart ISBN detection, automatic format conversion, and comprehensive price comparison features.

Key Features

  • Search by ISBN, title, or author with intelligent auto-fill from clipboard/selection
  • Automatic ISBN-10 to ISBN-13 conversion
  • Price comparison across multiple European platforms
  • Results sorted by total cost (price + shipping)
  • Comprehensive test coverage with Vitest
  • Well-documented with README, CHANGELOG, and contributing guidelines

Critical Issues Found

1. Manual Preferences Interface Definition ⚠️

The extension manually defines the Preferences interface (lines 16-20 in eurobuch-search.tsx), which violates repository rule d93fc9fb. Raycast auto-generates these types in raycast-env.d.ts, and manual definitions can become out of sync with the actual package.json configuration.

2. ISBN-10 Regex Pattern Bug 🐛

Lines 181 and 193 use an incorrect regex pattern /^\d{10}[\dXx]?$|^\d{13}$/ that matches 11-character strings (10 digits + X), when ISBN-10 should be exactly 10 characters. This is inconsistent with line 125 which correctly uses /^\d{9}[\dXx]$/. This bug could cause the extension to incorrectly identify non-ISBN strings as valid ISBNs.

3. Non-Standard package.json Fields

The package.json includes repository, bugs, and homepage fields (lines 114-122) that are not present in other Raycast extensions and should be removed.

Additional Issues

  • Version should be 1.0.0 instead of 2.0.0 for an initial release
  • CHANGELOG.md contains placeholder text {PR_MERGE_DATE} that needs proper version information
  • Test file duplicates parseEurobuchXML function instead of importing from source (affects maintainability)

Positive Aspects

✅ Excellent test coverage with comprehensive edge case testing
✅ Clean code structure with good separation of concerns
✅ Proper error handling for API failures
✅ Required metadata screenshots included
✅ Helpful pre-publish validation script
✅ Comprehensive documentation

The extension is well-built overall, but the critical issues (especially the manual Preferences interface and ISBN regex bug) must be fixed before merging.

Confidence Score: 3/5

  • This PR requires fixes to critical issues before merging - specifically the manual Preferences interface and ISBN regex bugs
  • Score of 3 reflects a well-structured extension with good test coverage and documentation, but with three critical issues that must be addressed: (1) manual Preferences interface definition violating repository rules, (2) ISBN-10 regex pattern bug that could cause incorrect validation, and (3) non-standard package.json fields. The logic errors could lead to runtime bugs with ISBN detection.
  • Pay close attention to src/eurobuch-search.tsx (lines 16-20, 181, 193) for the Preferences interface and ISBN regex bugs, and package.json (lines 4, 114-122) for version and metadata cleanup

Important Files Changed

File Analysis

Filename Score Overview
extensions/eurobuch-search/src/eurobuch-search.tsx 3/5 Main extension file with manual Preferences interface definition (violates rule) and ISBN regex pattern inconsistency on lines 181/193 vs 125
extensions/eurobuch-search/package.json 3/5 Contains repository/bugs/homepage fields not used in other Raycast extensions, version is 2.0.0 instead of 1.0.0 for initial release
extensions/eurobuch-search/CHANGELOG.md 4/5 Contains placeholder text {PR_MERGE_DATE} that should be replaced with actual version info
extensions/eurobuch-search/src/tests/eurobuch-search.test.ts 4/5 Comprehensive tests but duplicates parseEurobuchXML code instead of importing from source file

Copy link
Contributor

@greptile-apps greptile-apps bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

6 files reviewed, 6 comments

Edit Code Review Agent Settings | Greptile

Comment on lines 16 to 20
interface Preferences {
platform: string;
password: string;
resultLimit: string;
}
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Preferences interface should not be manually defined. Raycast auto-generates this type in raycast-env.d.ts when the extension runs. Manual definitions can become out of sync with your actual configuration in package.json.

Remove this interface and import the type from the auto-generated file instead:

Suggested change
interface Preferences {
platform: string;
password: string;
resultLimit: string;
}
// Remove this interface - it's auto-generated in raycast-env.d.ts

This follows the repository rule: "Don't manually define Preferences for getPreferenceValues(); they're auto-generated in raycast-env.d.ts"

const cleaned = selected.trim();

// Check if it looks like an ISBN (10 or 13 digits, possibly with X)
if (/^\d{10}[\dXx]?$|^\d{13}$/.test(cleaned.replace(/[-\s]/g, ""))) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ISBN-10 regex pattern is incorrect. The pattern /^\d{10}[\dXx]?$|^\d{13}$/ will match:

  • 10 digits (valid ISBN-10 without X)
  • 11 characters (10 digits + X) - INCORRECT!
  • 13 digits (valid ISBN-13)

ISBN-10 format is exactly 10 characters: 9 digits + 1 check digit (0-9 or X). The correct pattern should be /^\d{9}[\dXx]$|^\d{13}$/ to match exactly 10 or 13 characters, which is consistent with line 125.

Suggested change
if (/^\d{10}[\dXx]?$|^\d{13}$/.test(cleaned.replace(/[-\s]/g, ""))) {
if (/^\d{9}[\dXx]$|^\d{13}$/.test(cleaned.replace(/[-\s]/g, ""))) {

const cleaned = clipboardText.trim();

// Check if clipboard contains an ISBN
if (/^\d{10}[\dXx]?$|^\d{13}$/.test(cleaned.replace(/[-\s]/g, ""))) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same ISBN-10 regex pattern issue as line 181. The pattern /^\d{10}[\dXx]?$|^\d{13}$/ incorrectly matches 11-character strings (10 digits + X).

Suggested change
if (/^\d{10}[\dXx]?$|^\d{13}$/.test(cleaned.replace(/[-\s]/g, ""))) {
if (/^\d{9}[\dXx]$|^\d{13}$/.test(cleaned.replace(/[-\s]/g, ""))) {

Comment on lines 114 to 122
"repository": {
"type": "git",
"url": "https://github.com/wdeu/eurobuch-search.git"
},
"bugs": {
"url": "https://github.com/wdeu/eurobuch-search/issues"
},
"homepage": "https://github.com/wdeu/eurobuch-search#readme",
"$schema": "https://www.raycast.com/schemas/extension.json"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The repository, bugs, and homepage fields should not be included in Raycast extension package.json files. These fields are not used in other extensions in this repository (checked extensions/1bookmark and extensions/0x0 as examples).

Suggested change
"repository": {
"type": "git",
"url": "https://github.com/wdeu/eurobuch-search.git"
},
"bugs": {
"url": "https://github.com/wdeu/eurobuch-search/issues"
},
"homepage": "https://github.com/wdeu/eurobuch-search#readme",
"$schema": "https://www.raycast.com/schemas/extension.json"
"$schema": "https://www.raycast.com/schemas/extension.json"
}

Remove these fields as they're specific to standalone npm packages, not Raycast extensions.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

{
"name": "eurobuch-search",
"title": "Eurobuch Search",
"version": "2.0.0",
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The version should be 1.0.0 for an initial release, not 2.0.0. Semantic versioning starts at 1.0.0 for the first stable release.

Suggested change
"version": "2.0.0",
"version": "1.0.0",

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

@@ -0,0 +1,3 @@
# Eurobuch Search Changelog

## [Initial Version] - {PR_MERGE_DATE} No newline at end of file
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The CHANGELOG contains a placeholder {PR_MERGE_DATE} that should be replaced with actual version information and changes. For an initial release, this should describe what features are included.

Suggested change
## [Initial Version] - {PR_MERGE_DATE}
## [1.0.0] - 2025-01-XX
- Initial release
- Search books by ISBN, title, or author
- Compare prices across European book platforms
- Auto-detect ISBN from clipboard or selection
- Automatic ISBN-10 to ISBN-13 conversion
- Sort results by total price (book + shipping)

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants