coffeehaml 0.7.0 → 0.7.1
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/README.md +21 -5
- package/dist/ast.js +334 -125
- package/dist/cli.js +363 -291
- package/dist/compiler.js +126 -89
- package/dist/emitter.js +771 -736
- package/dist/errors.js +5 -2
- package/dist/expressions.js +211 -154
- package/dist/index.js +22 -6
- package/dist/lexer.js +536 -340
- package/dist/parser.js +533 -438
- package/dist/prettier/coffeescript-formatter.js +292 -392
- package/dist/prettier/index.js +96 -60
- package/dist/prettier/options.js +179 -147
- package/dist/prettier/printer.js +549 -642
- package/dist/src/ast.js +338 -0
- package/dist/src/cli.js +430 -0
- package/dist/src/compiler.js +132 -0
- package/dist/src/emitter.js +791 -0
- package/dist/src/errors.js +5 -0
- package/dist/src/expressions.js +223 -0
- package/dist/src/index.js +22 -0
- package/dist/src/lexer.js +504 -0
- package/dist/src/parser.js +575 -0
- package/dist/src/types.js +122 -0
- package/dist/src/vite-plugin.js +78 -0
- package/dist/types.js +122 -12
- package/dist/vite-plugin.js +78 -63
- package/package.json +4 -9
- package/dist/ast.d.ts +0 -123
- package/dist/ast.d.ts.map +0 -1
- package/dist/ast.js.map +0 -1
- package/dist/cli.d.ts +0 -3
- package/dist/cli.d.ts.map +0 -1
- package/dist/cli.js.map +0 -1
- package/dist/compiler.d.ts +0 -10
- package/dist/compiler.d.ts.map +0 -1
- package/dist/compiler.js.map +0 -1
- package/dist/emitter.d.ts +0 -4
- package/dist/emitter.d.ts.map +0 -1
- package/dist/emitter.js.map +0 -1
- package/dist/errors.d.ts +0 -3
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js.map +0 -1
- package/dist/expressions.d.ts +0 -22
- package/dist/expressions.d.ts.map +0 -1
- package/dist/expressions.js.map +0 -1
- package/dist/index.d.ts +0 -7
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/lexer.d.ts +0 -30
- package/dist/lexer.d.ts.map +0 -1
- package/dist/lexer.js.map +0 -1
- package/dist/parser.d.ts +0 -10
- package/dist/parser.d.ts.map +0 -1
- package/dist/parser.js.map +0 -1
- package/dist/prettier/coffeescript-formatter.d.ts +0 -31
- package/dist/prettier/coffeescript-formatter.d.ts.map +0 -1
- package/dist/prettier/coffeescript-formatter.js.map +0 -1
- package/dist/prettier/index.d.ts +0 -8
- package/dist/prettier/index.d.ts.map +0 -1
- package/dist/prettier/index.js.map +0 -1
- package/dist/prettier/options.d.ts +0 -10
- package/dist/prettier/options.d.ts.map +0 -1
- package/dist/prettier/options.js.map +0 -1
- package/dist/prettier/printer.d.ts +0 -45
- package/dist/prettier/printer.d.ts.map +0 -1
- package/dist/prettier/printer.js.map +0 -1
- package/dist/types.d.ts +0 -76
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js.map +0 -1
- package/dist/vite-plugin.d.ts +0 -7
- package/dist/vite-plugin.d.ts.map +0 -1
- package/dist/vite-plugin.js.map +0 -1
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
// Generated by CoffeeScript 2.7.0
|
|
2
|
+
// expressions.coffee — CoffeeScript expression compilation bridge
|
|
3
|
+
var _coffeeScriptAvailable, _coffeeScriptUnavailableReason, _require, checkCoffeeScript, loadCoffeeScript, stripCoffeeWrapper, stripToConst;
|
|
4
|
+
|
|
5
|
+
import {
|
|
6
|
+
createRequire
|
|
7
|
+
} from 'module';
|
|
8
|
+
|
|
9
|
+
import {
|
|
10
|
+
Expression
|
|
11
|
+
} from './ast.js';
|
|
12
|
+
|
|
13
|
+
import {
|
|
14
|
+
CompileError
|
|
15
|
+
} from './types.js';
|
|
16
|
+
|
|
17
|
+
// ESM-safe CoffeeScript loader
|
|
18
|
+
_require = createRequire(import.meta.url);
|
|
19
|
+
|
|
20
|
+
loadCoffeeScript = function() {
|
|
21
|
+
try {
|
|
22
|
+
return _require('coffeescript');
|
|
23
|
+
} catch (error) {
|
|
24
|
+
return null;
|
|
25
|
+
}
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// ─── Availability check ────────────────────────────────────
|
|
29
|
+
_coffeeScriptAvailable = null;
|
|
30
|
+
|
|
31
|
+
_coffeeScriptUnavailableReason = '';
|
|
32
|
+
|
|
33
|
+
checkCoffeeScript = function() {
|
|
34
|
+
var cs, e;
|
|
35
|
+
if (_coffeeScriptAvailable !== null) {
|
|
36
|
+
return _coffeeScriptAvailable;
|
|
37
|
+
}
|
|
38
|
+
try {
|
|
39
|
+
cs = loadCoffeeScript();
|
|
40
|
+
if (cs && typeof cs.compile === 'function') {
|
|
41
|
+
_coffeeScriptAvailable = true;
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
_coffeeScriptAvailable = false;
|
|
45
|
+
_coffeeScriptUnavailableReason = 'CoffeeScript module loaded but has no compile() function';
|
|
46
|
+
return false;
|
|
47
|
+
} catch (error) {
|
|
48
|
+
e = error;
|
|
49
|
+
_coffeeScriptAvailable = false;
|
|
50
|
+
_coffeeScriptUnavailableReason = `CoffeeScript unavailable: ${e instanceof Error ? e.message : String(e)}`;
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
export var isCoffeeScriptAvailable = function() {
|
|
56
|
+
return checkCoffeeScript();
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
export var getCoffeeScriptUnavailableReason = function() {
|
|
60
|
+
checkCoffeeScript();
|
|
61
|
+
return _coffeeScriptUnavailableReason;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
// ─── Parse expression ──────────────────────────────────────
|
|
65
|
+
export var parseExpression = function(source) {
|
|
66
|
+
var CoffeeScript, expr;
|
|
67
|
+
expr = new Expression(source);
|
|
68
|
+
try {
|
|
69
|
+
CoffeeScript = loadCoffeeScript();
|
|
70
|
+
if (CoffeeScript && typeof CoffeeScript.parse === 'function') {
|
|
71
|
+
expr.parsed = CoffeeScript.parse(source, {
|
|
72
|
+
bare: true
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
} catch (error) {
|
|
76
|
+
|
|
77
|
+
}
|
|
78
|
+
// Parse error — store raw source
|
|
79
|
+
return expr;
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
// ─── Compile expression to JS ──────────────────────────────
|
|
83
|
+
export var compileExpression = function(expr, location = null) {
|
|
84
|
+
var CoffeeScript, e, js, msg;
|
|
85
|
+
if (expr.source.trim() === '') {
|
|
86
|
+
return '';
|
|
87
|
+
}
|
|
88
|
+
try {
|
|
89
|
+
CoffeeScript = loadCoffeeScript();
|
|
90
|
+
if (CoffeeScript && typeof CoffeeScript.compile === 'function') {
|
|
91
|
+
js = CoffeeScript.compile(expr.source, {
|
|
92
|
+
bare: true,
|
|
93
|
+
inlineMap: false
|
|
94
|
+
});
|
|
95
|
+
return stripCoffeeWrapper(js, expr.source);
|
|
96
|
+
}
|
|
97
|
+
} catch (error) {
|
|
98
|
+
e = error;
|
|
99
|
+
msg = e instanceof Error ? e.message : String(e);
|
|
100
|
+
if (location) {
|
|
101
|
+
throw new CompileError(`CoffeeScript expression error: ${msg}`, 'emitter', 'EXPRESSION_ERROR', location, `Check expression: ${expr.source.slice(0, 80)}`);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
return expr.source;
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
// ─── Strip CoffeeScript wrapper ────────────────────────────
|
|
108
|
+
stripCoffeeWrapper = function(js, _original) {
|
|
109
|
+
var body, l, lines, meaningful, result, varLines;
|
|
110
|
+
result = js.trim();
|
|
111
|
+
result = result.replace(/;\s*$/, '');
|
|
112
|
+
lines = (function() {
|
|
113
|
+
var i, len, ref, results;
|
|
114
|
+
ref = result.split('\n');
|
|
115
|
+
results = [];
|
|
116
|
+
for (i = 0, len = ref.length; i < len; i++) {
|
|
117
|
+
l = ref[i];
|
|
118
|
+
if (l.trim() !== '') {
|
|
119
|
+
results.push(l);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return results;
|
|
123
|
+
})();
|
|
124
|
+
if (lines.length > 0) {
|
|
125
|
+
varLines = (function() {
|
|
126
|
+
var i, len, results;
|
|
127
|
+
results = [];
|
|
128
|
+
for (i = 0, len = lines.length; i < len; i++) {
|
|
129
|
+
l = lines[i];
|
|
130
|
+
if (/^\s*var\b/.test(l)) {
|
|
131
|
+
results.push(l);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
return results;
|
|
135
|
+
})();
|
|
136
|
+
meaningful = (function() {
|
|
137
|
+
var i, len, results;
|
|
138
|
+
results = [];
|
|
139
|
+
for (i = 0, len = lines.length; i < len; i++) {
|
|
140
|
+
l = lines[i];
|
|
141
|
+
if (!/^\s*var\b/.test(l)) {
|
|
142
|
+
results.push(l);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
return results;
|
|
146
|
+
})();
|
|
147
|
+
if (meaningful.length > 0) {
|
|
148
|
+
if (varLines.length > 0) {
|
|
149
|
+
body = meaningful.join(' ');
|
|
150
|
+
return `(() => { ${varLines.join(' ')} return ${body}; })()`;
|
|
151
|
+
}
|
|
152
|
+
return meaningful.join('\n');
|
|
153
|
+
}
|
|
154
|
+
return lines[lines.length - 1];
|
|
155
|
+
}
|
|
156
|
+
return result;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
// ─── Compile statement to JS ───────────────────────────────
|
|
160
|
+
export var compileStatement = function(source, location = null) {
|
|
161
|
+
var CoffeeScript, e, js, msg;
|
|
162
|
+
try {
|
|
163
|
+
CoffeeScript = loadCoffeeScript();
|
|
164
|
+
if (CoffeeScript && typeof CoffeeScript.compile === 'function') {
|
|
165
|
+
js = CoffeeScript.compile(source, {
|
|
166
|
+
bare: true,
|
|
167
|
+
inlineMap: false
|
|
168
|
+
});
|
|
169
|
+
return stripToConst(js.trim());
|
|
170
|
+
}
|
|
171
|
+
} catch (error) {
|
|
172
|
+
e = error;
|
|
173
|
+
msg = e instanceof Error ? e.message : String(e);
|
|
174
|
+
if (location) {
|
|
175
|
+
throw new CompileError(`CoffeeScript compilation error: ${msg}`, 'emitter', 'COMPILE_ERROR', location, `Check statement: ${source.slice(0, 80)}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
return source;
|
|
179
|
+
};
|
|
180
|
+
|
|
181
|
+
// ─── Convert var → const/let ───────────────────────────────
|
|
182
|
+
stripToConst = function(js) {
|
|
183
|
+
var assignLine, assignments, i, l, len, lines, name, varLine, varNames;
|
|
184
|
+
lines = (function() {
|
|
185
|
+
var i, len, ref, results;
|
|
186
|
+
ref = js.split('\n');
|
|
187
|
+
results = [];
|
|
188
|
+
for (i = 0, len = ref.length; i < len; i++) {
|
|
189
|
+
l = ref[i];
|
|
190
|
+
if (l.trim() !== '') {
|
|
191
|
+
results.push(l);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return results;
|
|
195
|
+
})();
|
|
196
|
+
varLine = lines.find(function(l) {
|
|
197
|
+
return /^\s*var\b/.test(l);
|
|
198
|
+
});
|
|
199
|
+
if (!varLine) {
|
|
200
|
+
return js.replace(/;\s*$/, '');
|
|
201
|
+
}
|
|
202
|
+
varNames = varLine.replace(/^\s*var\s+/, '').replace(/;\s*$/, '').split(',').map(function(s) {
|
|
203
|
+
return s.trim();
|
|
204
|
+
}).filter(Boolean);
|
|
205
|
+
assignments = [];
|
|
206
|
+
for (i = 0, len = varNames.length; i < len; i++) {
|
|
207
|
+
name = varNames[i];
|
|
208
|
+
assignLine = lines.find(function(l) {
|
|
209
|
+
var t;
|
|
210
|
+
t = l.trim();
|
|
211
|
+
return t.startsWith(`${name} =`) || t.startsWith(`${name}=`);
|
|
212
|
+
});
|
|
213
|
+
if (assignLine) {
|
|
214
|
+
assignments.push('const ' + assignLine.trim().replace(/;\s*$/, ''));
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (assignments.length > 0) {
|
|
218
|
+
return assignments.join('; ');
|
|
219
|
+
}
|
|
220
|
+
return lines.filter(function(l) {
|
|
221
|
+
return !/^\s*$/.test(l);
|
|
222
|
+
}).join(' ').replace(/;\s*$/, '');
|
|
223
|
+
};
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
// Generated by CoffeeScript 2.7.0
|
|
2
|
+
// index.coffee — public API
|
|
3
|
+
export {
|
|
4
|
+
compile,
|
|
5
|
+
compileFile,
|
|
6
|
+
resolveCoffeeHamlFile,
|
|
7
|
+
COFFEEHAML_EXTENSIONS
|
|
8
|
+
} from './compiler.js';
|
|
9
|
+
|
|
10
|
+
export {
|
|
11
|
+
isCoffeeScriptAvailable
|
|
12
|
+
} from './expressions.js';
|
|
13
|
+
|
|
14
|
+
export {
|
|
15
|
+
CompileError,
|
|
16
|
+
CompileWarning
|
|
17
|
+
} from './types.js';
|
|
18
|
+
|
|
19
|
+
export {
|
|
20
|
+
// Prettier plugin
|
|
21
|
+
default as prettierPlugin
|
|
22
|
+
} from './prettier/index.js';
|