MCPcopy Create free account
hub / github.com/TanStack/cli / finalizeAddOns

Function finalizeAddOns

packages/create/src/add-ons.ts:17–62  ·  view source on GitHub ↗
(
  framework: Framework,
  mode: string,
  chosenAddOnIDs: Array<string>,
)

Source from the content-addressed store, hash-verified

15
16// Turn the list of chosen add-on IDs into a final list of add-ons by resolving dependencies
17export async function finalizeAddOns(
18 framework: Framework,
19 mode: string,
20 chosenAddOnIDs: Array<string>,
21): Promise<Array<AddOn>> {
22 const finalAddOnIDs = new Set(chosenAddOnIDs)
23
24 const addOns = getAllAddOns(framework, mode)
25
26 for (const addOnID of finalAddOnIDs) {
27 let addOn: AddOn | undefined
28 const localAddOn =
29 addOns.find((a) => a.id === addOnID) ??
30 addOns.find((a) => a.id.toLowerCase() === addOnID.toLowerCase())
31 if (localAddOn) {
32 addOn = loadAddOn(localAddOn)
33 if (localAddOn.id !== addOnID) {
34 // Replace the mistyped ID with the canonical one
35 finalAddOnIDs.delete(addOnID)
36 finalAddOnIDs.add(localAddOn.id)
37 }
38 } else if (addOnID.startsWith('http')) {
39 addOn = await loadRemoteAddOn(addOnID)
40 addOns.push(addOn)
41 } else {
42 const suggestion = findClosestAddOn(addOnID, addOns)
43 throw new Error(
44 `Add-on ${addOnID} not found${suggestion ? `. Did you mean "${suggestion}"?` : ''}`,
45 )
46 }
47
48 for (const dependsOn of addOn.dependsOn || []) {
49 const dep = addOns.find((a) => a.id === dependsOn)
50 if (!dep) {
51 throw new Error(`Dependency ${dependsOn} not found`)
52 }
53 finalAddOnIDs.add(dep.id)
54 }
55 }
56
57 const finalAddOns = [...finalAddOnIDs].map(
58 (id) => addOns.find((a) => a.id === id)!,
59 )
60
61 return finalAddOns
62}
63
64function loadAddOn(addOn: AddOn): AddOn {
65 return addOn

Callers

nothing calls this directly

Calls 6

addMethod · 0.80
getAllAddOnsFunction · 0.70
loadAddOnFunction · 0.70
loadRemoteAddOnFunction · 0.70
findClosestAddOnFunction · 0.70
deleteMethod · 0.65

Tested by

no test coverage detected