@knighted/jsx 1.5.1 → 1.6.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.
Files changed (55) hide show
  1. package/README.md +1 -0
  2. package/dist/cjs/debug/diagnostics.cjs +57 -0
  3. package/dist/cjs/debug/diagnostics.d.cts +6 -0
  4. package/dist/cjs/debug/index.cjs +7 -0
  5. package/dist/cjs/debug/index.d.cts +2 -0
  6. package/dist/cjs/internal/attribute-resolution.cjs +55 -0
  7. package/dist/cjs/internal/attribute-resolution.d.cts +15 -0
  8. package/dist/cjs/internal/dev-environment.cjs +41 -0
  9. package/dist/cjs/internal/dev-environment.d.cts +4 -0
  10. package/dist/cjs/internal/event-bindings.cjs +93 -0
  11. package/dist/cjs/internal/event-bindings.d.cts +22 -0
  12. package/dist/cjs/internal/template-diagnostics.cjs +171 -0
  13. package/dist/cjs/internal/template-diagnostics.d.cts +13 -0
  14. package/dist/cjs/jsx.cjs +9 -110
  15. package/dist/cjs/loader/jsx.cjs +92 -20
  16. package/dist/cjs/loader/jsx.d.cts +6 -1
  17. package/dist/cjs/node/bootstrap.cjs +19 -19
  18. package/dist/cjs/node/bootstrap.d.cts +2 -1
  19. package/dist/cjs/node/debug/index.cjs +6 -0
  20. package/dist/cjs/node/debug/index.d.cts +2 -0
  21. package/dist/cjs/node/index.cjs +1 -1
  22. package/dist/cjs/react/react-jsx.cjs +1 -1
  23. package/dist/cjs/runtime/shared.cjs +41 -22
  24. package/dist/cjs/runtime/shared.d.cts +5 -2
  25. package/dist/debug/diagnostics.d.ts +6 -0
  26. package/dist/debug/diagnostics.js +52 -0
  27. package/dist/debug/index.d.ts +2 -0
  28. package/dist/debug/index.js +3 -0
  29. package/dist/internal/attribute-resolution.d.ts +15 -0
  30. package/dist/internal/attribute-resolution.js +50 -0
  31. package/dist/internal/dev-environment.d.ts +4 -0
  32. package/dist/internal/dev-environment.js +34 -0
  33. package/dist/internal/event-bindings.d.ts +22 -0
  34. package/dist/internal/event-bindings.js +87 -0
  35. package/dist/internal/template-diagnostics.d.ts +13 -0
  36. package/dist/internal/template-diagnostics.js +167 -0
  37. package/dist/jsx.js +9 -110
  38. package/dist/lite/debug/diagnostics.js +1 -0
  39. package/dist/lite/debug/index.js +8 -0
  40. package/dist/lite/index.js +8 -4
  41. package/dist/lite/node/debug/index.js +8 -0
  42. package/dist/lite/node/index.js +8 -4
  43. package/dist/lite/node/react/index.js +7 -3
  44. package/dist/lite/react/index.js +7 -3
  45. package/dist/loader/jsx.d.ts +6 -1
  46. package/dist/loader/jsx.js +92 -20
  47. package/dist/node/bootstrap.d.ts +2 -1
  48. package/dist/node/bootstrap.js +19 -19
  49. package/dist/node/debug/index.d.ts +2 -0
  50. package/dist/node/debug/index.js +6 -0
  51. package/dist/node/index.js +1 -1
  52. package/dist/react/react-jsx.js +2 -2
  53. package/dist/runtime/shared.d.ts +5 -2
  54. package/dist/runtime/shared.js +39 -21
  55. package/package.json +40 -8
@@ -1,27 +1,29 @@
1
+ export { formatTaggedTemplateParserError } from '../internal/template-diagnostics.js';
1
2
  const OPEN_TAG_RE = /<\s*$/;
2
3
  const CLOSE_TAG_RE = /<\/\s*$/;
3
4
  export const PLACEHOLDER_PREFIX = '__KX_EXPR__';
4
5
  export const placeholderPattern = new RegExp(`${PLACEHOLDER_PREFIX}\\d+_\\d+__`, 'g');
5
6
  let invocationCounter = 0;
6
- export const parserOptions = {
7
- lang: 'jsx',
8
- sourceType: 'module',
9
- range: true,
10
- preserveParens: true,
11
- };
12
7
  export const formatParserError = (error) => {
13
8
  let message = `[oxc-parser] ${error.message}`;
14
- if (error.labels?.length) {
15
- const label = error.labels[0];
16
- if (label.message) {
17
- message += `\n${label.message}`;
18
- }
9
+ const primaryLabel = error.labels?.[0];
10
+ if (primaryLabel?.message) {
11
+ message += `\n${primaryLabel.message}`;
19
12
  }
20
13
  if (error.codeframe) {
21
14
  message += `\n${error.codeframe}`;
22
15
  }
16
+ if (error.helpMessage) {
17
+ message += `\n${error.helpMessage}`;
18
+ }
23
19
  return message;
24
20
  };
21
+ export const parserOptions = {
22
+ lang: 'jsx',
23
+ sourceType: 'module',
24
+ range: true,
25
+ preserveParens: true,
26
+ };
25
27
  export const extractRootNode = (program) => {
26
28
  for (const statement of program.body) {
27
29
  if (statement.type === 'ExpressionStatement') {
@@ -171,23 +173,39 @@ export const buildTemplate = (strings, values) => {
171
173
  let source = raw[0] ?? '';
172
174
  const templateId = invocationCounter++;
173
175
  let placeholderIndex = 0;
176
+ const expressionRanges = [];
174
177
  for (let idx = 0; idx < values.length; idx++) {
175
178
  const chunk = raw[idx] ?? '';
176
179
  const nextChunk = raw[idx + 1] ?? '';
177
180
  const value = values[idx];
178
181
  const isTagNamePosition = OPEN_TAG_RE.test(chunk) || CLOSE_TAG_RE.test(chunk);
182
+ let insertion;
179
183
  if (isTagNamePosition && typeof value === 'function') {
180
184
  const binding = ensureBinding(value, bindings, bindingLookup);
181
- source += binding.name + nextChunk;
182
- continue;
185
+ insertion = binding.name;
183
186
  }
184
- if (isTagNamePosition && typeof value === 'string') {
185
- source += value + nextChunk;
186
- continue;
187
+ else if (isTagNamePosition && typeof value === 'string') {
188
+ insertion = value;
187
189
  }
188
- const placeholder = `${PLACEHOLDER_PREFIX}${templateId}_${placeholderIndex++}__`;
189
- placeholders.set(placeholder, value);
190
- source += placeholder + nextChunk;
191
- }
192
- return { source, placeholders, bindings };
190
+ else {
191
+ const placeholder = `${PLACEHOLDER_PREFIX}${templateId}_${placeholderIndex++}__`;
192
+ placeholders.set(placeholder, value);
193
+ insertion = placeholder;
194
+ }
195
+ const sourceStart = source.length;
196
+ source += insertion;
197
+ const sourceEnd = source.length;
198
+ expressionRanges.push({
199
+ index: idx,
200
+ sourceStart,
201
+ sourceEnd,
202
+ });
203
+ source += nextChunk;
204
+ }
205
+ return {
206
+ source,
207
+ placeholders,
208
+ bindings,
209
+ diagnostics: { expressionRanges },
210
+ };
193
211
  };
package/package.json CHANGED
@@ -1,18 +1,18 @@
1
1
  {
2
2
  "name": "@knighted/jsx",
3
- "version": "1.5.1",
3
+ "version": "1.6.0",
4
4
  "description": "Runtime JSX tagged template that renders DOM or React trees anywhere without a build step.",
5
5
  "keywords": [
6
6
  "jsx runtime",
7
- "jsx template literal",
8
7
  "tagged template",
9
8
  "no-build jsx",
10
- "dom runtime",
11
- "react runtime",
9
+ "dom rendering",
10
+ "react rendering",
12
11
  "ssr",
13
- "lit",
12
+ "rspack loader",
14
13
  "webpack loader",
15
- "oxc parser"
14
+ "wasm parser",
15
+ "typescript plugin"
16
16
  ],
17
17
  "type": "module",
18
18
  "main": "./dist/index.js",
@@ -36,11 +36,31 @@
36
36
  "import": "./dist/jsx-runtime.js",
37
37
  "default": "./dist/jsx-runtime.js"
38
38
  },
39
+ "./debug": {
40
+ "types": "./dist/index.d.ts",
41
+ "import": "./dist/debug/index.js",
42
+ "default": "./dist/debug/index.js"
43
+ },
44
+ "./debug-tools": {
45
+ "types": "./dist/debug/diagnostics.d.ts",
46
+ "import": "./dist/debug/diagnostics.js",
47
+ "default": "./dist/debug/diagnostics.js"
48
+ },
39
49
  "./lite": {
40
50
  "types": "./dist/index.d.ts",
41
51
  "import": "./dist/lite/index.js",
42
52
  "default": "./dist/lite/index.js"
43
53
  },
54
+ "./lite/debug": {
55
+ "types": "./dist/index.d.ts",
56
+ "import": "./dist/lite/debug/index.js",
57
+ "default": "./dist/lite/debug/index.js"
58
+ },
59
+ "./lite/debug-tools": {
60
+ "types": "./dist/debug/diagnostics.d.ts",
61
+ "import": "./dist/lite/debug/diagnostics.js",
62
+ "default": "./dist/lite/debug/diagnostics.js"
63
+ },
44
64
  "./react": {
45
65
  "types": "./dist/react/index.d.ts",
46
66
  "import": "./dist/react/index.js",
@@ -56,11 +76,21 @@
56
76
  "import": "./dist/node/index.js",
57
77
  "default": "./dist/node/index.js"
58
78
  },
79
+ "./node/debug": {
80
+ "types": "./dist/node/index.d.ts",
81
+ "import": "./dist/node/debug/index.js",
82
+ "default": "./dist/node/debug/index.js"
83
+ },
59
84
  "./node/lite": {
60
85
  "types": "./dist/node/index.d.ts",
61
86
  "import": "./dist/lite/node/index.js",
62
87
  "default": "./dist/lite/node/index.js"
63
88
  },
89
+ "./node/lite/debug": {
90
+ "types": "./dist/node/index.d.ts",
91
+ "import": "./dist/lite/node/debug/index.js",
92
+ "default": "./dist/lite/node/debug/index.js"
93
+ },
64
94
  "./node/react": {
65
95
  "types": "./dist/node/react/index.d.ts",
66
96
  "import": "./dist/node/react/index.js",
@@ -85,9 +115,10 @@
85
115
  "build": "duel && npm run build:lite && npm run build:cli",
86
116
  "prepare": "husky",
87
117
  "precheck-types": "npm run build",
88
- "check-types": "npm run check-types:lib && npm run check-types:demo",
118
+ "check-types": "npm run check-types:lib && npm run check-types:demo && npm run check-types:test",
89
119
  "check-types:lib": "tsc --noEmit --project tsconfig.json",
90
120
  "check-types:demo": "tsc --noEmit --project examples/browser/tsconfig.json",
121
+ "check-types:test": "tsc --noEmit --project tsconfig.vitest.json",
91
122
  "lint": "eslint src test",
92
123
  "cycles": "madge src --circular --extensions ts,tsx,js,jsx --ts-config tsconfig.json",
93
124
  "prettier": "prettier -w .",
@@ -103,6 +134,7 @@
103
134
  "build:lite": "tsup --config tsup.config.ts",
104
135
  "build:cli": "tsup --config tsup.cli.config.ts",
105
136
  "setup:wasm": "node scripts/setup-wasm.mjs",
137
+ "sizecheck": "node scripts/sizecheck.mjs",
106
138
  "prepack": "npm run build"
107
139
  },
108
140
  "devDependencies": {
@@ -162,7 +194,7 @@
162
194
  "optionalDependencies": {
163
195
  "@oxc-parser/binding-darwin-arm64": "^0.105.0",
164
196
  "@oxc-parser/binding-linux-x64-gnu": "^0.105.0",
165
- "@oxc-parser/binding-wasm32-wasi": "0.105.0"
197
+ "@oxc-parser/binding-wasm32-wasi": "^0.105.0"
166
198
  },
167
199
  "overrides": {
168
200
  "module-lookup-amd": {