coffeehaml 0.6.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.
Files changed (66) hide show
  1. package/README.md +21 -5
  2. package/dist/ast.js +334 -123
  3. package/dist/cli.js +363 -291
  4. package/dist/compiler.js +126 -89
  5. package/dist/emitter.js +771 -736
  6. package/dist/errors.js +5 -2
  7. package/dist/expressions.js +211 -154
  8. package/dist/index.js +22 -4
  9. package/dist/lexer.js +536 -340
  10. package/dist/parser.js +533 -432
  11. package/dist/prettier/coffeescript-formatter.js +309 -0
  12. package/dist/prettier/index.js +105 -0
  13. package/dist/prettier/options.js +232 -0
  14. package/dist/prettier/printer.js +559 -0
  15. package/dist/src/ast.js +338 -0
  16. package/dist/src/cli.js +430 -0
  17. package/dist/src/compiler.js +132 -0
  18. package/dist/src/emitter.js +791 -0
  19. package/dist/src/errors.js +5 -0
  20. package/dist/src/expressions.js +223 -0
  21. package/dist/src/index.js +22 -0
  22. package/dist/src/lexer.js +504 -0
  23. package/dist/src/parser.js +575 -0
  24. package/dist/src/types.js +122 -0
  25. package/dist/src/vite-plugin.js +78 -0
  26. package/dist/types.js +122 -12
  27. package/dist/vite-plugin.js +78 -63
  28. package/docs/examples.md +201 -1
  29. package/docs/grammar.md +90 -1
  30. package/docs/index.html +260 -37
  31. package/package.json +12 -10
  32. package/syntaxes/CoffeeHaml.tmLanguage +815 -868
  33. package/syntaxes/coffeehaml.tmLanguage.json +352 -161
  34. package/dist/ast.d.ts +0 -117
  35. package/dist/ast.d.ts.map +0 -1
  36. package/dist/ast.js.map +0 -1
  37. package/dist/cli.d.ts +0 -3
  38. package/dist/cli.d.ts.map +0 -1
  39. package/dist/cli.js.map +0 -1
  40. package/dist/compiler.d.ts +0 -10
  41. package/dist/compiler.d.ts.map +0 -1
  42. package/dist/compiler.js.map +0 -1
  43. package/dist/emitter.d.ts +0 -4
  44. package/dist/emitter.d.ts.map +0 -1
  45. package/dist/emitter.js.map +0 -1
  46. package/dist/errors.d.ts +0 -3
  47. package/dist/errors.d.ts.map +0 -1
  48. package/dist/errors.js.map +0 -1
  49. package/dist/expressions.d.ts +0 -22
  50. package/dist/expressions.d.ts.map +0 -1
  51. package/dist/expressions.js.map +0 -1
  52. package/dist/index.d.ts +0 -5
  53. package/dist/index.d.ts.map +0 -1
  54. package/dist/index.js.map +0 -1
  55. package/dist/lexer.d.ts +0 -30
  56. package/dist/lexer.d.ts.map +0 -1
  57. package/dist/lexer.js.map +0 -1
  58. package/dist/parser.d.ts +0 -10
  59. package/dist/parser.d.ts.map +0 -1
  60. package/dist/parser.js.map +0 -1
  61. package/dist/types.d.ts +0 -76
  62. package/dist/types.d.ts.map +0 -1
  63. package/dist/types.js.map +0 -1
  64. package/dist/vite-plugin.d.ts +0 -7
  65. package/dist/vite-plugin.d.ts.map +0 -1
  66. package/dist/vite-plugin.js.map +0 -1
@@ -0,0 +1,5 @@
1
+ // Generated by CoffeeScript 2.7.0
2
+ // errors.coffee — re-exports for convenience
3
+ export {
4
+ CompileError
5
+ } from './types.js';
@@ -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';