@weave-framework/compiler 0.2.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/LICENSE +21 -0
- package/dist/ast.d.ts +243 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +3 -0
- package/dist/ast.js.map +1 -0
- package/dist/codegen.d.ts +25 -0
- package/dist/codegen.d.ts.map +1 -0
- package/dist/codegen.js +543 -0
- package/dist/codegen.js.map +1 -0
- package/dist/component.d.ts +60 -0
- package/dist/component.d.ts.map +1 -0
- package/dist/component.js +116 -0
- package/dist/component.js.map +1 -0
- package/dist/css.d.ts +26 -0
- package/dist/css.d.ts.map +1 -0
- package/dist/css.js +344 -0
- package/dist/css.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12 -0
- package/dist/index.js.map +1 -0
- package/dist/infer.d.ts +13 -0
- package/dist/infer.d.ts.map +1 -0
- package/dist/infer.js +113 -0
- package/dist/infer.js.map +1 -0
- package/dist/parser.d.ts +15 -0
- package/dist/parser.d.ts.map +1 -0
- package/dist/parser.js +721 -0
- package/dist/parser.js.map +1 -0
- package/dist/scope.d.ts +71 -0
- package/dist/scope.d.ts.map +1 -0
- package/dist/scope.js +233 -0
- package/dist/scope.js.map +1 -0
- package/dist/sources.d.ts +52 -0
- package/dist/sources.d.ts.map +1 -0
- package/dist/sources.js +163 -0
- package/dist/sources.js.map +1 -0
- package/package.json +31 -0
package/dist/infer.js
ADDED
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Auto-scope inference: walk a template AST and return the names that should
|
|
3
|
+
* resolve to component data (`ctx.*`). Every free identifier in every template
|
|
4
|
+
* expression qualifies, minus JS globals (handled in {@link freeIdentifiers})
|
|
5
|
+
* and minus names a block *declares* — `@for` items + implicit `$` vars, `@let`
|
|
6
|
+
* names, `@if (… as alias)` — since those are bound locally (and, for `@for`
|
|
7
|
+
* `track`, used as real arrow params against the parent scope).
|
|
8
|
+
*
|
|
9
|
+
* Lexical and intentionally simple; M8 replaces it with TS-AST resolution.
|
|
10
|
+
*/
|
|
11
|
+
import { freeIdentifiers } from './scope.js';
|
|
12
|
+
const FOR_VARS = ['$index', '$count', '$first', '$last', '$even', '$odd'];
|
|
13
|
+
export function inferCtxNames(nodes) {
|
|
14
|
+
const used = new Set();
|
|
15
|
+
const declared = new Set();
|
|
16
|
+
const add = (expr) => {
|
|
17
|
+
if (expr)
|
|
18
|
+
for (const id of freeIdentifiers(expr))
|
|
19
|
+
used.add(id);
|
|
20
|
+
};
|
|
21
|
+
const walk = (list) => {
|
|
22
|
+
for (const node of list) {
|
|
23
|
+
switch (node.type) {
|
|
24
|
+
case 'text':
|
|
25
|
+
break;
|
|
26
|
+
case 'interp':
|
|
27
|
+
add(node.expr);
|
|
28
|
+
break;
|
|
29
|
+
case 'let':
|
|
30
|
+
add(node.expr);
|
|
31
|
+
declared.add(node.name);
|
|
32
|
+
break;
|
|
33
|
+
case 'element':
|
|
34
|
+
for (const attr of node.attrs) {
|
|
35
|
+
if (attr.type === 'use')
|
|
36
|
+
add(attr.name); // the action identifier resolves to ctx
|
|
37
|
+
if (attr.type === 'transition')
|
|
38
|
+
add(attr.name); // the transition fn resolves to ctx
|
|
39
|
+
if (attr.type !== 'static')
|
|
40
|
+
add(attr.expr);
|
|
41
|
+
}
|
|
42
|
+
walk(node.children);
|
|
43
|
+
break;
|
|
44
|
+
case 'if':
|
|
45
|
+
for (const br of node.branches) {
|
|
46
|
+
add(br.cond);
|
|
47
|
+
if (br.alias)
|
|
48
|
+
declared.add(br.alias);
|
|
49
|
+
walk(br.children);
|
|
50
|
+
}
|
|
51
|
+
break;
|
|
52
|
+
case 'for':
|
|
53
|
+
add(node.list);
|
|
54
|
+
add(node.track);
|
|
55
|
+
declared.add(node.item);
|
|
56
|
+
for (const v of FOR_VARS)
|
|
57
|
+
declared.add(v);
|
|
58
|
+
walk(node.children);
|
|
59
|
+
if (node.empty)
|
|
60
|
+
walk(node.empty);
|
|
61
|
+
break;
|
|
62
|
+
case 'switch':
|
|
63
|
+
add(node.expr);
|
|
64
|
+
for (const c of node.cases) {
|
|
65
|
+
add(c.test);
|
|
66
|
+
walk(c.children);
|
|
67
|
+
}
|
|
68
|
+
break;
|
|
69
|
+
case 'defer':
|
|
70
|
+
if (node.trigger.kind === 'when')
|
|
71
|
+
add(node.trigger.expr);
|
|
72
|
+
if (node.trigger.kind === 'timer')
|
|
73
|
+
add(node.trigger.ms);
|
|
74
|
+
walk(node.children);
|
|
75
|
+
if (node.placeholder)
|
|
76
|
+
walk(node.placeholder);
|
|
77
|
+
break;
|
|
78
|
+
case 'await':
|
|
79
|
+
add(node.expr);
|
|
80
|
+
if (node.pending)
|
|
81
|
+
walk(node.pending);
|
|
82
|
+
if (node.then) {
|
|
83
|
+
if (node.then.alias)
|
|
84
|
+
declared.add(node.then.alias);
|
|
85
|
+
walk(node.then.children);
|
|
86
|
+
}
|
|
87
|
+
if (node.catch) {
|
|
88
|
+
if (node.catch.alias)
|
|
89
|
+
declared.add(node.catch.alias);
|
|
90
|
+
walk(node.catch.children);
|
|
91
|
+
}
|
|
92
|
+
break;
|
|
93
|
+
case 'snippet':
|
|
94
|
+
// the snippet name + its params are template-locals, not ctx
|
|
95
|
+
declared.add(node.name);
|
|
96
|
+
for (const p of node.params)
|
|
97
|
+
declared.add(p);
|
|
98
|
+
walk(node.children);
|
|
99
|
+
break;
|
|
100
|
+
case 'render':
|
|
101
|
+
add(node.expr); // the snippet name is subtracted via `declared`
|
|
102
|
+
break;
|
|
103
|
+
case 'key':
|
|
104
|
+
add(node.expr);
|
|
105
|
+
walk(node.children);
|
|
106
|
+
break;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
};
|
|
110
|
+
walk(nodes);
|
|
111
|
+
return [...used].filter((n) => !declared.has(n)).sort();
|
|
112
|
+
}
|
|
113
|
+
//# sourceMappingURL=infer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"infer.js","sourceRoot":"","sources":["../src/infer.ts"],"names":[],"mappings":"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"}
|
package/dist/parser.d.ts
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Weave template parser — hand-written, zero dependencies.
|
|
3
|
+
*
|
|
4
|
+
* Parses an HTML-like template into a {@link TemplateNode} tree. Handles
|
|
5
|
+
* elements, text, `{{ expr }}` interpolation, and the binding attribute forms
|
|
6
|
+
* (`name={expr}`, `.prop={expr}`, `on:evt|mod={expr}`, `class:name={expr}`,
|
|
7
|
+
* `bind:name={expr}`, `ref={expr}`). Control-flow blocks (`@if`/`@for`) are
|
|
8
|
+
* added in M4; this parser deliberately treats a leading `@` as an error so the
|
|
9
|
+
* gap is explicit rather than silently mis-parsed.
|
|
10
|
+
*/
|
|
11
|
+
import type { TemplateNode } from './ast.js';
|
|
12
|
+
export declare class ParseError extends Error {
|
|
13
|
+
}
|
|
14
|
+
export declare function parseTemplate(input: string): TemplateNode[];
|
|
15
|
+
//# sourceMappingURL=parser.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EACV,YAAY,EAGb,MAAM,UAAU,CAAC;AAUlB,qBAAa,UAAW,SAAQ,KAAK;CAAG;AAQxC,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,YAAY,EAAE,CAI3D"}
|