@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 {
|
|
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
|
|
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.
|
|
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.
|
|
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 {
|
|
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
|
-
|
|
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 };
|
package/src/transformer/index.ts
CHANGED
|
@@ -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) {
|