@deckspec/dsl 0.1.5 → 0.1.7
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/parser.d.ts +4 -3
- package/dist/parser.d.ts.map +1 -1
- package/dist/parser.js +17 -4
- package/dist/parser.js.map +1 -1
- package/dist/validator.d.ts +2 -0
- package/dist/validator.d.ts.map +1 -1
- package/dist/validator.js +1 -1
- package/dist/validator.js.map +1 -1
- package/package.json +2 -2
- package/src/parser.ts +20 -5
- package/src/validator.ts +3 -0
package/dist/parser.d.ts
CHANGED
|
@@ -26,10 +26,11 @@ export interface ResolvedSlideFile {
|
|
|
26
26
|
* Resolution priority (ADR-022):
|
|
27
27
|
* 1. Deck-local pattern: {basePath}/patterns/{name}/index.tsx
|
|
28
28
|
* 2. Deck-local pattern: {basePath}/patterns/{name}/index.js
|
|
29
|
-
* 3. Theme pattern: {patternsDir}/{name}/index.js
|
|
30
|
-
* 4. Theme pattern: {patternsDir}/{name}.js
|
|
29
|
+
* 3. Theme pattern: {patternsDir}/{name}/index.js (compiled)
|
|
30
|
+
* 4. Theme pattern: {patternsDir}/{name}.js (compiled, flat)
|
|
31
|
+
* 5. Theme pattern: {patternsSrcDir}/{name}/index.tsx (source, on-the-fly compile)
|
|
31
32
|
*
|
|
32
33
|
* Files with extensions (.html etc) are resolved relative to basePath as passthrough.
|
|
33
34
|
*/
|
|
34
|
-
export declare function resolveSlideFile(file: string, basePath: string, patternsDir: string): Promise<ResolvedSlideFile>;
|
|
35
|
+
export declare function resolveSlideFile(file: string, basePath: string, patternsDir: string, patternsSrcDir?: string): Promise<ResolvedSlideFile>;
|
|
35
36
|
//# sourceMappingURL=parser.d.ts.map
|
package/dist/parser.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUrE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAIA;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAQzD;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAUrE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,0FAA0F;IAC1F,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EACnB,cAAc,CAAC,EAAE,MAAM,GACtB,OAAO,CAAC,iBAAiB,CAAC,CA0D5B"}
|
package/dist/parser.js
CHANGED
|
@@ -38,12 +38,13 @@ export async function loadDeckFile(filePath) {
|
|
|
38
38
|
* Resolution priority (ADR-022):
|
|
39
39
|
* 1. Deck-local pattern: {basePath}/patterns/{name}/index.tsx
|
|
40
40
|
* 2. Deck-local pattern: {basePath}/patterns/{name}/index.js
|
|
41
|
-
* 3. Theme pattern: {patternsDir}/{name}/index.js
|
|
42
|
-
* 4. Theme pattern: {patternsDir}/{name}.js
|
|
41
|
+
* 3. Theme pattern: {patternsDir}/{name}/index.js (compiled)
|
|
42
|
+
* 4. Theme pattern: {patternsDir}/{name}.js (compiled, flat)
|
|
43
|
+
* 5. Theme pattern: {patternsSrcDir}/{name}/index.tsx (source, on-the-fly compile)
|
|
43
44
|
*
|
|
44
45
|
* Files with extensions (.html etc) are resolved relative to basePath as passthrough.
|
|
45
46
|
*/
|
|
46
|
-
export async function resolveSlideFile(file, basePath, patternsDir) {
|
|
47
|
+
export async function resolveSlideFile(file, basePath, patternsDir, patternsSrcDir) {
|
|
47
48
|
const ext = extname(file);
|
|
48
49
|
if (ext) {
|
|
49
50
|
// File with extension → relative to deck directory
|
|
@@ -83,8 +84,20 @@ export async function resolveSlideFile(file, basePath, patternsDir) {
|
|
|
83
84
|
return { type: "pattern", path: flatPath };
|
|
84
85
|
}
|
|
85
86
|
catch {
|
|
86
|
-
|
|
87
|
+
// continue
|
|
87
88
|
}
|
|
88
89
|
}
|
|
90
|
+
// 5. Theme source: patternsSrcDir/{name}/index.tsx (on-the-fly compile)
|
|
91
|
+
if (patternsSrcDir) {
|
|
92
|
+
const themeTsxPath = resolve(patternsSrcDir, file, "index.tsx");
|
|
93
|
+
try {
|
|
94
|
+
await access(themeTsxPath);
|
|
95
|
+
return { type: "pattern", path: themeTsxPath, tsx: true };
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
// continue
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
throw new Error(`Pattern "${file}" not found. Looked in:\n ${localTsxPath}\n ${localJsPath}\n ${resolve(patternsDir, file, "index.js")}\n ${resolve(patternsDir, `${file}.js`)}${patternsSrcDir ? `\n ${resolve(patternsSrcDir, file, "index.tsx")}` : ""}`);
|
|
89
102
|
}
|
|
90
103
|
//# sourceMappingURL=parser.js.map
|
package/dist/parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,SAAS,CAAC;AAC3B,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,aAAa,CAAC,UAAkB;IAC9C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,0BAA0B,CAAC;QACtE,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB;IACjD,IAAI,OAAe,CAAC;IACpB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAC9C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GACX,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,yBAAyB,CAAC;QACrE,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,MAAM,OAAO,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,OAAO,aAAa,CAAC,OAAO,CAAC,CAAC;AAChC,CAAC;AAYD
|
|
1
|
+
{"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"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"}
|
package/dist/validator.d.ts
CHANGED
|
@@ -2,6 +2,8 @@ import type { ValidationResult } from "./types.js";
|
|
|
2
2
|
export interface ValidationContext {
|
|
3
3
|
basePath: string;
|
|
4
4
|
patternsDir: string;
|
|
5
|
+
/** Source patterns directory for .tsx fallback (e.g. themes/{theme}/patterns/) */
|
|
6
|
+
patternsSrcDir?: string;
|
|
5
7
|
/** Optional function to compile .tsx files on-the-fly. Provided by renderer. */
|
|
6
8
|
compileTsx?: (tsxPath: string) => Promise<string>;
|
|
7
9
|
}
|
package/dist/validator.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AAG1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,gFAAgF;IAChF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,gBAAgB,EAAyB,MAAM,YAAY,CAAC;AAG1E,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,kFAAkF;IAClF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gFAAgF;IAChF,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;CACnD;AAED;;;;;;;;GAQG;AACH,wBAAsB,YAAY,CAChC,GAAG,EAAE,OAAO,EACZ,OAAO,CAAC,EAAE,iBAAiB,GAC1B,OAAO,CAAC,gBAAgB,CAAC,CAmG3B"}
|
package/dist/validator.js
CHANGED
|
@@ -31,7 +31,7 @@ export async function validateDeck(raw, context) {
|
|
|
31
31
|
continue;
|
|
32
32
|
}
|
|
33
33
|
try {
|
|
34
|
-
const resolved = await resolveSlideFile(slide.file, context.basePath, context.patternsDir);
|
|
34
|
+
const resolved = await resolveSlideFile(slide.file, context.basePath, context.patternsDir, context.patternsSrcDir);
|
|
35
35
|
if (resolved.type === "html") {
|
|
36
36
|
// Check file exists
|
|
37
37
|
await access(resolved.path);
|
package/dist/validator.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deckspec/dsl",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"files": [
|
|
5
5
|
"dist",
|
|
6
6
|
"src"
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
"dependencies": {
|
|
12
12
|
"js-yaml": "^4.1.0",
|
|
13
13
|
"zod": "^3.23.0",
|
|
14
|
-
"@deckspec/schema": "0.1.
|
|
14
|
+
"@deckspec/schema": "0.1.7"
|
|
15
15
|
},
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"@types/js-yaml": "^4.0.9",
|
package/src/parser.ts
CHANGED
|
@@ -51,8 +51,9 @@ export interface ResolvedSlideFile {
|
|
|
51
51
|
* Resolution priority (ADR-022):
|
|
52
52
|
* 1. Deck-local pattern: {basePath}/patterns/{name}/index.tsx
|
|
53
53
|
* 2. Deck-local pattern: {basePath}/patterns/{name}/index.js
|
|
54
|
-
* 3. Theme pattern: {patternsDir}/{name}/index.js
|
|
55
|
-
* 4. Theme pattern: {patternsDir}/{name}.js
|
|
54
|
+
* 3. Theme pattern: {patternsDir}/{name}/index.js (compiled)
|
|
55
|
+
* 4. Theme pattern: {patternsDir}/{name}.js (compiled, flat)
|
|
56
|
+
* 5. Theme pattern: {patternsSrcDir}/{name}/index.tsx (source, on-the-fly compile)
|
|
56
57
|
*
|
|
57
58
|
* Files with extensions (.html etc) are resolved relative to basePath as passthrough.
|
|
58
59
|
*/
|
|
@@ -60,6 +61,7 @@ export async function resolveSlideFile(
|
|
|
60
61
|
file: string,
|
|
61
62
|
basePath: string,
|
|
62
63
|
patternsDir: string,
|
|
64
|
+
patternsSrcDir?: string,
|
|
63
65
|
): Promise<ResolvedSlideFile> {
|
|
64
66
|
const ext = extname(file);
|
|
65
67
|
|
|
@@ -100,9 +102,22 @@ export async function resolveSlideFile(
|
|
|
100
102
|
await access(flatPath);
|
|
101
103
|
return { type: "pattern", path: flatPath };
|
|
102
104
|
} catch {
|
|
103
|
-
|
|
104
|
-
`Pattern "${file}" not found. Looked in:\n ${localTsxPath}\n ${localJsPath}\n ${dirIndexPath}\n ${flatPath}`,
|
|
105
|
-
);
|
|
105
|
+
// continue
|
|
106
106
|
}
|
|
107
107
|
}
|
|
108
|
+
|
|
109
|
+
// 5. Theme source: patternsSrcDir/{name}/index.tsx (on-the-fly compile)
|
|
110
|
+
if (patternsSrcDir) {
|
|
111
|
+
const themeTsxPath = resolve(patternsSrcDir, file, "index.tsx");
|
|
112
|
+
try {
|
|
113
|
+
await access(themeTsxPath);
|
|
114
|
+
return { type: "pattern", path: themeTsxPath, tsx: true };
|
|
115
|
+
} catch {
|
|
116
|
+
// continue
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
throw new Error(
|
|
121
|
+
`Pattern "${file}" not found. Looked in:\n ${localTsxPath}\n ${localJsPath}\n ${resolve(patternsDir, file, "index.js")}\n ${resolve(patternsDir, `${file}.js`)}${patternsSrcDir ? `\n ${resolve(patternsSrcDir, file, "index.tsx")}` : ""}`,
|
|
122
|
+
);
|
|
108
123
|
}
|
package/src/validator.ts
CHANGED
|
@@ -7,6 +7,8 @@ import { resolveSlideFile } from "./parser.js";
|
|
|
7
7
|
export interface ValidationContext {
|
|
8
8
|
basePath: string;
|
|
9
9
|
patternsDir: string;
|
|
10
|
+
/** Source patterns directory for .tsx fallback (e.g. themes/{theme}/patterns/) */
|
|
11
|
+
patternsSrcDir?: string;
|
|
10
12
|
/** Optional function to compile .tsx files on-the-fly. Provided by renderer. */
|
|
11
13
|
compileTsx?: (tsxPath: string) => Promise<string>;
|
|
12
14
|
}
|
|
@@ -52,6 +54,7 @@ export async function validateDeck(
|
|
|
52
54
|
slide.file,
|
|
53
55
|
context.basePath,
|
|
54
56
|
context.patternsDir,
|
|
57
|
+
context.patternsSrcDir,
|
|
55
58
|
);
|
|
56
59
|
|
|
57
60
|
if (resolved.type === "html") {
|