@analogjs/vite-plugin-angular 2.0.0-alpha.2 → 2.0.0-alpha.20

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 (69) hide show
  1. package/README.md +2 -0
  2. package/package.json +8 -4
  3. package/src/index.d.ts +0 -2
  4. package/src/index.js +0 -2
  5. package/src/index.js.map +1 -1
  6. package/src/lib/angular-pending-tasks.plugin.js +3 -2
  7. package/src/lib/angular-pending-tasks.plugin.js.map +1 -1
  8. package/src/lib/angular-storybook-plugin.d.ts +2 -2
  9. package/src/lib/angular-storybook-plugin.js +11 -4
  10. package/src/lib/angular-storybook-plugin.js.map +1 -1
  11. package/src/lib/angular-vite-plugin.d.ts +17 -22
  12. package/src/lib/angular-vite-plugin.js +378 -210
  13. package/src/lib/angular-vite-plugin.js.map +1 -1
  14. package/src/lib/angular-vitest-plugin.js +1 -6
  15. package/src/lib/angular-vitest-plugin.js.map +1 -1
  16. package/src/lib/component-resolvers.js +1 -1
  17. package/src/lib/component-resolvers.js.map +1 -1
  18. package/src/lib/host.d.ts +4 -7
  19. package/src/lib/host.js +47 -80
  20. package/src/lib/host.js.map +1 -1
  21. package/src/lib/live-reload-plugin.d.ts +6 -0
  22. package/src/lib/live-reload-plugin.js +63 -0
  23. package/src/lib/live-reload-plugin.js.map +1 -0
  24. package/src/lib/models.d.ts +11 -0
  25. package/src/lib/models.js +2 -0
  26. package/src/lib/models.js.map +1 -0
  27. package/src/lib/nx-folder-plugin.d.ts +7 -0
  28. package/src/lib/nx-folder-plugin.js +18 -0
  29. package/src/lib/nx-folder-plugin.js.map +1 -0
  30. package/src/lib/tools/README.md +3 -0
  31. package/src/lib/tools/builders.json +15 -0
  32. package/src/lib/tools/package.json +7 -0
  33. package/src/lib/tools/src/builders/vite/schema.d.ts +6 -0
  34. package/src/lib/tools/src/builders/vite/schema.json +39 -0
  35. package/src/lib/tools/src/builders/vite/vite-build.impl.d.ts +2 -0
  36. package/src/lib/tools/src/builders/vite/vite-build.impl.js +40 -0
  37. package/src/lib/tools/src/builders/vite/vite-build.impl.js.map +1 -0
  38. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.d.ts +2 -0
  39. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js +64 -0
  40. package/src/lib/tools/src/builders/vite-dev-server/dev-server.impl.js.map +1 -0
  41. package/src/lib/tools/src/builders/vite-dev-server/schema.d.ts +5 -0
  42. package/src/lib/tools/src/builders/vite-dev-server/schema.json +25 -0
  43. package/src/lib/tools/src/index.d.ts +0 -0
  44. package/src/lib/tools/src/index.js +1 -0
  45. package/src/lib/tools/src/index.js.map +1 -0
  46. package/src/lib/utils/devkit.js +3 -11
  47. package/src/lib/utils/devkit.js.map +1 -1
  48. package/src/lib/utils/hmr-candidates.d.ts +32 -0
  49. package/src/lib/utils/hmr-candidates.js +272 -0
  50. package/src/lib/utils/hmr-candidates.js.map +1 -0
  51. package/src/lib/utils/source-file-cache.d.ts +2 -2
  52. package/esbuild.d.ts +0 -3
  53. package/esbuild.js +0 -31
  54. package/esbuild.js.map +0 -1
  55. package/src/lib/authoring/analog.d.ts +0 -1
  56. package/src/lib/authoring/analog.js +0 -550
  57. package/src/lib/authoring/analog.js.map +0 -1
  58. package/src/lib/authoring/constants.d.ts +0 -26
  59. package/src/lib/authoring/constants.js +0 -47
  60. package/src/lib/authoring/constants.js.map +0 -1
  61. package/src/lib/authoring/frontmatter.d.ts +0 -2
  62. package/src/lib/authoring/frontmatter.js +0 -26
  63. package/src/lib/authoring/frontmatter.js.map +0 -1
  64. package/src/lib/authoring/markdown-transform.d.ts +0 -4
  65. package/src/lib/authoring/markdown-transform.js +0 -14
  66. package/src/lib/authoring/markdown-transform.js.map +0 -1
  67. package/src/lib/authoring/marked-setup.service.d.ts +0 -23
  68. package/src/lib/authoring/marked-setup.service.js +0 -119
  69. package/src/lib/authoring/marked-setup.service.js.map +0 -1
@@ -1,26 +0,0 @@
1
- export async function getFrontmatterMetadata(content, id, transforms) {
2
- const fm = await import('front-matter');
3
- // The `default` property will be available in CommonJS environment, for instance,
4
- // when running unit tests. It's safe to retrieve `default` first, since we still
5
- // fallback to the original implementation.
6
- const frontmatterFn = fm.default || fm;
7
- let vfile = {};
8
- for (const transform of transforms) {
9
- const result = await transform(content, id);
10
- vfile = typeof result === 'object' ? result : vfile;
11
- }
12
- const safeVFile = {
13
- path: vfile.path,
14
- data: vfile.data,
15
- messages: vfile.messages,
16
- history: vfile.history,
17
- cwd: vfile.cwd,
18
- };
19
- const { attributes } = frontmatterFn(content);
20
- const combinedMetadata = {
21
- ...attributes,
22
- vfile: safeVFile,
23
- };
24
- return `\n\nexport const metadata = ${JSON.stringify(combinedMetadata)}`;
25
- }
26
- //# sourceMappingURL=frontmatter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"frontmatter.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-angular/src/lib/authoring/frontmatter.ts"],"names":[],"mappings":"AAGA,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,OAAe,EACf,EAAU,EACV,UAAuC;IAEvC,MAAM,EAAE,GAAQ,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC7C,kFAAkF;IAClF,iFAAiF;IACjF,2CAA2C;IAC3C,MAAM,aAAa,GACjB,EAAE,CAAC,OAAO,IAAI,EAAE,CAAC;IAEnB,IAAI,KAAK,GAAmB,EAAE,CAAC;IAC/B,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;QACnC,MAAM,MAAM,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC5C,KAAK,GAAG,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;IACtD,CAAC;IAED,MAAM,SAAS,GAAG;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,IAAI,EAAE,KAAK,CAAC,IAAI;QAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,GAAG,EAAE,KAAK,CAAC,GAAG;KACf,CAAC;IAEF,MAAM,EAAE,UAAU,EAAE,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;IAE9C,MAAM,gBAAgB,GAAG;QACvB,GAAG,UAAU;QACb,KAAK,EAAE,SAAS;KACjB,CAAC;IAEF,OAAO,+BAA+B,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,EAAE,CAAC;AAC3E,CAAC"}
@@ -1,4 +0,0 @@
1
- import { type VFile } from 'vfile';
2
- export type MarkdownTemplateTransform = (content: string, fileName: string) => string | Promise<string> | Promise<VFile>;
3
- export declare const defaultMarkdownTemplateTransform: MarkdownTemplateTransform;
4
- export declare const defaultMarkdownTemplateTransforms: MarkdownTemplateTransform[];
@@ -1,14 +0,0 @@
1
- import { FRONTMATTER_REGEX } from './constants.js';
2
- export const defaultMarkdownTemplateTransform = async (content) => {
3
- const { MarkedSetupService } = await import('./marked-setup.service.js');
4
- // read template sections, parse markdown
5
- const markedSetupService = new MarkedSetupService();
6
- const mdContent = markedSetupService
7
- .getMarkedInstance()
8
- .parse(content.replace(FRONTMATTER_REGEX, ''));
9
- return mdContent;
10
- };
11
- export const defaultMarkdownTemplateTransforms = [
12
- defaultMarkdownTemplateTransform,
13
- ];
14
- //# sourceMappingURL=markdown-transform.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-transform.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-angular/src/lib/authoring/markdown-transform.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAQnD,MAAM,CAAC,MAAM,gCAAgC,GAC3C,KAAK,EAAE,OAAe,EAAE,EAAE;IACxB,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,2BAA2B,CAAC,CAAC;IAEzE,yCAAyC;IACzC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;IACpD,MAAM,SAAS,GAAG,kBAAkB;SACjC,iBAAiB,EAAE;SACnB,KAAK,CACJ,OAAO,CAAC,OAAO,CAAC,iBAAiB,EAAE,EAAE,CAAC,CACT,CAAC;IAElC,OAAO,SAAS,CAAC;AACnB,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,iCAAiC,GAAgC;IAC5E,gCAAgC;CACjC,CAAC"}
@@ -1,23 +0,0 @@
1
- /**
2
- * Credit goes to Scully for original implementation
3
- * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts
4
- */
5
- import { marked } from 'marked';
6
- import 'prismjs';
7
- import 'prismjs/components/prism-bash.js';
8
- import 'prismjs/components/prism-css.js';
9
- import 'prismjs/components/prism-javascript.js';
10
- import 'prismjs/components/prism-json.js';
11
- import 'prismjs/components/prism-markup.js';
12
- import 'prismjs/components/prism-typescript.js';
13
- import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js';
14
- import 'prismjs/plugins/toolbar/prism-toolbar.js';
15
- export declare class MarkedSetupService {
16
- private readonly marked;
17
- constructor();
18
- escapeBreakingCharacters(code: string): string;
19
- detectAngularComponent(text: string): boolean;
20
- detectAngularControlFlow(text: string): boolean;
21
- decodeHtmlEntities(text: string): string;
22
- getMarkedInstance(): typeof marked;
23
- }
@@ -1,119 +0,0 @@
1
- /**
2
- * Credit goes to Scully for original implementation
3
- * https://github.com/scullyio/scully/blob/main/libs/scully/src/lib/fileHanderPlugins/markdown.ts
4
- */
5
- import { marked } from 'marked';
6
- import { gfmHeadingId } from 'marked-gfm-heading-id';
7
- import { markedHighlight } from 'marked-highlight';
8
- import 'prismjs';
9
- import 'prismjs/components/prism-bash.js';
10
- import 'prismjs/components/prism-css.js';
11
- import 'prismjs/components/prism-javascript.js';
12
- import 'prismjs/components/prism-json.js';
13
- import 'prismjs/components/prism-markup.js';
14
- import 'prismjs/components/prism-typescript.js';
15
- import 'prismjs/plugins/copy-to-clipboard/prism-copy-to-clipboard.js';
16
- import 'prismjs/plugins/toolbar/prism-toolbar.js';
17
- export class MarkedSetupService {
18
- marked;
19
- constructor() {
20
- const renderer = new marked.Renderer();
21
- renderer.codespan = (code) => {
22
- code = this.escapeBreakingCharacters(code);
23
- return `<code>${code}</code>`;
24
- };
25
- renderer.paragraph = (text) => {
26
- if (this.detectAngularComponent(text) ||
27
- this.detectAngularControlFlow(text)) {
28
- return this.decodeHtmlEntities(text.trim());
29
- }
30
- return `<p>${text}</p>`;
31
- };
32
- renderer.code = (code, lang) => {
33
- code = this.escapeBreakingCharacters(code);
34
- // Let's do a language based detection like on GitHub
35
- // So we can still have non-interpreted mermaid code
36
- if (lang === 'mermaid') {
37
- return '<pre class="mermaid">' + code + '</pre>';
38
- }
39
- if (!lang) {
40
- return '<pre><code>' + code + '</code></pre>';
41
- }
42
- const classes = lang.startsWith('diff') && Prism.languages['diff']
43
- ? `language-${lang} diff-highlight`
44
- : `language-${lang.replace('diff-', '')}`;
45
- return `<pre class="${classes}"><code class="${classes}">${code}</code></pre>`;
46
- };
47
- marked.use(gfmHeadingId(), markedHighlight({
48
- async: true,
49
- highlight: (code, lang) => {
50
- let diff = lang?.startsWith('diff-');
51
- lang = diff ? lang.replace('diff-', '') : lang || 'typescript';
52
- if (diff && !Prism.languages['diff']) {
53
- diff = false;
54
- console.warn(`Notice:
55
- ---------------------------------------------------------------------------------------
56
- The \`diff\` language and plugin are not available in the provided setup.
57
- To enable it, add the following imports your \`main.ts\`:
58
- import 'prismjs/components/prism-diff';
59
- import 'prismjs/plugins/diff-highlight/prism-diff-highlight';
60
- ---------------------------------------------------------------------------------------
61
- `);
62
- }
63
- if (!Prism.languages[lang]) {
64
- if (lang !== 'mermaid') {
65
- console.warn(`Notice:
66
- ---------------------------------------------------------------------------------------
67
- The requested language '${lang}' is not available in the provided setup.
68
- To enable it, add the following import your \`main.ts\`:
69
- import 'prismjs/components/prism-${lang}';
70
- ---------------------------------------------------------------------------------------
71
- `);
72
- }
73
- return code;
74
- }
75
- return Prism.highlight(code, diff ? Prism.languages['diff'] : Prism.languages[lang], lang);
76
- },
77
- }), {
78
- async: false,
79
- renderer,
80
- pedantic: false,
81
- gfm: true,
82
- breaks: false,
83
- mangle: false,
84
- });
85
- this.marked = marked;
86
- }
87
- escapeBreakingCharacters(code) {
88
- // Escape commonly used HTML characters
89
- // in Angular templates that cause template parse errors
90
- // such as @, {, and ,}.
91
- code = code.replace(/@/g, '&#64;');
92
- if (code.includes('>{<') || code.includes('>}<')) {
93
- code = code.replace(/>\{</g, '>&#x2774;<').replace(/>\}</g, '>&#x2775;<');
94
- }
95
- return code;
96
- }
97
- detectAngularComponent(text) {
98
- return text.trim().startsWith('&lt;') && text.trim().endsWith('/&gt;');
99
- }
100
- detectAngularControlFlow(text) {
101
- return ((text.trim().startsWith('@if') ||
102
- text.trim().startsWith('@for') ||
103
- text.trim().startsWith('@switch') ||
104
- text.trim().startsWith('@defer')) &&
105
- text.trim().endsWith('}'));
106
- }
107
- decodeHtmlEntities(text) {
108
- return text
109
- .replace(/&lt;/g, '<')
110
- .replace(/&gt;/g, '>')
111
- .replace(/&quot;/g, '"')
112
- .replace(/&#39;/g, "'")
113
- .replace(/&amp;/g, '&');
114
- }
115
- getMarkedInstance() {
116
- return this.marked;
117
- }
118
- }
119
- //# sourceMappingURL=marked-setup.service.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"marked-setup.service.js","sourceRoot":"","sources":["../../../../../../packages/vite-plugin-angular/src/lib/authoring/marked-setup.service.ts"],"names":[],"mappings":"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"}