@esportsplus/template 0.31.3 → 0.31.5

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.
@@ -12,7 +12,8 @@ declare const getNames: () => {
12
12
  event: string;
13
13
  slot: string;
14
14
  };
15
+ declare const initNamespace: () => void;
15
16
  declare const needsArraySlotImport: (sourceFile: ts.SourceFile) => boolean;
16
17
  declare const setTypeChecker: (checker: ts.TypeChecker | undefined) => void;
17
- export { addArraySlotImport, generateCode, generateReactiveInlining, getNames, needsArraySlotImport, setTypeChecker };
18
+ export { addArraySlotImport, generateCode, generateReactiveInlining, getNames, initNamespace, needsArraySlotImport, setTypeChecker };
18
19
  export type { CodegenResult };
@@ -1,8 +1,9 @@
1
- import { addImport, applyReplacementsReverse, uid } from '@esportsplus/typescript/transformer';
1
+ import { applyReplacementsReverse, uid } from '@esportsplus/typescript/transformer';
2
2
  import { analyzeExpression, generateAttributeBinding, generateSpreadBindings } from './type-analyzer.js';
3
3
  import { ts } from '@esportsplus/typescript';
4
4
  import parser from './parser.js';
5
5
  const ARROW_EMPTY_PARAMS = /\(\s*\)\s*=>\s*$/;
6
+ const TEMPLATE_IMPORT = /import\s+\{[^}]*\}\s+from\s+['"]@esportsplus\/template['"];?\s*\n?/g;
6
7
  let currentChecker, hoistedFactories = new Map(), htmlToTemplateId = new Map(), ns = '';
7
8
  function collectNestedTemplateReplacements(node, exprStart, sourceFile, replacements) {
8
9
  if (isNestedHtmlTemplate(node)) {
@@ -198,15 +199,12 @@ function rewriteExpression(expr, sourceFile) {
198
199
  return applyReplacementsReverse(expr.getText(sourceFile), replacements);
199
200
  }
200
201
  const addArraySlotImport = (code) => {
201
- return addImport(code, '@esportsplus/template', ['ArraySlot']);
202
+ return `import * as ${ns} from '@esportsplus/template';\n\n` + code.replace(TEMPLATE_IMPORT, '');
202
203
  };
203
204
  const generateCode = (templates, originalCode, sourceFile) => {
204
205
  if (templates.length === 0) {
205
206
  return { changed: false, code: originalCode };
206
207
  }
207
- hoistedFactories.clear();
208
- htmlToTemplateId.clear();
209
- ns = uid('t');
210
208
  let rootTemplates = templates.filter(t => !isNestedTemplate(t, templates));
211
209
  if (rootTemplates.length === 0) {
212
210
  return { changed: false, code: originalCode };
@@ -241,6 +239,7 @@ const generateCode = (templates, originalCode, sourceFile) => {
241
239
  for (let [id, html] of hoistedFactories) {
242
240
  factories.push(`const ${id} = ${ns}.template(\`${html}\`);`);
243
241
  }
242
+ code = code.replace(TEMPLATE_IMPORT, '');
244
243
  code = generateImports() + '\n\n' + factories.join('\n') + '\n\n' + code;
245
244
  }
246
245
  return { changed, code };
@@ -266,10 +265,15 @@ const getNames = () => ({
266
265
  event: `${ns}.event`,
267
266
  slot: `${ns}.slot`
268
267
  });
268
+ const initNamespace = () => {
269
+ hoistedFactories.clear();
270
+ htmlToTemplateId.clear();
271
+ ns = uid('t');
272
+ };
269
273
  const needsArraySlotImport = (sourceFile) => {
270
274
  return hasArraySlotUsage(sourceFile) && !hasArraySlotImport(sourceFile);
271
275
  };
272
276
  const setTypeChecker = (checker) => {
273
277
  currentChecker = checker;
274
278
  };
275
- export { addArraySlotImport, generateCode, generateReactiveInlining, getNames, needsArraySlotImport, setTypeChecker };
279
+ export { addArraySlotImport, generateCode, generateReactiveInlining, getNames, initNamespace, needsArraySlotImport, setTypeChecker };
@@ -1,5 +1,5 @@
1
1
  import { mightNeedTransform } from '@esportsplus/typescript/transformer';
2
- import { addArraySlotImport, generateCode, generateReactiveInlining, needsArraySlotImport, setTypeChecker } from './codegen.js';
2
+ import { addArraySlotImport, generateCode, generateReactiveInlining, initNamespace, needsArraySlotImport, setTypeChecker } from './codegen.js';
3
3
  import { findHtmlTemplates, findReactiveCalls } from './ts-parser.js';
4
4
  import { ts } from '@esportsplus/typescript';
5
5
  const PATTERNS = ['html`', 'html.reactive'];
@@ -23,6 +23,7 @@ function createTransformer(program) {
23
23
  }
24
24
  function transformCode(code, sourceFile) {
25
25
  let changed = false, result = code;
26
+ initNamespace();
26
27
  let reactiveCalls = findReactiveCalls(sourceFile);
27
28
  if (reactiveCalls.length > 0) {
28
29
  result = generateReactiveInlining(reactiveCalls, result, sourceFile);
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "author": "ICJR",
3
3
  "dependencies": {
4
4
  "@esportsplus/queue": "^0.2.0",
5
- "@esportsplus/reactivity": "^0.24.3",
5
+ "@esportsplus/reactivity": "^0.24.4",
6
6
  "@esportsplus/utilities": "^0.27.2",
7
7
  "serve": "^14.2.5"
8
8
  },
@@ -40,7 +40,7 @@
40
40
  },
41
41
  "type": "module",
42
42
  "types": "./build/index.d.ts",
43
- "version": "0.31.3",
43
+ "version": "0.31.5",
44
44
  "scripts": {
45
45
  "build": "tsc",
46
46
  "build:test": "vite build --config test/vite.config.ts",
@@ -1,4 +1,4 @@
1
- import { addImport, applyReplacementsReverse, uid } from '@esportsplus/typescript/transformer';
1
+ import { applyReplacementsReverse, uid } from '@esportsplus/typescript/transformer';
2
2
  import type { Replacement } from '@esportsplus/typescript/transformer';
3
3
  import type { ReactiveCallInfo, TemplateInfo } from './ts-parser';
4
4
  import { analyzeExpression, generateAttributeBinding, generateSpreadBindings } from './type-analyzer';
@@ -33,6 +33,8 @@ type ParseResult = {
33
33
 
34
34
  const ARROW_EMPTY_PARAMS = /\(\s*\)\s*=>\s*$/;
35
35
 
36
+ const TEMPLATE_IMPORT = /import\s+\{[^}]*\}\s+from\s+['"]@esportsplus\/template['"];?\s*\n?/g;
37
+
36
38
 
37
39
  let currentChecker: ts.TypeChecker | undefined,
38
40
  hoistedFactories = new Map<string, string>(),
@@ -344,7 +346,8 @@ function rewriteExpression(expr: ts.Expression, sourceFile: ts.SourceFile): stri
344
346
 
345
347
 
346
348
  const addArraySlotImport = (code: string): string => {
347
- return addImport(code, '@esportsplus/template', ['ArraySlot']);
349
+ // Strip original @esportsplus/template imports (they lose symbol bindings in TS 5.9.3)
350
+ return `import * as ${ns} from '@esportsplus/template';\n\n` + code.replace(TEMPLATE_IMPORT, '');
348
351
  };
349
352
 
350
353
  const generateCode = (templates: TemplateInfo[], originalCode: string, sourceFile: ts.SourceFile): CodegenResult => {
@@ -352,10 +355,6 @@ const generateCode = (templates: TemplateInfo[], originalCode: string, sourceFil
352
355
  return { changed: false, code: originalCode };
353
356
  }
354
357
 
355
- hoistedFactories.clear();
356
- htmlToTemplateId.clear();
357
- ns = uid('t');
358
-
359
358
  let rootTemplates = templates.filter(t => !isNestedTemplate(t, templates));
360
359
 
361
360
  if (rootTemplates.length === 0) {
@@ -413,6 +412,8 @@ const generateCode = (templates: TemplateInfo[], originalCode: string, sourceFil
413
412
  factories.push(`const ${id} = ${ns}.template(\`${html}\`);`);
414
413
  }
415
414
 
415
+ // Strip original @esportsplus/template imports (they lose symbol bindings in TS 5.9.3)
416
+ code = code.replace(TEMPLATE_IMPORT, '');
416
417
  code = generateImports() + '\n\n' + factories.join('\n') + '\n\n' + code;
417
418
  }
418
419
 
@@ -447,6 +448,12 @@ const getNames = () => ({
447
448
  slot: `${ns}.slot`
448
449
  });
449
450
 
451
+ const initNamespace = (): void => {
452
+ hoistedFactories.clear();
453
+ htmlToTemplateId.clear();
454
+ ns = uid('t');
455
+ };
456
+
450
457
  const needsArraySlotImport = (sourceFile: ts.SourceFile): boolean => {
451
458
  return hasArraySlotUsage(sourceFile) && !hasArraySlotImport(sourceFile);
452
459
  };
@@ -456,5 +463,5 @@ const setTypeChecker = (checker: ts.TypeChecker | undefined): void => {
456
463
  };
457
464
 
458
465
 
459
- export { addArraySlotImport, generateCode, generateReactiveInlining, getNames, needsArraySlotImport, setTypeChecker };
466
+ export { addArraySlotImport, generateCode, generateReactiveInlining, getNames, initNamespace, needsArraySlotImport, setTypeChecker };
460
467
  export type { CodegenResult };
@@ -1,5 +1,5 @@
1
1
  import { mightNeedTransform } from '@esportsplus/typescript/transformer';
2
- import { addArraySlotImport, generateCode, generateReactiveInlining, needsArraySlotImport, setTypeChecker } from './codegen';
2
+ import { addArraySlotImport, generateCode, generateReactiveInlining, initNamespace, needsArraySlotImport, setTypeChecker } from './codegen';
3
3
  import { findHtmlTemplates, findReactiveCalls } from './ts-parser';
4
4
  import { ts } from '@esportsplus/typescript';
5
5
 
@@ -47,6 +47,8 @@ function transformCode(code: string, sourceFile: ts.SourceFile): TransformResult
47
47
  let changed = false,
48
48
  result = code;
49
49
 
50
+ initNamespace();
51
+
50
52
  let reactiveCalls = findReactiveCalls(sourceFile);
51
53
 
52
54
  if (reactiveCalls.length > 0) {