Skip to content

feat: add Expo Skills to the curated lookup table - #12

Open
mikolajadamowicz wants to merge 3 commits into
callstackincubator:mainfrom
mikolajadamowicz:expo-skills
Open

mikolajadamowicz wants to merge 3 commits into
callstackincubator:mainfrom
mikolajadamowicz:expo-skills

Conversation

@mikolajadamowicz

Copy link
Copy Markdown

Adds expo/skills as a fifth skill source and maps 19 of its skills onto the Expo packages that indicate them.

Two changes to scripts/sync-lookup.mjs were needed to support this repo, and both are general rather than Expo-specific.

Supporting skills outside a top-level skills/ directory

The four existing sources all keep their skills in skills/ at the repo root. Expo does not: expo/skills is a plugin repo, and its skills live under plugins/expo/skills. Requesting contents/skills returns a 404, so the sync failed outright.

A source entry can now set skillsPath to override the location. The other five sources omit it and fall back to skills.

Stripping YAML quotes from descriptions

Several Expo descriptions contain : , for example "the @expo/ui package: real SwiftUI on iOS". YAML requires such a scalar to be quoted, so Expo quotes them, which is correct.

extractDescription read the raw text after description: and never removed the surrounding delimiters, so those quotes ended up stored as part of the description and printed back to the user in the reason: line. The inline branch now strips a matching leading and trailing " or '. The block scalar branch is untouched, because a quote inside a block scalar is real text.

This also fixes six stored descriptions, including software-mansion-labs/skills:expo-horizon, which had the same problem before this change.

Curation

A source entry can now list excludedSkills, so the table can mirror a repo minus the skills we choose not to recommend. Four Expo skills are excluded:

  • expo-dom and expo-web-to-native are migration guides for projects that have not adopted React Native yet. Their real trigger is the absence of React Native, which a package.json scan cannot detect. Both were originally mapped to react-native-web, but that package only appears once a project has already migrated.
  • expo-app-clip covers a feature almost no app ships, and it would fire on every Expo project.
  • expo-skill-feedback is a feedback channel with bundled opt-in telemetry rather than engineering guidance.

expo-brownfield was originally mapped to @callstack/react-native-brownfield. That package is the bare React Native brownfield path, so the projects most likely to match it are the ones that deliberately chose not to use Expo. It now hangs off expo instead.

Mappings

Nine skills are mapped to the expo package: expo-animation, expo-brownfield, expo-data-fetching, expo-design-system, expo-examples, expo-native-ui, expo-overview, expo-project-structure, and expo-upgrade.

The rest are mapped to packages that indicate them directly:

Package Skill
@expo/ui expo-ui
@expo/server eas-hosting
expo-router expo-router
expo-dev-client expo-dev-client
expo-updates eas-update-insights
expo-observe eas-observe
expo-modules-core, expo-module-scripts expo-module
eas-cli eas-app-stores, eas-simulator, eas-workflows

Note that eas-cli is usually run through npx rather than listed as a dependency, so those three will rarely match in practice.

Testing

test/fixtures/expo-router-app/ is a new fixture covering the router and EAS packages, with an e2e case asserting the skills it should pull in. Expectations for the existing expo-app and brownfield-app fixtures were updated to match the new mappings.

All 58 tests pass.

Also included

README.md and LICENSE were regenerated by the sync script, which adds Expo to the source list and appends their MIT license.

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

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant