Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
"dev:v4": "pnpm -F v4 dev",
"preview": "pnpm -F docs preview",
"test": "pnpm -F shadcn-svelte test",
"build:registry-template": "pnpm build:cli && pnpm -F registry-template build:registry",
"check": "pnpm -F docs check && pnpm -F \"./packages/**\" check",
"lint": "prettier --check . && eslint .",
"format": "prettier --write .",
Expand Down
5 changes: 5 additions & 0 deletions packages/cli/__mocks__/fs.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// we can also use `import`, but then
// every export should be explicitly defined
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { fs } = require("memfs");
module.exports = fs;
5 changes: 5 additions & 0 deletions packages/cli/__mocks__/fs/promises.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
// we can also use `import`, but then
// every export should be explicitly defined
// eslint-disable-next-line @typescript-eslint/no-require-imports
const { fs } = require("memfs");
module.exports = fs.promises;
3 changes: 2 additions & 1 deletion packages/cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@
"start": "node dist/index.js",
"start:dev": "cross-env COMPONENTS_REGISTRY_URL=http://localhost:5173/registry node dist/index.js",
"start:proxy": "pnpm dlx straightforward@latest --port 9000",
"test": "vitest"
"test": "pnpm -w build:registry-template && vitest"
},
"dependencies": {
"@svecosystem/strip-types": "^0.0.2",
Expand All @@ -55,6 +55,7 @@
"estree-walker": "^3.0.3",
"get-tsconfig": "^4.7.3",
"ignore": "^7.0.4",
"memfs": "^4.17.2",
Comment thread
AdrianGonz97 marked this conversation as resolved.
"package-manager-detector": "^1.2.0",
"semver": "^7.7.1",
"sucrase": "^3.35.0",
Expand Down
39 changes: 27 additions & 12 deletions packages/cli/src/commands/registry/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,16 +126,6 @@ async function runBuild(options: BuildOptions) {
* import Button from "$UI$/button/index.js"
* ```
*/
const transformAliases = (content: string) => {
registry.aliases ??= {};
for (const alias of ALIASES) {
const defaults = ALIAS_DEFAULTS[alias];
const path = (registry.aliases[alias] ??= defaults.defaultPath);
content = content.replaceAll(path, defaults.placeholder);
}

return content;
};

for (const item of registry.items) {
message(`Building item ${color.cyan(item.name)}`);
Expand All @@ -147,7 +137,8 @@ async function runBuild(options: BuildOptions) {
];
const toResolve = item.files.map(async (file) => {
let content = await fs.readFile(file.path, "utf8");
content = transformAliases(content);
registry.aliases ??= {};
content = transformAliases(registry.aliases, content);

const name = path.basename(file.path);

Expand Down Expand Up @@ -224,10 +215,34 @@ async function runBuild(options: BuildOptions) {
* "./stepper.json"
* ```
*/
function transformLocal(registryDep: string) {
export function transformLocal(registryDep: string) {
if (registryDep.startsWith("local:")) {
const LOCAL_REGEX = /^local:(.*)/;
return registryDep.replace(LOCAL_REGEX, "./$1.json");
}
return registryDep;
}

/**
* Transforms registry import aliases into a standardized format.
*
* ```
* import Button from "$lib/registry/ui/button/index.js"
* ```
* transforms into:
* ```
* import Button from "$UI$/button/index.js"
* ```
*/
export function transformAliases(
aliases: NonNullable<schema.Registry["aliases"]>,
content: string
) {
for (const alias of ALIASES) {
const defaults = ALIAS_DEFAULTS[alias];
const path = (aliases[alias] ??= defaults.defaultPath);
content = content.replaceAll(path, defaults.placeholder);
}

return content;
}
12 changes: 6 additions & 6 deletions packages/cli/src/commands/registry/deps-resolver.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,14 +9,14 @@ import type { PackageJson } from "type-fest";
import { toArray } from "../../utils/utils.js";
import { loadProjectPackageInfo } from "../../utils/get-package-info.js";

type ResolvedDependencies = {
export type ResolvedDependencies = {
/** `<Dep@Version, Peers[]>` */
deps: Record<string, string[]>;
/** `<Dep, Dep@Version>` */
versions: Record<string, string>;
};

type ProjectDependencies = {
export type ProjectDependencies = {
dependencies: ResolvedDependencies;
devDependencies: ResolvedDependencies;
};
Expand All @@ -39,7 +39,7 @@ export function resolveProjectDeps(cwd: string): ProjectDependencies {
/**
* Adds a dependency's type definition package to their respective peer list (if applicable).
*/
function resolveTypeDeps(projectDeps: ProjectDependencies) {
export function resolveTypeDeps(projectDeps: ProjectDependencies) {
for (const dependencies of Object.values(projectDeps)) {
for (const [name, versioned] of Object.entries(dependencies.versions)) {
const peers = dependencies.deps[versioned]!;
Expand All @@ -64,7 +64,7 @@ function resolveTypeDeps(projectDeps: ProjectDependencies) {
*
* `dependencies.deps` goes from `<DepName@Version, PeerName[]>` to `<DepName@Version, PeerName@Version[]>`
*/
function resolvePeerVersions(projectDeps: ProjectDependencies): ProjectDependencies {
export function resolvePeerVersions(projectDeps: ProjectDependencies): ProjectDependencies {
for (const dependencies of Object.values(projectDeps)) {
for (const [name, peers] of Object.entries(dependencies.deps)) {
dependencies.deps[name] = peers
Expand All @@ -80,7 +80,7 @@ function resolvePeerVersions(projectDeps: ProjectDependencies): ProjectDependenc
return projectDeps;
}

const IGNORE_DEPS = ["svelte", "@sveltejs/kit", "tailwindcss", "vite"];
export const IGNORE_DEPS = ["svelte", "@sveltejs/kit", "tailwindcss", "vite"];

/**
* Resolves peer dependencies from a given set of dependencies from a package.json.
Expand Down Expand Up @@ -182,7 +182,7 @@ export async function getFileDependencies(opts: GetFileDepOpts) {
}

/** Returns an array of found deps. */
function resolveDepsFromImport(source: string, dependencies: ResolvedDependencies) {
export function resolveDepsFromImport(source: string, dependencies: ResolvedDependencies) {
const depsFound: string[] = [];
const simple = dependencies.versions[source] ? source : undefined;
const depName =
Expand Down
Loading