@craft-ts/dev-tools 0.7.0-beta.13

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 (237) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +154 -0
  3. package/generators.json +26 -0
  4. package/package.json +119 -0
  5. package/src/bin/craft-architecture-check.d.ts +2 -0
  6. package/src/bin/craft-architecture-check.js +51 -0
  7. package/src/bin/craft-architecture-check.js.map +1 -0
  8. package/src/bin/craft-brand.d.ts +2 -0
  9. package/src/bin/craft-brand.js +9 -0
  10. package/src/bin/craft-brand.js.map +1 -0
  11. package/src/bin/craft-graph.d.ts +2 -0
  12. package/src/bin/craft-graph.js +72 -0
  13. package/src/bin/craft-graph.js.map +1 -0
  14. package/src/bin/craft-migrate-architecture.d.ts +2 -0
  15. package/src/bin/craft-migrate-architecture.js +64 -0
  16. package/src/bin/craft-migrate-architecture.js.map +1 -0
  17. package/src/bin/craft-migrate-components.d.ts +2 -0
  18. package/src/bin/craft-migrate-components.js +67 -0
  19. package/src/bin/craft-migrate-components.js.map +1 -0
  20. package/src/bin/craft-migrate-primitives.d.ts +2 -0
  21. package/src/bin/craft-migrate-primitives.js +71 -0
  22. package/src/bin/craft-migrate-primitives.js.map +1 -0
  23. package/src/bin/craft-migrate-routes.d.ts +2 -0
  24. package/src/bin/craft-migrate-routes.js +77 -0
  25. package/src/bin/craft-migrate-routes.js.map +1 -0
  26. package/src/bin/craft-migrate-services.d.ts +2 -0
  27. package/src/bin/craft-migrate-services.js +75 -0
  28. package/src/bin/craft-migrate-services.js.map +1 -0
  29. package/src/bin/craft-migrate-template.d.ts +2 -0
  30. package/src/bin/craft-migrate-template.js +68 -0
  31. package/src/bin/craft-migrate-template.js.map +1 -0
  32. package/src/bin/craft-migrate.d.ts +2 -0
  33. package/src/bin/craft-migrate.js +91 -0
  34. package/src/bin/craft-migrate.js.map +1 -0
  35. package/src/bin/craft.d.ts +2 -0
  36. package/src/bin/craft.js +318 -0
  37. package/src/bin/craft.js.map +1 -0
  38. package/src/eslint-rules/anchor-has-href.cjs +35 -0
  39. package/src/eslint-rules/app-start-registry-match.cjs +355 -0
  40. package/src/eslint-rules/button-has-type.cjs +50 -0
  41. package/src/eslint-rules/control-has-accessible-name.cjs +56 -0
  42. package/src/eslint-rules/craft-component-name-match.cjs +8 -0
  43. package/src/eslint-rules/craft-computed-name-match.cjs +63 -0
  44. package/src/eslint-rules/craft-css-token-registry.cjs +17 -0
  45. package/src/eslint-rules/craft-css-var-naming.cjs +18 -0
  46. package/src/eslint-rules/craft-css-vars-contract.cjs +34 -0
  47. package/src/eslint-rules/craft-directive-name-match.cjs +8 -0
  48. package/src/eslint-rules/craft-method-name-match.cjs +8 -0
  49. package/src/eslint-rules/craft-name-match-utils.cjs +179 -0
  50. package/src/eslint-rules/craft-primitive-context.cjs +46 -0
  51. package/src/eslint-rules/craft-signal-source-name-match.cjs +8 -0
  52. package/src/eslint-rules/craft-source-name-match.cjs +8 -0
  53. package/src/eslint-rules/craft-styles-scope-safe.cjs +25 -0
  54. package/src/eslint-rules/css-rule-utils.cjs +109 -0
  55. package/src/eslint-rules/global-exception-registry-match.cjs +562 -0
  56. package/src/eslint-rules/heading-has-content.cjs +31 -0
  57. package/src/eslint-rules/html-helpers.cjs +115 -0
  58. package/src/eslint-rules/hyperscript-walk.cjs +249 -0
  59. package/src/eslint-rules/iframe-has-title.cjs +26 -0
  60. package/src/eslint-rules/img-has-alt.cjs +28 -0
  61. package/src/eslint-rules/index.cjs +209 -0
  62. package/src/eslint-rules/index.d.cts +5 -0
  63. package/src/eslint-rules/label-has-associated-control.cjs +67 -0
  64. package/src/eslint-rules/no-async-await.cjs +46 -0
  65. package/src/eslint-rules/no-craft-computed-side-effects.cjs +301 -0
  66. package/src/eslint-rules/no-craft-use-in-template.cjs +89 -0
  67. package/src/eslint-rules/no-craft-use.cjs +42 -0
  68. package/src/eslint-rules/no-direct-temporal-globals.cjs +73 -0
  69. package/src/eslint-rules/no-effect-in-params.cjs +265 -0
  70. package/src/eslint-rules/no-effect-outside-loaders.cjs +3 -0
  71. package/src/eslint-rules/no-ephemeral-template-form-state.cjs +131 -0
  72. package/src/eslint-rules/no-hardcoded-design-values.cjs +15 -0
  73. package/src/eslint-rules/no-heading-level-skip.cjs +101 -0
  74. package/src/eslint-rules/no-imperative-craft-resource-trigger.cjs +291 -0
  75. package/src/eslint-rules/no-important-in-component-styles.cjs +12 -0
  76. package/src/eslint-rules/no-injection-token.cjs +173 -0
  77. package/src/eslint-rules/no-invalid-insertion-pipe.cjs +162 -0
  78. package/src/eslint-rules/no-manual-route-provider-list.cjs +85 -0
  79. package/src/eslint-rules/no-noninteractive-element-interactions.cjs +66 -0
  80. package/src/eslint-rules/no-positive-tabindex.cjs +44 -0
  81. package/src/eslint-rules/no-redundant-primitive-insertion.cjs +361 -0
  82. package/src/eslint-rules/no-render-writes.cjs +106 -0
  83. package/src/eslint-rules/no-throw.cjs +132 -0
  84. package/src/eslint-rules/no-transition-actions.cjs +133 -0
  85. package/src/eslint-rules/no-type-assertions-in-template.cjs +211 -0
  86. package/src/eslint-rules/no-widened-route-provider-context.cjs +39 -0
  87. package/src/eslint-rules/prefer-browser-boundaries.cjs +92 -0
  88. package/src/eslint-rules/prefer-craft-http-transport.cjs +103 -0
  89. package/src/eslint-rules/prefer-craft-template-blocks.cjs +492 -0
  90. package/src/eslint-rules/prefer-direct-yieldable-callback.cjs +105 -0
  91. package/src/eslint-rules/prefer-named-html-helpers.cjs +33 -0
  92. package/src/eslint-rules/prefer-query-method-over-state-trigger.cjs +282 -0
  93. package/src/eslint-rules/prefer-relative-heading.cjs +43 -0
  94. package/src/eslint-rules/provide-host-name-match-component.cjs +455 -0
  95. package/src/eslint-rules/recommended-config.cjs +77 -0
  96. package/src/eslint-rules/require-assert-exhaustive-route-exceptions.cjs +259 -0
  97. package/src/eslint-rules/require-cascade-route-di-check.cjs +223 -0
  98. package/src/eslint-rules/require-child-route-mount-check.cjs +224 -0
  99. package/src/eslint-rules/require-component-monitoring.cjs +212 -0
  100. package/src/eslint-rules/require-craft-exception-handler.cjs +142 -0
  101. package/src/eslint-rules/require-craft-method-for-yieldable-callback.cjs +236 -0
  102. package/src/eslint-rules/require-craft-resource-trigger-yield.cjs +209 -0
  103. package/src/eslint-rules/require-effect-adapters.cjs +86 -0
  104. package/src/eslint-rules/require-exception-component-di-check.cjs +314 -0
  105. package/src/eslint-rules/require-focus-visible.cjs +36 -0
  106. package/src/eslint-rules/require-interactive-local-name.cjs +105 -0
  107. package/src/eslint-rules/require-lazy-load-with-retry.cjs +148 -0
  108. package/src/eslint-rules/require-outlet-heading-section.cjs +70 -0
  109. package/src/eslint-rules/require-pending-component-di-check.cjs +490 -0
  110. package/src/eslint-rules/require-primitive-context.cjs +156 -0
  111. package/src/eslint-rules/require-primitive-derived-property.cjs +598 -0
  112. package/src/eslint-rules/require-primitive-generator-unwrap.cjs +274 -0
  113. package/src/eslint-rules/require-reactive-template-bindings.cjs +305 -0
  114. package/src/eslint-rules/require-reduced-motion.cjs +38 -0
  115. package/src/eslint-rules/require-route-heading-outline.cjs +166 -0
  116. package/src/eslint-rules/require-yieldable-insertion-write.cjs +98 -0
  117. package/src/eslint-rules/require-yieldable-reactive-read.cjs +102 -0
  118. package/src/eslint-rules/require-yieldable-template-method.cjs +424 -0
  119. package/src/eslint-rules/role-has-required-aria.cjs +38 -0
  120. package/src/eslint-rules/server-function-client-match.cjs +283 -0
  121. package/src/eslint-rules/target-blank-noopener.cjs +31 -0
  122. package/src/eslint-rules/template-element-name-unique.cjs +124 -0
  123. package/src/eslint-rules/valid-aria.cjs +38 -0
  124. package/src/generators/route/compat.d.ts +3 -0
  125. package/src/generators/route/compat.js +6 -0
  126. package/src/generators/route/compat.js.map +1 -0
  127. package/src/generators/route/generator.d.ts +31 -0
  128. package/src/generators/route/generator.js +402 -0
  129. package/src/generators/route/generator.js.map +1 -0
  130. package/src/generators/route/schema.json +50 -0
  131. package/src/generators/route/split-schema.json +19 -0
  132. package/src/index.d.ts +21 -0
  133. package/src/index.js +23 -0
  134. package/src/index.js.map +1 -0
  135. package/src/scripts/angular-brand-codemod.d.ts +139 -0
  136. package/src/scripts/angular-brand-codemod.js +2318 -0
  137. package/src/scripts/angular-brand-codemod.js.map +1 -0
  138. package/src/scripts/angular-brand-codemod.ts +3985 -0
  139. package/src/scripts/architecture/migrate-architecture.d.ts +14 -0
  140. package/src/scripts/architecture/migrate-architecture.js +534 -0
  141. package/src/scripts/architecture/migrate-architecture.js.map +1 -0
  142. package/src/scripts/architecture/migrate-architecture.ts +653 -0
  143. package/src/scripts/architecture-graph.d.ts +368 -0
  144. package/src/scripts/architecture-graph.js +2191 -0
  145. package/src/scripts/architecture-graph.js.map +1 -0
  146. package/src/scripts/architecture-graph.ts +3136 -0
  147. package/src/scripts/components/migrate-components.d.ts +20 -0
  148. package/src/scripts/components/migrate-components.js +163 -0
  149. package/src/scripts/components/migrate-components.js.map +1 -0
  150. package/src/scripts/components/migrate-components.ts +227 -0
  151. package/src/scripts/components/migration-diagnostic.d.ts +7 -0
  152. package/src/scripts/components/migration-diagnostic.js +2 -0
  153. package/src/scripts/components/migration-diagnostic.js.map +1 -0
  154. package/src/scripts/components/migration-diagnostic.ts +8 -0
  155. package/src/scripts/create/create-project.d.ts +20 -0
  156. package/src/scripts/create/create-project.js +783 -0
  157. package/src/scripts/create/create-project.js.map +1 -0
  158. package/src/scripts/create/create-project.ts +849 -0
  159. package/src/scripts/data-flow-graph.d.ts +36 -0
  160. package/src/scripts/data-flow-graph.js +186 -0
  161. package/src/scripts/data-flow-graph.js.map +1 -0
  162. package/src/scripts/data-flow-graph.ts +240 -0
  163. package/src/scripts/dependency-graph.d.ts +152 -0
  164. package/src/scripts/dependency-graph.js +4456 -0
  165. package/src/scripts/dependency-graph.js.map +1 -0
  166. package/src/scripts/dependency-graph.ts +5908 -0
  167. package/src/scripts/effect-dependency-graph.d.ts +89 -0
  168. package/src/scripts/effect-dependency-graph.js +487 -0
  169. package/src/scripts/effect-dependency-graph.js.map +1 -0
  170. package/src/scripts/effect-dependency-graph.ts +630 -0
  171. package/src/scripts/migrate.d.ts +37 -0
  172. package/src/scripts/migrate.js +98 -0
  173. package/src/scripts/migrate.js.map +1 -0
  174. package/src/scripts/migrate.ts +162 -0
  175. package/src/scripts/migration-workspace.d.ts +2 -0
  176. package/src/scripts/migration-workspace.js +67 -0
  177. package/src/scripts/migration-workspace.js.map +1 -0
  178. package/src/scripts/migration-workspace.ts +93 -0
  179. package/src/scripts/primitives/migrate-named-primitives.d.ts +50 -0
  180. package/src/scripts/primitives/migrate-named-primitives.js +487 -0
  181. package/src/scripts/primitives/migrate-named-primitives.js.map +1 -0
  182. package/src/scripts/primitives/migrate-named-primitives.ts +627 -0
  183. package/src/scripts/primitives/migrate-primitive-generators.d.ts +30 -0
  184. package/src/scripts/primitives/migrate-primitive-generators.js +309 -0
  185. package/src/scripts/primitives/migrate-primitive-generators.js.map +1 -0
  186. package/src/scripts/primitives/migrate-primitive-generators.ts +410 -0
  187. package/src/scripts/primitives/migrate-primitives.d.ts +27 -0
  188. package/src/scripts/primitives/migrate-primitives.js +427 -0
  189. package/src/scripts/primitives/migrate-primitives.js.map +1 -0
  190. package/src/scripts/primitives/migrate-primitives.ts +655 -0
  191. package/src/scripts/primitives/migrate-yieldable-reactive-reads.d.ts +23 -0
  192. package/src/scripts/primitives/migrate-yieldable-reactive-reads.js +382 -0
  193. package/src/scripts/primitives/migrate-yieldable-reactive-reads.js.map +1 -0
  194. package/src/scripts/primitives/migrate-yieldable-reactive-reads.ts +499 -0
  195. package/src/scripts/primitives/migration-diagnostic.d.ts +8 -0
  196. package/src/scripts/primitives/migration-diagnostic.js +2 -0
  197. package/src/scripts/primitives/migration-diagnostic.js.map +1 -0
  198. package/src/scripts/primitives/migration-diagnostic.ts +15 -0
  199. package/src/scripts/routes/migrate-routes.d.ts +34 -0
  200. package/src/scripts/routes/migrate-routes.js +657 -0
  201. package/src/scripts/routes/migrate-routes.js.map +1 -0
  202. package/src/scripts/routes/migrate-routes.ts +895 -0
  203. package/src/scripts/routes/migration-diagnostic.d.ts +16 -0
  204. package/src/scripts/routes/migration-diagnostic.js +2 -0
  205. package/src/scripts/routes/migration-diagnostic.js.map +1 -0
  206. package/src/scripts/routes/migration-diagnostic.ts +25 -0
  207. package/src/scripts/routes/route-command.d.ts +75 -0
  208. package/src/scripts/routes/route-command.js +1169 -0
  209. package/src/scripts/routes/route-command.js.map +1 -0
  210. package/src/scripts/routes/route-command.ts +1807 -0
  211. package/src/scripts/routes/verify-routes.d.ts +60 -0
  212. package/src/scripts/routes/verify-routes.js +1121 -0
  213. package/src/scripts/routes/verify-routes.js.map +1 -0
  214. package/src/scripts/routes/verify-routes.ts +1511 -0
  215. package/src/scripts/services/config.d.ts +2 -0
  216. package/src/scripts/services/config.js +38 -0
  217. package/src/scripts/services/config.js.map +1 -0
  218. package/src/scripts/services/config.ts +60 -0
  219. package/src/scripts/services/migrate-services.d.ts +29 -0
  220. package/src/scripts/services/migrate-services.js +924 -0
  221. package/src/scripts/services/migrate-services.js.map +1 -0
  222. package/src/scripts/services/migrate-services.ts +1348 -0
  223. package/src/scripts/services/migration-diagnostic.d.ts +8 -0
  224. package/src/scripts/services/migration-diagnostic.js +2 -0
  225. package/src/scripts/services/migration-diagnostic.js.map +1 -0
  226. package/src/scripts/services/migration-diagnostic.ts +28 -0
  227. package/src/scripts/template/migrate-template.d.ts +16 -0
  228. package/src/scripts/template/migrate-template.js +349 -0
  229. package/src/scripts/template/migrate-template.js.map +1 -0
  230. package/src/scripts/template/migrate-template.ts +418 -0
  231. package/src/template-migration.d.ts +1 -0
  232. package/src/template-migration.js +2 -0
  233. package/src/template-migration.js.map +1 -0
  234. package/src/testing.d.ts +19 -0
  235. package/src/testing.js +2 -0
  236. package/src/testing.js.map +1 -0
  237. package/src/tsconfig.codemod.json +13 -0
@@ -0,0 +1,8 @@
1
+ export type ServiceMigrationDiagnosticCode = 'CONFLICTING_SCOPE' | 'UNSUPPORTED_PROVIDED_IN' | 'COMPLEX_PROVIDER' | 'RUNTIME_TOKEN_USAGE' | 'NON_CONVERTIBLE_CLASS' | 'DI_CYCLE' | 'LIFECYCLE_HOOK' | 'INJECTION_FLAGS' | 'FRAMEWORK_CONTRACT' | 'INJECT_ASYNC' | 'THIRD_PARTY_SCOPE_REQUIRED' | 'HTTP_CLIENT_REWRITE_REQUIRED' | 'MUTATION_SUBSCRIBE_REQUIRES_REWRITE' | 'EXPLICIT_SUBSCRIBE_REQUIRES_REVIEW' | 'IMPERATIVE_WORKFLOW_REQUIRES_REVIEW' | 'RESOURCE_CHAIN_REQUIRES_REWRITE' | 'DIVERGENT_ROOTS' | 'GEN_DEPS_OVERRIDE_REQUIRED' | 'COMPLEX_TEST';
2
+ export type ServiceMigrationDiagnostic = {
3
+ code: ServiceMigrationDiagnosticCode;
4
+ filePath: string;
5
+ symbol?: string;
6
+ message: string;
7
+ manual: true;
8
+ };
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=migration-diagnostic.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migration-diagnostic.js","sourceRoot":"","sources":["../../../../../../libs/dev-tools/src/scripts/services/migration-diagnostic.ts"],"names":[],"mappings":""}
@@ -0,0 +1,28 @@
1
+ export type ServiceMigrationDiagnosticCode =
2
+ | 'CONFLICTING_SCOPE'
3
+ | 'UNSUPPORTED_PROVIDED_IN'
4
+ | 'COMPLEX_PROVIDER'
5
+ | 'RUNTIME_TOKEN_USAGE'
6
+ | 'NON_CONVERTIBLE_CLASS'
7
+ | 'DI_CYCLE'
8
+ | 'LIFECYCLE_HOOK'
9
+ | 'INJECTION_FLAGS'
10
+ | 'FRAMEWORK_CONTRACT'
11
+ | 'INJECT_ASYNC'
12
+ | 'THIRD_PARTY_SCOPE_REQUIRED'
13
+ | 'HTTP_CLIENT_REWRITE_REQUIRED'
14
+ | 'MUTATION_SUBSCRIBE_REQUIRES_REWRITE'
15
+ | 'EXPLICIT_SUBSCRIBE_REQUIRES_REVIEW'
16
+ | 'IMPERATIVE_WORKFLOW_REQUIRES_REVIEW'
17
+ | 'RESOURCE_CHAIN_REQUIRES_REWRITE'
18
+ | 'DIVERGENT_ROOTS'
19
+ | 'GEN_DEPS_OVERRIDE_REQUIRED'
20
+ | 'COMPLEX_TEST';
21
+
22
+ export type ServiceMigrationDiagnostic = {
23
+ code: ServiceMigrationDiagnosticCode;
24
+ filePath: string;
25
+ symbol?: string;
26
+ message: string;
27
+ manual: true;
28
+ };
@@ -0,0 +1,16 @@
1
+ export type TemplateMigrationDiagnostic = {
2
+ readonly code: 'UNSUPPORTED_ANGULAR_SYNTAX' | 'MALFORMED_TEMPLATE';
3
+ readonly message: string;
4
+ readonly offset?: number;
5
+ };
6
+ export type TemplateMigrationOptions = {
7
+ readonly componentName?: string;
8
+ readonly includeImport?: boolean;
9
+ };
10
+ export type TemplateMigrationResult = {
11
+ readonly code: string;
12
+ readonly imports: readonly string[];
13
+ readonly diagnostics: readonly TemplateMigrationDiagnostic[];
14
+ };
15
+ /** Converts an HTML/Web Component snippet into a Craft template expression. */
16
+ export declare function migrateTemplateToCraft(source: string, options?: TemplateMigrationOptions): TemplateMigrationResult;
@@ -0,0 +1,349 @@
1
+ const nativeHelpers = new Set([
2
+ 'a',
3
+ 'article',
4
+ 'aside',
5
+ 'button',
6
+ 'div',
7
+ 'footer',
8
+ 'form',
9
+ 'h1',
10
+ 'h2',
11
+ 'h3',
12
+ 'h4',
13
+ 'h5',
14
+ 'h6',
15
+ 'header',
16
+ 'iframe',
17
+ 'img',
18
+ 'input',
19
+ 'label',
20
+ 'legend',
21
+ 'li',
22
+ 'main',
23
+ 'nav',
24
+ 'ol',
25
+ 'option',
26
+ 'p',
27
+ 'section',
28
+ 'select',
29
+ 'small',
30
+ 'span',
31
+ 'strong',
32
+ 'svg',
33
+ 'table',
34
+ 'tbody',
35
+ 'td',
36
+ 'textarea',
37
+ 'th',
38
+ 'thead',
39
+ 'tr',
40
+ 'ul',
41
+ 'dialog',
42
+ 'fieldset',
43
+ 'figure',
44
+ 'figcaption',
45
+ 'caption',
46
+ 'area',
47
+ ]);
48
+ const voidTags = new Set([
49
+ 'area',
50
+ 'base',
51
+ 'br',
52
+ 'col',
53
+ 'embed',
54
+ 'hr',
55
+ 'img',
56
+ 'input',
57
+ 'link',
58
+ 'meta',
59
+ 'param',
60
+ 'source',
61
+ 'track',
62
+ 'wbr',
63
+ ]);
64
+ /** Converts an HTML/Web Component snippet into a Craft template expression. */
65
+ export function migrateTemplateToCraft(source, options = {}) {
66
+ const diagnostics = [];
67
+ const roots = new HtmlSnippetParser(source, diagnostics).parse();
68
+ const imports = new Set();
69
+ const expression = renderNodes(roots, imports, diagnostics, 0);
70
+ const componentName = options.componentName?.trim();
71
+ const body = componentName
72
+ ? renderComponent(componentName, expression, imports)
73
+ : `({}) => ${expression}`;
74
+ const importLine = options.includeImport !== false && imports.size > 0
75
+ ? `import { ${[...imports].sort().join(', ')} } from '@craft-ts/component';\n\n`
76
+ : '';
77
+ return {
78
+ code: `${importLine}${body}\n`,
79
+ imports: [...imports].sort(),
80
+ diagnostics,
81
+ };
82
+ }
83
+ function renderComponent(name, expression, imports) {
84
+ imports.add('craftComponent');
85
+ const identifier = safeIdentifier(name, 'PastedTemplate');
86
+ return `export const ${identifier} = craftComponent(\n '${escapeSingleQuoted(name)}',\n {},\n () => ({}),\n () => ${expression},\n);`;
87
+ }
88
+ function renderNodes(nodes, imports, diagnostics, level) {
89
+ const meaningful = nodes.filter((node) => node.kind !== 'text' || node.value.trim().length > 0);
90
+ if (meaningful.length === 0)
91
+ return '[]';
92
+ if (meaningful.length === 1) {
93
+ return renderNode(meaningful[0], imports, diagnostics, level);
94
+ }
95
+ const indent = ' '.repeat(level);
96
+ const childIndent = ' '.repeat(level + 1);
97
+ return `[\n${meaningful
98
+ .map((node) => `${childIndent}${renderNode(node, imports, diagnostics, level + 1)},`)
99
+ .join('\n')}\n${indent}]`;
100
+ }
101
+ function renderNode(node, imports, diagnostics, level) {
102
+ if (node.kind === 'text')
103
+ return renderText(node.value);
104
+ const tag = node.tag.toLowerCase();
105
+ const helper = nativeHelpers.has(tag) ? tag : 'customElement';
106
+ imports.add(helper);
107
+ const props = renderAttributes(node.attributes, diagnostics);
108
+ const children = renderNodes(node.children, imports, diagnostics, level + 1);
109
+ const hasChildren = node.children.some((child) => child.kind !== 'text' || child.value.trim().length > 0);
110
+ if (helper === 'customElement') {
111
+ const tagArgument = `'${escapeSingleQuoted(tag)}'`;
112
+ return hasChildren
113
+ ? `customElement(${tagArgument}${props ? `, ${props}` : ', {}'}, ${children})`
114
+ : `customElement(${tagArgument}${props ? `, ${props}` : ''})`;
115
+ }
116
+ return hasChildren
117
+ ? `${helper}(${props ? `${props}, ` : ''}${children})`
118
+ : `${helper}(${props || ''})`;
119
+ }
120
+ function renderAttributes(attributes, diagnostics) {
121
+ if (attributes.length === 0)
122
+ return '';
123
+ const entries = [];
124
+ for (const attribute of attributes) {
125
+ const name = attribute.name;
126
+ if (name.startsWith('*') || name.startsWith('@')) {
127
+ diagnostics.push({
128
+ code: 'UNSUPPORTED_ANGULAR_SYNTAX',
129
+ message: `Structural Angular syntax '${name}' needs a manual ifBlock/each conversion.`,
130
+ });
131
+ continue;
132
+ }
133
+ const bracketed = /^\[([^\]]+)\]$/.exec(name);
134
+ const event = /^\(([^)]+)\)$/.exec(name);
135
+ const key = bracketed?.[1] ?? event?.[1] ?? name;
136
+ const outputKey = quoteObjectKey(key);
137
+ if (event) {
138
+ const expression = attribute.value === true ? 'undefined' : String(attribute.value);
139
+ entries.push(`${outputKey}: (event) => ${expression}`);
140
+ }
141
+ else if (bracketed) {
142
+ const expression = attribute.value === true ? 'undefined' : String(attribute.value);
143
+ entries.push(`${outputKey}: () => ${expression}`);
144
+ }
145
+ else if (attribute.value === true) {
146
+ entries.push(`${outputKey}: true`);
147
+ }
148
+ else {
149
+ const value = String(attribute.value);
150
+ entries.push(`${outputKey}: ${interpolationExpression(value) ?? quote(value)}`);
151
+ }
152
+ }
153
+ return entries.length > 0 ? `{ ${entries.join(', ')} }` : '';
154
+ }
155
+ function renderText(value) {
156
+ const decoded = decodeEntities(value);
157
+ return interpolationExpression(decoded) ?? quote(decoded);
158
+ }
159
+ function interpolationExpression(value) {
160
+ const matches = [...value.matchAll(/{{\s*([\s\S]*?)\s*}}/g)];
161
+ if (matches.length === 0)
162
+ return undefined;
163
+ if (matches.length === 1 && matches[0][0] === value) {
164
+ return `() => ${matches[0][1].trim()}`;
165
+ }
166
+ let template = value.replace(/`/g, '\\`');
167
+ for (const match of matches) {
168
+ template = template.replace(match[0], `\${${match[1].trim()}}`);
169
+ }
170
+ return `() => \`${template}\``;
171
+ }
172
+ function quote(value) {
173
+ return `'${escapeSingleQuoted(value)}'`;
174
+ }
175
+ function quoteObjectKey(value) {
176
+ return /^[A-Za-z_$][\w$]*$/.test(value) ? value : quote(value);
177
+ }
178
+ function safeIdentifier(value, fallback) {
179
+ const words = value
180
+ .replace(/[^A-Za-z0-9_$]/g, ' ')
181
+ .trim()
182
+ .split(/\s+/)
183
+ .filter(Boolean);
184
+ const result = words
185
+ .map((word, index) => index === 0 ? word : `${word[0]?.toUpperCase() ?? ''}${word.slice(1)}`)
186
+ .join('');
187
+ return /^[A-Za-z_$]/.test(result) ? result : fallback;
188
+ }
189
+ function escapeSingleQuoted(value) {
190
+ return value
191
+ .replace(/\\/g, '\\\\')
192
+ .replace(/'/g, "\\'")
193
+ .replace(/\r?\n/g, '\\n');
194
+ }
195
+ function decodeEntities(value) {
196
+ return value
197
+ .replace(/&/gi, '&')
198
+ .replace(/&lt;/gi, '<')
199
+ .replace(/&gt;/gi, '>')
200
+ .replace(/&quot;/gi, '"')
201
+ .replace(/&#39;/gi, "'");
202
+ }
203
+ class HtmlSnippetParser {
204
+ source;
205
+ diagnostics;
206
+ index = 0;
207
+ constructor(source, diagnostics) {
208
+ this.source = source;
209
+ this.diagnostics = diagnostics;
210
+ }
211
+ parse() {
212
+ return this.parseNodes();
213
+ }
214
+ parseNodes(stopTag) {
215
+ const nodes = [];
216
+ let textStart = this.index;
217
+ while (this.index < this.source.length) {
218
+ if (this.source.startsWith('<!--', this.index)) {
219
+ this.flushText(nodes, textStart);
220
+ const end = this.source.indexOf('-->', this.index + 4);
221
+ this.index = end < 0 ? this.source.length : end + 3;
222
+ textStart = this.index;
223
+ continue;
224
+ }
225
+ if (this.source[this.index] !== '<') {
226
+ this.index += 1;
227
+ continue;
228
+ }
229
+ const closing = /^<\/\s*([\w:-]+)[^>]*>/.exec(this.source.slice(this.index));
230
+ if (closing) {
231
+ this.flushText(nodes, textStart);
232
+ this.index += closing[0].length;
233
+ if (stopTag && closing[1].toLowerCase() !== stopTag) {
234
+ this.diagnostics.push({
235
+ code: 'MALFORMED_TEMPLATE',
236
+ message: `Unexpected closing tag </${closing[1]}>.`,
237
+ offset: this.index - closing[0].length,
238
+ });
239
+ }
240
+ return nodes;
241
+ }
242
+ this.flushText(nodes, textStart);
243
+ const opening = this.readOpeningTag();
244
+ if (!opening) {
245
+ this.index += 1;
246
+ continue;
247
+ }
248
+ const children = opening.selfClosing || voidTags.has(opening.tag)
249
+ ? []
250
+ : this.parseNodes(opening.tag);
251
+ nodes.push({
252
+ kind: 'element',
253
+ tag: opening.tag,
254
+ attributes: opening.attributes,
255
+ children,
256
+ });
257
+ textStart = this.index;
258
+ }
259
+ this.flushText(nodes, textStart);
260
+ if (stopTag) {
261
+ this.diagnostics.push({
262
+ code: 'MALFORMED_TEMPLATE',
263
+ message: `Missing closing tag </${stopTag}>.`,
264
+ });
265
+ }
266
+ return nodes;
267
+ }
268
+ flushText(nodes, start) {
269
+ if (this.index > start)
270
+ nodes.push({ kind: 'text', value: this.source.slice(start, this.index) });
271
+ }
272
+ readOpeningTag() {
273
+ const start = this.index;
274
+ if (!/^<[A-Za-z][\w:-]*/.test(this.source.slice(start)))
275
+ return undefined;
276
+ let cursor = start + 1;
277
+ while (/[\w:-]/.test(this.source[cursor] ?? ''))
278
+ cursor += 1;
279
+ const tag = this.source.slice(start + 1, cursor).toLowerCase();
280
+ const end = findTagEnd(this.source, cursor);
281
+ if (end < 0) {
282
+ this.diagnostics.push({
283
+ code: 'MALFORMED_TEMPLATE',
284
+ message: `Missing closing '>' for <${tag}>.`,
285
+ offset: start,
286
+ });
287
+ this.index = this.source.length;
288
+ return undefined;
289
+ }
290
+ const rawAttributes = this.source.slice(cursor, end);
291
+ this.index = end + 1;
292
+ return {
293
+ tag,
294
+ attributes: parseAttributes(rawAttributes),
295
+ selfClosing: /\/\s*$/.test(rawAttributes),
296
+ };
297
+ }
298
+ }
299
+ function findTagEnd(source, start) {
300
+ let quoteCharacter = '';
301
+ for (let index = start; index < source.length; index += 1) {
302
+ const character = source[index];
303
+ if (quoteCharacter) {
304
+ if (character === quoteCharacter)
305
+ quoteCharacter = '';
306
+ }
307
+ else if (character === '"' || character === "'")
308
+ quoteCharacter = character;
309
+ else if (character === '>')
310
+ return index;
311
+ }
312
+ return -1;
313
+ }
314
+ function parseAttributes(source) {
315
+ const attributes = [];
316
+ let index = 0;
317
+ while (index < source.length) {
318
+ while (/\s/.test(source[index] ?? '') || source[index] === '/')
319
+ index += 1;
320
+ if (index >= source.length)
321
+ break;
322
+ const nameStart = index;
323
+ while (!/[\s=/>]/.test(source[index] ?? ''))
324
+ index += 1;
325
+ const name = source.slice(nameStart, index);
326
+ while (/\s/.test(source[index] ?? ''))
327
+ index += 1;
328
+ if (source[index] !== '=') {
329
+ attributes.push({ name, value: true });
330
+ continue;
331
+ }
332
+ index += 1;
333
+ while (/\s/.test(source[index] ?? ''))
334
+ index += 1;
335
+ const quoteCharacter = source[index] === '"' || source[index] === "'" ? source[index++] : '';
336
+ const valueStart = index;
337
+ if (quoteCharacter)
338
+ while (index < source.length && source[index] !== quoteCharacter)
339
+ index += 1;
340
+ else
341
+ while (!/[\s>]/.test(source[index] ?? ''))
342
+ index += 1;
343
+ attributes.push({ name, value: source.slice(valueStart, index) });
344
+ if (quoteCharacter && source[index] === quoteCharacter)
345
+ index += 1;
346
+ }
347
+ return attributes;
348
+ }
349
+ //# sourceMappingURL=migrate-template.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate-template.js","sourceRoot":"","sources":["../../../../../../libs/dev-tools/src/scripts/template/migrate-template.ts"],"names":[],"mappings":"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"}