@refrakt-md/cli 0.24.5 → 0.25.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bin.js +156 -9
- package/dist/bin.js.map +1 -1
- package/dist/commands/install.d.ts +105 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +301 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/presets.d.ts +33 -0
- package/dist/commands/presets.d.ts.map +1 -0
- package/dist/commands/presets.js +234 -0
- package/dist/commands/presets.js.map +1 -0
- package/dist/commands/template.d.ts +20 -0
- package/dist/commands/template.d.ts.map +1 -0
- package/dist/commands/template.js +98 -0
- package/dist/commands/template.js.map +1 -0
- package/dist/commands/theme.d.ts +13 -3
- package/dist/commands/theme.d.ts.map +1 -1
- package/dist/commands/theme.js +154 -158
- package/dist/commands/theme.js.map +1 -1
- package/package.json +6 -6
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/** `refrakt template install` — add a full-site template as a NEW site in an
|
|
2
|
+
* existing project (SPEC-110 §4 kind:"site"). The greenfield path is
|
|
3
|
+
* `create-refrakt --template`; this is the add-to-existing-project surface.
|
|
4
|
+
*
|
|
5
|
+
* v1 resolves a **local directory** template (the directly-readable, portable
|
|
6
|
+
* case). Tarball/registry templates are scaffold-copied artifacts — fetch them
|
|
7
|
+
* with `create-refrakt` for now. */
|
|
8
|
+
import { existsSync, readFileSync, cpSync } from 'node:fs';
|
|
9
|
+
import { resolve, isAbsolute } from 'node:path';
|
|
10
|
+
import { execSync } from 'node:child_process';
|
|
11
|
+
import { loadRefraktConfigFile, writeRefraktConfigFile, detectPackageManager } from '../config-file.js';
|
|
12
|
+
import { resolveTargetSite, createSite, getProjectRefraktVersion, validateCompat, } from './install.js';
|
|
13
|
+
/** Compose a template into a new site of `raw` and return the dependency names
|
|
14
|
+
* to install. Pure w.r.t. the package manager (caller installs). Copies the
|
|
15
|
+
* template's content/sandboxes into the new site's derived destinations. */
|
|
16
|
+
export function applyTemplateSite(raw, templateDir, siteKey, projectRoot) {
|
|
17
|
+
const manifest = JSON.parse(readFileSync(resolve(templateDir, 'template.json'), 'utf-8'));
|
|
18
|
+
if (manifest.kind && manifest.kind !== 'site') {
|
|
19
|
+
throw new Error(`template has kind "${manifest.kind}" — only "site" templates are supported`);
|
|
20
|
+
}
|
|
21
|
+
const tsite = manifest.site ?? {};
|
|
22
|
+
// Destinations: a new non-default site lives under sites/<key>/.
|
|
23
|
+
const base = siteKey === 'default' ? '.' : `sites/${siteKey}`;
|
|
24
|
+
const contentDir = `${base}/content`;
|
|
25
|
+
cpSync(resolve(templateDir, 'content'), resolve(projectRoot, contentDir), { recursive: true });
|
|
26
|
+
const site = { contentDir, theme: tsite.theme ?? '@refrakt-md/lumina' };
|
|
27
|
+
const siteRec = site;
|
|
28
|
+
const tsiteRec = tsite;
|
|
29
|
+
for (const key of ['plugins', 'routeRules', 'entityRoutes', 'assets', 'backgrounds', 'overrides', 'tints', 'highlight', 'target']) {
|
|
30
|
+
if (tsiteRec[key] !== undefined)
|
|
31
|
+
siteRec[key] = tsiteRec[key];
|
|
32
|
+
}
|
|
33
|
+
if (existsSync(resolve(templateDir, 'sandboxes'))) {
|
|
34
|
+
const sandboxDir = `${base}/sandboxes`;
|
|
35
|
+
cpSync(resolve(templateDir, 'sandboxes'), resolve(projectRoot, sandboxDir), { recursive: true });
|
|
36
|
+
site.sandbox = { dir: sandboxDir };
|
|
37
|
+
}
|
|
38
|
+
createSite(raw, siteKey, site);
|
|
39
|
+
const deps = [...(tsite.plugins ?? [])];
|
|
40
|
+
const themePkg = typeof tsite.theme === 'string' ? tsite.theme : tsite.theme?.package;
|
|
41
|
+
if (themePkg)
|
|
42
|
+
deps.push(themePkg);
|
|
43
|
+
return { deps };
|
|
44
|
+
}
|
|
45
|
+
export async function templateInstallCommand(options) {
|
|
46
|
+
const { source, site: siteFlag } = options;
|
|
47
|
+
const cwd = process.cwd();
|
|
48
|
+
const dir = isAbsolute(source) ? source : resolve(cwd, source);
|
|
49
|
+
if (!existsSync(resolve(dir, 'template.json'))) {
|
|
50
|
+
console.error(`Error: "${source}" is not a template directory (no template.json).`);
|
|
51
|
+
console.error('For a published/bundled template, scaffold with: create-refrakt <name> --template <source>');
|
|
52
|
+
process.exit(1);
|
|
53
|
+
}
|
|
54
|
+
let configData;
|
|
55
|
+
try {
|
|
56
|
+
configData = loadRefraktConfigFile(cwd);
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
console.error('Error: No refrakt.config.json found in the current directory.');
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
// Full-site templates create a NEW site; the key must not collide.
|
|
63
|
+
const selection = resolveTargetSite(configData.raw, siteFlag, 'new');
|
|
64
|
+
if (!selection.key) {
|
|
65
|
+
console.error(`Error: ${selection.error}.`);
|
|
66
|
+
if (selection.candidates?.length)
|
|
67
|
+
console.error(`Existing sites: ${selection.candidates.join(', ')}`);
|
|
68
|
+
process.exit(1);
|
|
69
|
+
}
|
|
70
|
+
// Compat (ADR-023).
|
|
71
|
+
const manifest = JSON.parse(readFileSync(resolve(dir, 'template.json'), 'utf-8'));
|
|
72
|
+
const compat = validateCompat(manifest.refrakt, getProjectRefraktVersion(cwd));
|
|
73
|
+
for (const w of compat.warnings)
|
|
74
|
+
console.log(` ⚠ ${w}`);
|
|
75
|
+
if (compat.errors.length) {
|
|
76
|
+
for (const e of compat.errors)
|
|
77
|
+
console.error(` ✗ ${e}`);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
const { deps } = applyTemplateSite(configData.raw, dir, selection.key, cwd);
|
|
81
|
+
writeRefraktConfigFile(configData.path, configData.raw);
|
|
82
|
+
// Pin + install the derived dependencies (theme + plugins).
|
|
83
|
+
if (deps.length) {
|
|
84
|
+
const pm = detectPackageManager(cwd);
|
|
85
|
+
const cmd = pm.installCmd(deps.join(' '));
|
|
86
|
+
console.log(`Installing template dependencies with ${pm.name}...`);
|
|
87
|
+
try {
|
|
88
|
+
execSync(cmd, { cwd, stdio: 'inherit' });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
console.error(`\nWarning: failed to install ${deps.join(', ')} — run "${cmd}" manually.`);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
console.log('');
|
|
95
|
+
console.log(`Template installed as site "${selection.key}".`);
|
|
96
|
+
console.log(` content → ${(configData.raw.sites?.[selection.key]?.contentDir) ?? `sites/${selection.key}/content`}`);
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=template.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"template.js","sourceRoot":"","sources":["../../src/commands/template.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/theme.d.ts
CHANGED
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
export interface ThemeInstallOptions {
|
|
2
2
|
source: string;
|
|
3
|
+
/** Target site key for multi-site projects (SPEC-110 §3). */
|
|
4
|
+
site?: string;
|
|
5
|
+
/** Alternate registry passthrough (SPEC-110 §2). */
|
|
6
|
+
registry?: string;
|
|
3
7
|
}
|
|
4
8
|
export interface ThemeInfoOptions {
|
|
9
|
+
site?: string;
|
|
5
10
|
}
|
|
6
|
-
|
|
11
|
+
export interface ThemeListOptions {
|
|
12
|
+
}
|
|
13
|
+
/** Install a theme package and point a site's `theme` field at it. */
|
|
7
14
|
export declare function themeInstallCommand(options: ThemeInstallOptions): Promise<void>;
|
|
8
|
-
/** Show info about the currently configured theme */
|
|
9
|
-
export declare function themeInfoCommand(
|
|
15
|
+
/** Show info about the currently configured theme. */
|
|
16
|
+
export declare function themeInfoCommand(options: ThemeInfoOptions): Promise<void>;
|
|
17
|
+
/** List installed themes (packages exporting `./transform`) + the active one
|
|
18
|
+
* (SPEC-110 §5). */
|
|
19
|
+
export declare function themeListCommand(_options: ThemeListOptions): Promise<void>;
|
|
10
20
|
//# sourceMappingURL=theme.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"AAmBA,MAAM,WAAW,mBAAmB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,6DAA6D;IAC7D,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAChC,IAAI,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;CAEhC;AAkBD,sEAAsE;AACtE,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2ErF;AAED,sDAAsD;AACtD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqC/E;AAED;qBACqB;AACrB,wBAAsB,gBAAgB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqChF"}
|
package/dist/commands/theme.js
CHANGED
|
@@ -1,49 +1,42 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from 'node:fs';
|
|
2
|
-
import { resolve
|
|
1
|
+
import { existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
3
|
import { execSync } from 'node:child_process';
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
const pkgJsonPath = source.endsWith('.tgz')
|
|
16
|
-
? null // Can't easily read from tarball without tar parser
|
|
17
|
-
: resolve(absSource, 'package.json');
|
|
18
|
-
if (pkgJsonPath && existsSync(pkgJsonPath)) {
|
|
19
|
-
const pkg = JSON.parse(readFileSync(pkgJsonPath, 'utf-8'));
|
|
20
|
-
pluginName = pkg.name;
|
|
21
|
-
if (!pluginName) {
|
|
22
|
-
console.error('Error: Theme package.json is missing a "name" field');
|
|
23
|
-
process.exit(1);
|
|
24
|
-
}
|
|
25
|
-
installSource = `file:${absSource}`;
|
|
26
|
-
}
|
|
27
|
-
else if (source.endsWith('.tgz')) {
|
|
28
|
-
// For tarballs, install first then read name from node_modules
|
|
29
|
-
installSource = absSource;
|
|
30
|
-
pluginName = ''; // resolved after install
|
|
4
|
+
import { loadRefraktConfigFile, writeRefraktConfigFile, } from '../config-file.js';
|
|
5
|
+
import { resolveSource, buildInstallCommand, readInstalledManifest, getProjectRefraktVersion, validateCompat, validateThemeExports, detectFrameworkLayers, resolveTargetSite, setSiteTheme, } from './install.js';
|
|
6
|
+
/** Read a theme's declared `refrakt` compatibility range from its installed
|
|
7
|
+
* manifest.json (ThemeManifest) or package.json (ADR-023). */
|
|
8
|
+
function readThemeCompatRange(cwd, pkgName) {
|
|
9
|
+
const manifestPath = resolve(cwd, 'node_modules', pkgName, 'manifest.json');
|
|
10
|
+
if (existsSync(manifestPath)) {
|
|
11
|
+
try {
|
|
12
|
+
const m = JSON.parse(readFileSync(manifestPath, 'utf-8'));
|
|
13
|
+
if (m.refrakt)
|
|
14
|
+
return m.refrakt;
|
|
31
15
|
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
process.exit(1);
|
|
16
|
+
catch {
|
|
17
|
+
// fall through
|
|
35
18
|
}
|
|
36
19
|
}
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
const
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
20
|
+
const pkg = readInstalledManifest(cwd, pkgName);
|
|
21
|
+
return pkg?.refrakt;
|
|
22
|
+
}
|
|
23
|
+
/** Install a theme package and point a site's `theme` field at it. */
|
|
24
|
+
export async function themeInstallCommand(options) {
|
|
25
|
+
const { source, site: siteFlag, registry } = options;
|
|
26
|
+
const cwd = process.cwd();
|
|
27
|
+
// 1. Resolve the source to a concrete package name (SPEC-110 §1).
|
|
28
|
+
let resolved;
|
|
29
|
+
try {
|
|
30
|
+
resolved = resolveSource(source, cwd);
|
|
31
|
+
}
|
|
32
|
+
catch (err) {
|
|
33
|
+
console.error(`Error: ${err.message}`);
|
|
34
|
+
process.exit(1);
|
|
35
|
+
}
|
|
36
|
+
const pluginName = resolved.name;
|
|
37
|
+
// 2. Install via the detected package manager (+ optional --registry).
|
|
38
|
+
const { name: pmName, cmd } = buildInstallCommand(resolved.installSource, { registry, cwd });
|
|
39
|
+
console.log(`Using ${pmName} to install theme "${pluginName}"...`);
|
|
47
40
|
try {
|
|
48
41
|
execSync(cmd, { cwd, stdio: 'inherit' });
|
|
49
42
|
}
|
|
@@ -51,16 +44,7 @@ export async function themeInstallCommand(options) {
|
|
|
51
44
|
console.error(`\nError: Failed to install theme. Command: ${cmd}`);
|
|
52
45
|
process.exit(1);
|
|
53
46
|
}
|
|
54
|
-
//
|
|
55
|
-
if (!pluginName) {
|
|
56
|
-
// After npm install of a tarball, the package is in node_modules
|
|
57
|
-
// We need to search for it — check recent additions
|
|
58
|
-
console.error('Error: Could not determine package name from tarball.');
|
|
59
|
-
console.error('Please install from the unzipped directory instead:');
|
|
60
|
-
console.error(' refrakt theme install ./path/to/theme-directory');
|
|
61
|
-
process.exit(1);
|
|
62
|
-
}
|
|
63
|
-
// 5. Update refrakt.config.json
|
|
47
|
+
// 3. Load config + choose the target site.
|
|
64
48
|
let configData;
|
|
65
49
|
try {
|
|
66
50
|
configData = loadRefraktConfigFile(cwd);
|
|
@@ -70,57 +54,49 @@ export async function themeInstallCommand(options) {
|
|
|
70
54
|
console.error('Are you in a refrakt.md project root?');
|
|
71
55
|
process.exit(1);
|
|
72
56
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (siteNames.length > 1) {
|
|
79
|
-
console.error(`Error: refrakt.config.json declares multiple sites (${siteNames.map((n) => `"${n}"`).join(', ')}).`);
|
|
80
|
-
console.error('`theme install` cannot pick a target automatically. Update the relevant site\'s "theme" field manually.');
|
|
81
|
-
process.exit(1);
|
|
82
|
-
}
|
|
83
|
-
const previousTheme = writeThemeIntoConfig(configData.raw, pluginName);
|
|
84
|
-
writeRefraktConfigFile(configData.path, configData.raw);
|
|
85
|
-
// 6. Validate the installed theme
|
|
86
|
-
const warnings = [];
|
|
87
|
-
try {
|
|
88
|
-
const themeDir = resolve(cwd, 'node_modules', pluginName);
|
|
89
|
-
if (!existsSync(themeDir)) {
|
|
90
|
-
warnings.push('Theme directory not found in node_modules — install may have failed');
|
|
91
|
-
}
|
|
92
|
-
else {
|
|
93
|
-
const themePkg = JSON.parse(readFileSync(resolve(themeDir, 'package.json'), 'utf-8'));
|
|
94
|
-
const exports = themePkg.exports ?? {};
|
|
95
|
-
if (!exports['./svelte'] && !exports['./svelte/index.js']) {
|
|
96
|
-
warnings.push('Theme is missing ./svelte export — runtime rendering may fail');
|
|
97
|
-
}
|
|
98
|
-
if (!exports['./transform']) {
|
|
99
|
-
warnings.push('Theme is missing ./transform export — CSS tree-shaking will be skipped');
|
|
100
|
-
}
|
|
57
|
+
const selection = resolveTargetSite(configData.raw, siteFlag, 'existing');
|
|
58
|
+
if (!selection.key) {
|
|
59
|
+
console.error(`Error: ${selection.error}.`);
|
|
60
|
+
if (selection.candidates?.length) {
|
|
61
|
+
console.error(`Sites: ${selection.candidates.map((s) => `"${s}"`).join(', ')}`);
|
|
101
62
|
}
|
|
63
|
+
process.exit(1);
|
|
102
64
|
}
|
|
103
|
-
|
|
104
|
-
|
|
65
|
+
// 4. Validate refrakt compatibility (ADR-023) before wiring it in.
|
|
66
|
+
const compat = validateCompat(readThemeCompatRange(cwd, pluginName), getProjectRefraktVersion(cwd));
|
|
67
|
+
if (compat.errors.length > 0) {
|
|
68
|
+
console.error('');
|
|
69
|
+
console.error(`Error: theme "${pluginName}" is not compatible with this project:`);
|
|
70
|
+
for (const e of compat.errors)
|
|
71
|
+
console.error(` ✗ ${e}`);
|
|
72
|
+
console.error('The package was installed but refrakt.config.json was not updated.');
|
|
73
|
+
process.exit(1);
|
|
105
74
|
}
|
|
106
|
-
//
|
|
75
|
+
// 5. Point the site's theme at the package.
|
|
76
|
+
const previousTheme = setSiteTheme(configData.raw, selection.key, pluginName);
|
|
77
|
+
writeRefraktConfigFile(configData.path, configData.raw);
|
|
78
|
+
// 6. Framework-aware export validation (ADR-024).
|
|
79
|
+
const pkg = readInstalledManifest(cwd, pluginName);
|
|
80
|
+
const warnings = [...validateThemeExports(pkg), ...compat.warnings];
|
|
81
|
+
const layers = detectFrameworkLayers(pkg);
|
|
82
|
+
// 7. Report.
|
|
107
83
|
console.log('');
|
|
108
|
-
console.log(`Theme "${pluginName}" installed successfully.`);
|
|
84
|
+
console.log(`Theme "${pluginName}" installed successfully${selection.key !== 'default' ? ` for site "${selection.key}"` : ''}.`);
|
|
109
85
|
if (previousTheme !== pluginName) {
|
|
110
|
-
console.log(` Updated refrakt.config.json: "${previousTheme}" → "${pluginName}"`);
|
|
86
|
+
console.log(` Updated refrakt.config.json: "${previousTheme ?? '(none)'}" → "${pluginName}"`);
|
|
111
87
|
}
|
|
88
|
+
console.log(` Framework layer: ${layers.length ? layers.join(', ') : 'none (framework-agnostic)'}`);
|
|
112
89
|
if (warnings.length > 0) {
|
|
113
90
|
console.log('');
|
|
114
91
|
console.log('Warnings:');
|
|
115
|
-
for (const w of warnings)
|
|
92
|
+
for (const w of warnings)
|
|
116
93
|
console.log(` ⚠ ${w}`);
|
|
117
|
-
}
|
|
118
94
|
}
|
|
119
95
|
console.log('');
|
|
120
96
|
console.log('Run your dev server to see the new theme in action.');
|
|
121
97
|
}
|
|
122
|
-
/** Show info about the currently configured theme */
|
|
123
|
-
export async function themeInfoCommand(
|
|
98
|
+
/** Show info about the currently configured theme. */
|
|
99
|
+
export async function themeInfoCommand(options) {
|
|
124
100
|
const cwd = process.cwd();
|
|
125
101
|
let configData;
|
|
126
102
|
try {
|
|
@@ -130,87 +106,107 @@ export async function themeInfoCommand(_options) {
|
|
|
130
106
|
console.error('Error: No refrakt.config.json found in the current directory.');
|
|
131
107
|
process.exit(1);
|
|
132
108
|
}
|
|
133
|
-
const
|
|
109
|
+
const selection = resolveTargetSite(configData.raw, options.site, 'existing');
|
|
110
|
+
const themeName = selection.key ? readThemeForSite(configData.raw, selection.key) : undefined;
|
|
134
111
|
if (!themeName) {
|
|
135
|
-
console.error('Error: refrakt.config.json does not declare a theme
|
|
112
|
+
console.error('Error: refrakt.config.json does not declare a theme for the selected site.');
|
|
136
113
|
process.exit(1);
|
|
137
114
|
}
|
|
138
115
|
console.log(`Current theme: ${themeName}`);
|
|
139
|
-
|
|
116
|
+
const pkg = readInstalledManifest(cwd, themeName);
|
|
117
|
+
if (pkg) {
|
|
118
|
+
console.log(` Version: ${pkg.version ?? 'unknown'}`);
|
|
119
|
+
if (pkg.description)
|
|
120
|
+
console.log(` Description: ${pkg.description}`);
|
|
121
|
+
const exportsMap = (pkg.exports ?? {});
|
|
122
|
+
const features = [];
|
|
123
|
+
if (exportsMap['./transform'])
|
|
124
|
+
features.push('transform');
|
|
125
|
+
if (exportsMap['./layouts'])
|
|
126
|
+
features.push('layouts');
|
|
127
|
+
if (exportsMap['./styles/runes/*.css'])
|
|
128
|
+
features.push('rune CSS');
|
|
129
|
+
const layers = detectFrameworkLayers(pkg);
|
|
130
|
+
if (features.length)
|
|
131
|
+
console.log(` Provides: ${features.join(', ')}`);
|
|
132
|
+
console.log(` Framework layer: ${layers.length ? layers.join(', ') : 'none (framework-agnostic)'}`);
|
|
133
|
+
}
|
|
134
|
+
else if (themeName.startsWith('.')) {
|
|
135
|
+
console.log(` Type: Local directory`);
|
|
136
|
+
console.log(` Path: ${resolve(cwd, themeName)}`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(` Status: Not found in node_modules`);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
/** List installed themes (packages exporting `./transform`) + the active one
|
|
143
|
+
* (SPEC-110 §5). */
|
|
144
|
+
export async function themeListCommand(_options) {
|
|
145
|
+
const cwd = process.cwd();
|
|
146
|
+
let configData;
|
|
140
147
|
try {
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
}
|
|
148
|
+
configData = loadRefraktConfigFile(cwd);
|
|
149
|
+
}
|
|
150
|
+
catch {
|
|
151
|
+
console.error('Error: No refrakt.config.json found in the current directory.');
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
const active = new Set();
|
|
155
|
+
for (const key of (configData.raw.site ? ['default'] : Object.keys(configData.raw.sites ?? {}))) {
|
|
156
|
+
const t = readThemeForSite(configData.raw, key);
|
|
157
|
+
if (t)
|
|
158
|
+
active.add(t);
|
|
159
|
+
}
|
|
160
|
+
const modulesDir = resolve(cwd, 'node_modules');
|
|
161
|
+
const found = [];
|
|
162
|
+
for (const dir of listPackageDirs(modulesDir)) {
|
|
163
|
+
const pkg = readInstalledManifest(cwd, dir);
|
|
164
|
+
const exportsMap = (pkg?.exports ?? {});
|
|
165
|
+
if (pkg && exportsMap['./transform']) {
|
|
166
|
+
found.push({ name: dir, version: String(pkg.version ?? '?'), layers: detectFrameworkLayers(pkg) });
|
|
160
167
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
168
|
+
}
|
|
169
|
+
if (found.length === 0) {
|
|
170
|
+
console.log('No themes (packages exporting ./transform) found in node_modules.');
|
|
171
|
+
return;
|
|
172
|
+
}
|
|
173
|
+
console.log('Installed themes:');
|
|
174
|
+
for (const t of found.sort((a, b) => a.name.localeCompare(b.name))) {
|
|
175
|
+
const marker = active.has(t.name) ? '*' : ' ';
|
|
176
|
+
const layer = t.layers.length ? ` [${t.layers.join(', ')}]` : ' [framework-agnostic]';
|
|
177
|
+
console.log(` ${marker} ${t.name}@${t.version}${layer}`);
|
|
178
|
+
}
|
|
179
|
+
if (active.size)
|
|
180
|
+
console.log(`\n * = active`);
|
|
181
|
+
}
|
|
182
|
+
/** Enumerate package directories under node_modules, descending into a single
|
|
183
|
+
* level of scopes (`@scope/name`). */
|
|
184
|
+
function listPackageDirs(modulesDir) {
|
|
185
|
+
if (!existsSync(modulesDir))
|
|
186
|
+
return [];
|
|
187
|
+
const out = [];
|
|
188
|
+
const isDir = (e) => e.isDirectory() || e.isSymbolicLink();
|
|
189
|
+
for (const entry of readdirSync(modulesDir, { withFileTypes: true })) {
|
|
190
|
+
if (!isDir(entry))
|
|
191
|
+
continue;
|
|
192
|
+
if (entry.name.startsWith('@')) {
|
|
193
|
+
for (const sub of readdirSync(resolve(modulesDir, entry.name), { withFileTypes: true })) {
|
|
194
|
+
if (isDir(sub))
|
|
195
|
+
out.push(`${entry.name}/${sub.name}`);
|
|
196
|
+
}
|
|
164
197
|
}
|
|
165
|
-
else {
|
|
166
|
-
|
|
198
|
+
else if (!entry.name.startsWith('.')) {
|
|
199
|
+
out.push(entry.name);
|
|
167
200
|
}
|
|
168
201
|
}
|
|
169
|
-
|
|
170
|
-
// Best-effort info display
|
|
171
|
-
}
|
|
202
|
+
return out;
|
|
172
203
|
}
|
|
173
|
-
/** Read the theme package name
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
function readThemeFromConfig(raw) {
|
|
178
|
-
const value = raw.site?.theme
|
|
179
|
-
?? (raw.sites && Object.entries(raw.sites).length === 1
|
|
180
|
-
? Object.entries(raw.sites)[0][1].theme
|
|
181
|
-
: undefined)
|
|
182
|
-
?? raw.theme;
|
|
204
|
+
/** Read the theme package name configured for a given site key. */
|
|
205
|
+
function readThemeForSite(raw, key) {
|
|
206
|
+
const site = key === 'default' && raw.site ? raw.site : raw.sites?.[key];
|
|
207
|
+
const value = site?.theme ?? raw.theme;
|
|
183
208
|
if (value === undefined)
|
|
184
209
|
return undefined;
|
|
185
210
|
return typeof value === 'string' ? value : value.package;
|
|
186
211
|
}
|
|
187
|
-
/** Mutate the raw config to set the theme package on whichever shape it was
|
|
188
|
-
* authored in. If the existing theme was the new object form, preserves
|
|
189
|
-
* `presets`, `tokens`, `modes`, and `colorScheme` and only swaps `package`.
|
|
190
|
-
* Returns the previous package name. */
|
|
191
|
-
function writeThemeIntoConfig(raw, pluginName) {
|
|
192
|
-
const swap = (current) => {
|
|
193
|
-
if (current === undefined || typeof current === 'string') {
|
|
194
|
-
return { previous: typeof current === 'string' ? current : undefined, next: pluginName };
|
|
195
|
-
}
|
|
196
|
-
return { previous: current.package, next: { ...current, package: pluginName } };
|
|
197
|
-
};
|
|
198
|
-
if (raw.site) {
|
|
199
|
-
const { previous, next } = swap(raw.site.theme);
|
|
200
|
-
raw.site.theme = next;
|
|
201
|
-
return previous;
|
|
202
|
-
}
|
|
203
|
-
if (raw.sites) {
|
|
204
|
-
const entries = Object.entries(raw.sites);
|
|
205
|
-
if (entries.length === 1) {
|
|
206
|
-
const [, site] = entries[0];
|
|
207
|
-
const { previous, next } = swap(site.theme);
|
|
208
|
-
site.theme = next;
|
|
209
|
-
return previous;
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
const { previous, next } = swap(raw.theme);
|
|
213
|
-
raw.theme = next;
|
|
214
|
-
return previous;
|
|
215
|
-
}
|
|
216
212
|
//# sourceMappingURL=theme.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"theme.js","sourceRoot":"","sources":["../../src/commands/theme.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@refrakt-md/cli",
|
|
3
3
|
"description": "CLI tools for refrakt.md",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.25.0",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"repository": {
|
|
@@ -36,11 +36,11 @@
|
|
|
36
36
|
},
|
|
37
37
|
"dependencies": {
|
|
38
38
|
"@markdoc/markdoc": "0.4.0",
|
|
39
|
-
"@refrakt-md/ai": "0.
|
|
40
|
-
"@refrakt-md/editor": "0.
|
|
41
|
-
"@refrakt-md/html": "0.
|
|
42
|
-
"@refrakt-md/runes": "0.
|
|
43
|
-
"@refrakt-md/transform": "0.
|
|
39
|
+
"@refrakt-md/ai": "0.25.0",
|
|
40
|
+
"@refrakt-md/editor": "0.25.0",
|
|
41
|
+
"@refrakt-md/html": "0.25.0",
|
|
42
|
+
"@refrakt-md/runes": "0.25.0",
|
|
43
|
+
"@refrakt-md/transform": "0.25.0",
|
|
44
44
|
"esbuild": "^0.27.5",
|
|
45
45
|
"postcss": "^8.4.0"
|
|
46
46
|
}
|