@deckspec/cli 0.1.7 → 0.1.8
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/commands/patterns.d.ts.map +1 -1
- package/dist/commands/patterns.js +34 -7
- package/dist/commands/patterns.js.map +1 -1
- package/dist/commands/render.d.ts.map +1 -1
- package/dist/commands/render.js +2 -2
- package/dist/commands/render.js.map +1 -1
- package/package.json +4 -4
- package/src/commands/patterns.ts +32 -7
- package/src/commands/render.ts +3 -2
- package/templates/noir-display/tsconfig.json +9 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/commands/patterns.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"patterns.d.ts","sourceRoot":"","sources":["../../src/commands/patterns.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAkHnE"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { readdir, readFile, stat } from "node:fs/promises";
|
|
1
|
+
import { readdir, readFile, stat, access } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { resolveThemePatternsDir, resolveThemePatternsSrcDir } from "@deckspec/renderer";
|
|
3
|
+
import { resolveThemePatternsDir, resolveThemePatternsSrcDir, compileTsxCached } from "@deckspec/renderer";
|
|
4
4
|
import yaml from "js-yaml";
|
|
5
5
|
/**
|
|
6
6
|
* Lists available patterns with their schema definitions.
|
|
@@ -20,9 +20,27 @@ export async function patternsCommand(args) {
|
|
|
20
20
|
}
|
|
21
21
|
const patternsDir = resolveThemePatternsDir(themeName);
|
|
22
22
|
const patternsSrcDir = resolveThemePatternsSrcDir(themeName);
|
|
23
|
+
// Try dist/patterns/ first, fall back to patterns/ (source)
|
|
24
|
+
let scanDir;
|
|
25
|
+
let usingSrc = false;
|
|
26
|
+
try {
|
|
27
|
+
await access(patternsDir);
|
|
28
|
+
scanDir = patternsDir;
|
|
29
|
+
}
|
|
30
|
+
catch {
|
|
31
|
+
try {
|
|
32
|
+
await access(patternsSrcDir);
|
|
33
|
+
scanDir = patternsSrcDir;
|
|
34
|
+
usingSrc = true;
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
console.log(`No patterns found for theme "${themeName}".`);
|
|
38
|
+
return;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
23
41
|
let entries;
|
|
24
42
|
try {
|
|
25
|
-
entries = await readdir(
|
|
43
|
+
entries = await readdir(scanDir);
|
|
26
44
|
}
|
|
27
45
|
catch {
|
|
28
46
|
console.log(`No patterns found for theme "${themeName}".`);
|
|
@@ -34,7 +52,7 @@ export async function patternsCommand(args) {
|
|
|
34
52
|
if (name.startsWith(".") || name.startsWith("_") || name === "node_modules" || name === "dist")
|
|
35
53
|
continue;
|
|
36
54
|
try {
|
|
37
|
-
const s = await stat(join(
|
|
55
|
+
const s = await stat(join(scanDir, name));
|
|
38
56
|
if (s.isDirectory())
|
|
39
57
|
patternNames.push(name);
|
|
40
58
|
}
|
|
@@ -49,9 +67,18 @@ export async function patternsCommand(args) {
|
|
|
49
67
|
patternNames.sort();
|
|
50
68
|
console.log(`Available patterns (theme: ${themeName}):\n`);
|
|
51
69
|
for (const name of patternNames) {
|
|
52
|
-
const indexPath = join(patternsDir, name, "index.js");
|
|
53
70
|
try {
|
|
54
|
-
|
|
71
|
+
let mod;
|
|
72
|
+
if (usingSrc) {
|
|
73
|
+
// Compile .tsx on-the-fly
|
|
74
|
+
const tsxPath = join(patternsSrcDir, name, "index.tsx");
|
|
75
|
+
const compiled = await compileTsxCached(tsxPath);
|
|
76
|
+
mod = await import(compiled);
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const indexPath = join(patternsDir, name, "index.js");
|
|
80
|
+
mod = await import(indexPath);
|
|
81
|
+
}
|
|
55
82
|
// Check for examples.yaml
|
|
56
83
|
let hasExamples = false;
|
|
57
84
|
let examples = [];
|
|
@@ -89,7 +116,7 @@ export async function patternsCommand(args) {
|
|
|
89
116
|
}
|
|
90
117
|
}
|
|
91
118
|
catch {
|
|
92
|
-
console.log(` ${name}: (
|
|
119
|
+
console.log(` ${name}: (failed to load)`);
|
|
93
120
|
}
|
|
94
121
|
console.log();
|
|
95
122
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/commands/patterns.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../src/commands/patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"render.d.ts","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAMA;;;GAGG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CA8Cf"}
|
package/dist/commands/render.js
CHANGED
|
@@ -11,8 +11,9 @@ export async function renderCommand(filePath, outputPath) {
|
|
|
11
11
|
const basePath = dirname(resolve(filePath));
|
|
12
12
|
const themeName = extractThemeName(raw);
|
|
13
13
|
const patternsDir = resolveThemePatternsDir(themeName);
|
|
14
|
+
const patternsSrcDir = resolveThemePatternsSrcDir(themeName);
|
|
14
15
|
// Validate first
|
|
15
|
-
const result = await validateDeck(raw, { basePath, patternsDir, compileTsx: compileTsxCached });
|
|
16
|
+
const result = await validateDeck(raw, { basePath, patternsDir, patternsSrcDir, compileTsx: compileTsxCached });
|
|
16
17
|
if (result.deckError) {
|
|
17
18
|
console.error("\u2717 Deck structure is invalid:");
|
|
18
19
|
for (const issue of result.deckError.issues) {
|
|
@@ -33,7 +34,6 @@ export async function renderCommand(filePath, outputPath) {
|
|
|
33
34
|
}
|
|
34
35
|
const deck = raw;
|
|
35
36
|
const themeCSS = await loadThemeCSS(deck.meta.theme);
|
|
36
|
-
const patternsSrcDir = resolveThemePatternsSrcDir(themeName);
|
|
37
37
|
const html = await renderDeck(deck, themeCSS, { basePath, patternsDir, patternsSrcDir });
|
|
38
38
|
// If outputPath has no .html extension, treat it as a directory
|
|
39
39
|
let finalPath = outputPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE3D,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,0BAA0B,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAEvJ;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,QAAgB,EAChB,UAAkB;IAElB,MAAM,GAAG,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,WAAW,GAAG,uBAAuB,CAAC,SAAS,CAAC,CAAC;IAEvD,iBAAiB;IACjB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,GAAG,EAAE,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,EAAE,gBAAgB,EAAE,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"render.js","sourceRoot":"","sources":["../../src/commands/render.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deckspec/cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.8",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"src",
|
|
@@ -18,9 +18,9 @@
|
|
|
18
18
|
"react": "^19.0.0",
|
|
19
19
|
"react-dom": "^19.0.0",
|
|
20
20
|
"zod": "^3.23.0",
|
|
21
|
-
"@deckspec/
|
|
22
|
-
"@deckspec/dsl": "0.1.
|
|
23
|
-
"@deckspec/
|
|
21
|
+
"@deckspec/renderer": "0.1.8",
|
|
22
|
+
"@deckspec/dsl": "0.1.8",
|
|
23
|
+
"@deckspec/schema": "0.1.8"
|
|
24
24
|
},
|
|
25
25
|
"license": "Apache-2.0",
|
|
26
26
|
"repository": {
|
package/src/commands/patterns.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import { readdir, readFile, stat } from "node:fs/promises";
|
|
1
|
+
import { readdir, readFile, stat, access } from "node:fs/promises";
|
|
2
2
|
import { join } from "node:path";
|
|
3
|
-
import { resolveThemePatternsDir, resolveThemePatternsSrcDir } from "@deckspec/renderer";
|
|
3
|
+
import { resolveThemePatternsDir, resolveThemePatternsSrcDir, compileTsxCached } from "@deckspec/renderer";
|
|
4
4
|
import yaml from "js-yaml";
|
|
5
5
|
|
|
6
6
|
/**
|
|
@@ -23,9 +23,26 @@ export async function patternsCommand(args: string[]): Promise<void> {
|
|
|
23
23
|
const patternsDir = resolveThemePatternsDir(themeName);
|
|
24
24
|
const patternsSrcDir = resolveThemePatternsSrcDir(themeName);
|
|
25
25
|
|
|
26
|
+
// Try dist/patterns/ first, fall back to patterns/ (source)
|
|
27
|
+
let scanDir: string;
|
|
28
|
+
let usingSrc = false;
|
|
29
|
+
try {
|
|
30
|
+
await access(patternsDir);
|
|
31
|
+
scanDir = patternsDir;
|
|
32
|
+
} catch {
|
|
33
|
+
try {
|
|
34
|
+
await access(patternsSrcDir);
|
|
35
|
+
scanDir = patternsSrcDir;
|
|
36
|
+
usingSrc = true;
|
|
37
|
+
} catch {
|
|
38
|
+
console.log(`No patterns found for theme "${themeName}".`);
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
26
43
|
let entries: string[];
|
|
27
44
|
try {
|
|
28
|
-
entries = await readdir(
|
|
45
|
+
entries = await readdir(scanDir);
|
|
29
46
|
} catch {
|
|
30
47
|
console.log(`No patterns found for theme "${themeName}".`);
|
|
31
48
|
return;
|
|
@@ -36,7 +53,7 @@ export async function patternsCommand(args: string[]): Promise<void> {
|
|
|
36
53
|
for (const name of entries) {
|
|
37
54
|
if (name.startsWith(".") || name.startsWith("_") || name === "node_modules" || name === "dist") continue;
|
|
38
55
|
try {
|
|
39
|
-
const s = await stat(join(
|
|
56
|
+
const s = await stat(join(scanDir, name));
|
|
40
57
|
if (s.isDirectory()) patternNames.push(name);
|
|
41
58
|
} catch {
|
|
42
59
|
// skip
|
|
@@ -52,9 +69,17 @@ export async function patternsCommand(args: string[]): Promise<void> {
|
|
|
52
69
|
console.log(`Available patterns (theme: ${themeName}):\n`);
|
|
53
70
|
|
|
54
71
|
for (const name of patternNames) {
|
|
55
|
-
const indexPath = join(patternsDir, name, "index.js");
|
|
56
72
|
try {
|
|
57
|
-
|
|
73
|
+
let mod: any;
|
|
74
|
+
if (usingSrc) {
|
|
75
|
+
// Compile .tsx on-the-fly
|
|
76
|
+
const tsxPath = join(patternsSrcDir, name, "index.tsx");
|
|
77
|
+
const compiled = await compileTsxCached(tsxPath);
|
|
78
|
+
mod = await import(compiled);
|
|
79
|
+
} else {
|
|
80
|
+
const indexPath = join(patternsDir, name, "index.js");
|
|
81
|
+
mod = await import(indexPath);
|
|
82
|
+
}
|
|
58
83
|
|
|
59
84
|
// Check for examples.yaml
|
|
60
85
|
let hasExamples = false;
|
|
@@ -92,7 +117,7 @@ export async function patternsCommand(args: string[]): Promise<void> {
|
|
|
92
117
|
}
|
|
93
118
|
}
|
|
94
119
|
} catch {
|
|
95
|
-
console.log(` ${name}: (
|
|
120
|
+
console.log(` ${name}: (failed to load)`);
|
|
96
121
|
}
|
|
97
122
|
console.log();
|
|
98
123
|
}
|
package/src/commands/render.ts
CHANGED
|
@@ -17,8 +17,10 @@ export async function renderCommand(
|
|
|
17
17
|
const themeName = extractThemeName(raw);
|
|
18
18
|
const patternsDir = resolveThemePatternsDir(themeName);
|
|
19
19
|
|
|
20
|
+
const patternsSrcDir = resolveThemePatternsSrcDir(themeName);
|
|
21
|
+
|
|
20
22
|
// Validate first
|
|
21
|
-
const result = await validateDeck(raw, { basePath, patternsDir, compileTsx: compileTsxCached });
|
|
23
|
+
const result = await validateDeck(raw, { basePath, patternsDir, patternsSrcDir, compileTsx: compileTsxCached });
|
|
22
24
|
|
|
23
25
|
if (result.deckError) {
|
|
24
26
|
console.error("\u2717 Deck structure is invalid:");
|
|
@@ -42,7 +44,6 @@ export async function renderCommand(
|
|
|
42
44
|
|
|
43
45
|
const deck = raw as Deck;
|
|
44
46
|
const themeCSS = await loadThemeCSS(deck.meta.theme);
|
|
45
|
-
const patternsSrcDir = resolveThemePatternsSrcDir(themeName);
|
|
46
47
|
const html = await renderDeck(deck, themeCSS, { basePath, patternsDir, patternsSrcDir });
|
|
47
48
|
|
|
48
49
|
// If outputPath has no .html extension, treat it as a directory
|
|
@@ -1,10 +1,17 @@
|
|
|
1
1
|
{
|
|
2
|
-
"extends": "../../tsconfig.json",
|
|
3
2
|
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "Node16",
|
|
5
|
+
"moduleResolution": "Node16",
|
|
4
6
|
"outDir": "dist",
|
|
5
7
|
"rootDir": ".",
|
|
6
8
|
"composite": true,
|
|
7
|
-
"jsx": "react-jsx"
|
|
9
|
+
"jsx": "react-jsx",
|
|
10
|
+
"strict": true,
|
|
11
|
+
"declaration": true,
|
|
12
|
+
"declarationMap": true,
|
|
13
|
+
"esModuleInterop": true,
|
|
14
|
+
"skipLibCheck": true
|
|
8
15
|
},
|
|
9
16
|
"include": [
|
|
10
17
|
"patterns/",
|