wu-framework 2.1.0 → 2.1.2

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 (63) hide show
  1. package/LICENSE +39 -39
  2. package/README.md +570 -570
  3. package/dist/adapters/angular/index.d.ts +154 -154
  4. package/dist/adapters/angular/index.js.map +1 -1
  5. package/dist/adapters/angular.d.ts +3 -3
  6. package/dist/adapters/index.js.map +1 -1
  7. package/dist/adapters/lit/index.d.ts +120 -120
  8. package/dist/adapters/lit/index.js.map +1 -1
  9. package/dist/adapters/lit.d.ts +3 -3
  10. package/dist/adapters/preact/index.d.ts +108 -108
  11. package/dist/adapters/preact/index.js.map +1 -1
  12. package/dist/adapters/preact.d.ts +3 -3
  13. package/dist/adapters/qwik/index.js +1 -1
  14. package/dist/adapters/qwik/index.js.map +1 -1
  15. package/dist/adapters/react/index.d.ts +246 -246
  16. package/dist/adapters/react/index.js.map +1 -1
  17. package/dist/adapters/react.d.ts +3 -3
  18. package/dist/adapters/shared.js.map +1 -1
  19. package/dist/adapters/solid/index.d.ts +101 -101
  20. package/dist/adapters/solid/index.js.map +1 -1
  21. package/dist/adapters/solid.d.ts +3 -3
  22. package/dist/adapters/svelte/index.d.ts +166 -166
  23. package/dist/adapters/svelte/index.js.map +1 -1
  24. package/dist/adapters/svelte.d.ts +3 -3
  25. package/dist/adapters/vanilla/index.d.ts +179 -179
  26. package/dist/adapters/vanilla/index.js.map +1 -1
  27. package/dist/adapters/vanilla.d.ts +3 -3
  28. package/dist/adapters/vue/index.d.ts +299 -299
  29. package/dist/adapters/vue/index.js.map +1 -1
  30. package/dist/adapters/vue.d.ts +3 -3
  31. package/dist/ai/wu-ai.js.map +1 -1
  32. package/dist/core/wu-html-parser.js +2 -0
  33. package/dist/core/wu-html-parser.js.map +1 -0
  34. package/dist/core/wu-iframe-sandbox.js +2 -0
  35. package/dist/core/wu-iframe-sandbox.js.map +1 -0
  36. package/dist/core/wu-loader.js +2 -0
  37. package/dist/core/wu-loader.js.map +1 -0
  38. package/dist/core/wu-mcp-bridge.js.map +1 -1
  39. package/dist/core/wu-script-executor.js +2 -0
  40. package/dist/core/wu-script-executor.js.map +1 -0
  41. package/dist/wu-ai-browser-primitives-BDKXJlwc.js.map +1 -1
  42. package/dist/wu-framework.cjs.js +2 -2
  43. package/dist/wu-framework.cjs.js.map +1 -1
  44. package/dist/wu-framework.dev.js +8697 -9142
  45. package/dist/wu-framework.dev.js.map +1 -1
  46. package/dist/wu-framework.esm.js +2 -2
  47. package/dist/wu-framework.esm.js.map +1 -1
  48. package/dist/wu-framework.umd.js +2 -2
  49. package/dist/wu-framework.umd.js.map +1 -1
  50. package/dist/wu-logger-fJfUHBGA.js.map +1 -1
  51. package/integrations/astro/README.md +127 -127
  52. package/integrations/astro/WuApp.astro +63 -63
  53. package/integrations/astro/WuShell.astro +39 -39
  54. package/integrations/astro/index.js +68 -68
  55. package/integrations/astro/package.json +38 -38
  56. package/integrations/astro/types.d.ts +53 -53
  57. package/package.json +218 -218
  58. package/dist/wu-html-parser.js +0 -2
  59. package/dist/wu-html-parser.js.map +0 -1
  60. package/dist/wu-iframe-sandbox.js +0 -2
  61. package/dist/wu-iframe-sandbox.js.map +0 -1
  62. package/dist/wu-script-executor.js +0 -2
  63. package/dist/wu-script-executor.js.map +0 -1
@@ -1,38 +1,38 @@
1
- {
2
- "name": "@wu-framework/astro",
3
- "version": "1.0.0",
4
- "description": "Astro integration for wu-framework microfrontends",
5
- "type": "module",
6
- "main": "index.js",
7
- "exports": {
8
- ".": "./index.js",
9
- "./WuApp.astro": "./WuApp.astro",
10
- "./WuShell.astro": "./WuShell.astro"
11
- },
12
- "files": [
13
- "index.js",
14
- "WuApp.astro",
15
- "WuShell.astro",
16
- "types.d.ts",
17
- "README.md"
18
- ],
19
- "keywords": [
20
- "astro",
21
- "astro-integration",
22
- "wu-framework",
23
- "microfrontends",
24
- "micro-frontends"
25
- ],
26
- "author": "Wu Framework Team",
27
- "license": "MIT",
28
- "peerDependencies": {
29
- "astro": ">=4.0.0",
30
- "wu-framework": ">=1.1.0"
31
- },
32
- "repository": {
33
- "type": "git",
34
- "url": "https://github.com/wu-framework/wu-framework.git",
35
- "directory": "integrations/astro"
36
- },
37
- "homepage": "https://wu-framework.dev/docs/integrations/astro"
38
- }
1
+ {
2
+ "name": "@wu-framework/astro",
3
+ "version": "1.0.0",
4
+ "description": "Astro integration for wu-framework microfrontends",
5
+ "type": "module",
6
+ "main": "index.js",
7
+ "exports": {
8
+ ".": "./index.js",
9
+ "./WuApp.astro": "./WuApp.astro",
10
+ "./WuShell.astro": "./WuShell.astro"
11
+ },
12
+ "files": [
13
+ "index.js",
14
+ "WuApp.astro",
15
+ "WuShell.astro",
16
+ "types.d.ts",
17
+ "README.md"
18
+ ],
19
+ "keywords": [
20
+ "astro",
21
+ "astro-integration",
22
+ "wu-framework",
23
+ "microfrontends",
24
+ "micro-frontends"
25
+ ],
26
+ "author": "Wu Framework Team",
27
+ "license": "MIT",
28
+ "peerDependencies": {
29
+ "astro": ">=4.0.0",
30
+ "wu-framework": ">=1.1.0"
31
+ },
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "https://github.com/wu-framework/wu-framework.git",
35
+ "directory": "integrations/astro"
36
+ },
37
+ "homepage": "https://wu-framework.dev/docs/integrations/astro"
38
+ }
@@ -1,53 +1,53 @@
1
- import type { AstroIntegration } from 'astro';
2
-
3
- /** Configuration for a single wu micro-app. */
4
- export interface WuAppConfig {
5
- /** Unique name used to reference this micro-app. */
6
- name: string;
7
- /** URL or path from which the micro-app is loaded. */
8
- url: string;
9
- /** Loading strategy. Defaults to the framework default. */
10
- strategy?: 'eager' | 'lazy' | 'manual';
11
- }
12
-
13
- /** Options accepted by the wu Astro integration. */
14
- export interface WuIntegrationOptions {
15
- /** Micro-apps to auto-register via wu.init(). */
16
- apps?: WuAppConfig[];
17
- /** Global sandbox isolation mode. */
18
- sandbox?: 'module' | 'strict' | 'eval';
19
- /** CDN URL for the wu-framework UMD bundle. When omitted the local package is used. */
20
- cdn?: string;
21
- /** Enable debug logging. */
22
- debug?: boolean;
23
- }
24
-
25
- /**
26
- * Astro integration factory for wu-framework.
27
- *
28
- * @example
29
- * import wu from '@wu-framework/astro';
30
- * export default defineConfig({ integrations: [wu({ apps: [...] })] });
31
- */
32
- export default function wuIntegration(
33
- options?: WuIntegrationOptions
34
- ): AstroIntegration;
35
-
36
- /** Props for the WuShell.astro layout component. */
37
- export interface WuShellProps {
38
- apps: WuAppConfig[];
39
- sandbox?: 'module' | 'strict' | 'eval';
40
- debug?: boolean;
41
- }
42
-
43
- /** Props for the WuApp.astro mount component. */
44
- export interface WuAppProps {
45
- /** Name of the registered wu micro-app. */
46
- name: string;
47
- /** Defer mounting until the element is visible (IntersectionObserver). */
48
- lazy?: boolean;
49
- /** CSS class(es) for the container div. */
50
- class?: string;
51
- /** Inline styles for the container div. */
52
- style?: string;
53
- }
1
+ import type { AstroIntegration } from 'astro';
2
+
3
+ /** Configuration for a single wu micro-app. */
4
+ export interface WuAppConfig {
5
+ /** Unique name used to reference this micro-app. */
6
+ name: string;
7
+ /** URL or path from which the micro-app is loaded. */
8
+ url: string;
9
+ /** Loading strategy. Defaults to the framework default. */
10
+ strategy?: 'eager' | 'lazy' | 'manual';
11
+ }
12
+
13
+ /** Options accepted by the wu Astro integration. */
14
+ export interface WuIntegrationOptions {
15
+ /** Micro-apps to auto-register via wu.init(). */
16
+ apps?: WuAppConfig[];
17
+ /** Global sandbox isolation mode. */
18
+ sandbox?: 'module' | 'strict' | 'eval';
19
+ /** CDN URL for the wu-framework UMD bundle. When omitted the local package is used. */
20
+ cdn?: string;
21
+ /** Enable debug logging. */
22
+ debug?: boolean;
23
+ }
24
+
25
+ /**
26
+ * Astro integration factory for wu-framework.
27
+ *
28
+ * @example
29
+ * import wu from '@wu-framework/astro';
30
+ * export default defineConfig({ integrations: [wu({ apps: [...] })] });
31
+ */
32
+ export default function wuIntegration(
33
+ options?: WuIntegrationOptions
34
+ ): AstroIntegration;
35
+
36
+ /** Props for the WuShell.astro layout component. */
37
+ export interface WuShellProps {
38
+ apps: WuAppConfig[];
39
+ sandbox?: 'module' | 'strict' | 'eval';
40
+ debug?: boolean;
41
+ }
42
+
43
+ /** Props for the WuApp.astro mount component. */
44
+ export interface WuAppProps {
45
+ /** Name of the registered wu micro-app. */
46
+ name: string;
47
+ /** Defer mounting until the element is visible (IntersectionObserver). */
48
+ lazy?: boolean;
49
+ /** CSS class(es) for the container div. */
50
+ class?: string;
51
+ /** Inline styles for the container div. */
52
+ style?: string;
53
+ }
package/package.json CHANGED
@@ -1,218 +1,218 @@
1
- {
2
- "name": "wu-framework",
3
- "version": "2.1.0",
4
- "description": "Universal Microfrontends Framework - 13 frameworks, zero config, Shadow DOM isolation",
5
- "main": "dist/wu-framework.cjs.js",
6
- "module": "dist/wu-framework.esm.js",
7
- "browser": "dist/wu-framework.umd.js",
8
- "type": "module",
9
- "exports": {
10
- ".": {
11
- "import": "./dist/wu-framework.esm.js",
12
- "require": "./dist/wu-framework.cjs.js",
13
- "browser": "./dist/wu-framework.umd.js"
14
- },
15
- "./adapters": "./dist/adapters/index.js",
16
- "./adapters/react": "./dist/adapters/react/index.js",
17
- "./adapters/vue": "./dist/adapters/vue/index.js",
18
- "./adapters/angular": "./dist/adapters/angular/index.js",
19
- "./adapters/svelte": "./dist/adapters/svelte/index.js",
20
- "./adapters/preact": "./dist/adapters/preact/index.js",
21
- "./adapters/solid": "./dist/adapters/solid/index.js",
22
- "./adapters/lit": "./dist/adapters/lit/index.js",
23
- "./adapters/vanilla": "./dist/adapters/vanilla/index.js",
24
- "./adapters/alpine": "./dist/adapters/alpine/index.js",
25
- "./adapters/qwik": "./dist/adapters/qwik/index.js",
26
- "./adapters/stencil": "./dist/adapters/stencil/index.js",
27
- "./adapters/htmx": "./dist/adapters/htmx/index.js",
28
- "./adapters/stimulus": "./dist/adapters/stimulus/index.js",
29
- "./integrations/astro": "./integrations/astro/index.js",
30
- "./integrations/astro/WuApp.astro": "./integrations/astro/WuApp.astro",
31
- "./integrations/astro/WuShell.astro": "./integrations/astro/WuShell.astro",
32
- "./sandbox/iframe": "./dist/wu-iframe-sandbox.js",
33
- "./sandbox/html-parser": "./dist/wu-html-parser.js",
34
- "./sandbox/script-executor": "./dist/wu-script-executor.js",
35
- "./ai": "./dist/ai/wu-ai.js"
36
- },
37
- "scripts": {
38
- "dev": "rollup -c --watch",
39
- "build": "node scripts/build.js all --clean",
40
- "build:dev": "rollup -c --environment BUILD_TARGET:dev",
41
- "build:prod": "rollup -c --environment BUILD_TARGET:prod",
42
- "build:all": "node scripts/build.js all --clean",
43
- "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
44
- "test": "vitest run",
45
- "test:watch": "vitest",
46
- "test:coverage": "vitest run --coverage",
47
- "lint": "eslint src/",
48
- "format": "prettier --write src/",
49
- "format:check": "prettier --check src/",
50
- "prepublishOnly": "npm run build"
51
- },
52
- "keywords": [
53
- "microfrontends",
54
- "micro-frontends",
55
- "framework-agnostic",
56
- "react",
57
- "vue",
58
- "angular",
59
- "svelte",
60
- "preact",
61
- "solid",
62
- "lit",
63
- "web-components",
64
- "shadow-dom",
65
- "universal",
66
- "zero-config",
67
- "ai",
68
- "llm",
69
- "webmcp",
70
- "mcp",
71
- "tool-calling",
72
- "byol"
73
- ],
74
- "author": "Luis Garcia",
75
- "license": "MIT",
76
- "repository": {
77
- "type": "git",
78
- "url": "https://github.com/wu-framework/wu-framework.git"
79
- },
80
- "bugs": {
81
- "url": "https://github.com/wu-framework/wu-framework/issues"
82
- },
83
- "homepage": "https://www.wu-framework.com",
84
- "engines": {
85
- "node": ">=16.0.0"
86
- },
87
- "browserslist": [
88
- "defaults",
89
- "not IE 11",
90
- "supports es6-module"
91
- ],
92
- "files": [
93
- "dist/",
94
- "integrations/",
95
- "README.md",
96
- "LICENSE"
97
- ],
98
- "sideEffects": [
99
- "./dist/wu-framework.esm.js",
100
- "./dist/wu-framework.cjs.js",
101
- "./dist/wu-framework.umd.js",
102
- "./dist/wu-framework.dev.js"
103
- ],
104
- "typesVersions": {
105
- "*": {
106
- "adapters/react": [
107
- "dist/adapters/react/index.d.ts"
108
- ],
109
- "adapters/vue": [
110
- "dist/adapters/vue/index.d.ts"
111
- ],
112
- "adapters/angular": [
113
- "dist/adapters/angular/index.d.ts"
114
- ],
115
- "adapters/svelte": [
116
- "dist/adapters/svelte/index.d.ts"
117
- ],
118
- "adapters/preact": [
119
- "dist/adapters/preact/index.d.ts"
120
- ],
121
- "adapters/solid": [
122
- "dist/adapters/solid/index.d.ts"
123
- ],
124
- "adapters/lit": [
125
- "dist/adapters/lit/index.d.ts"
126
- ],
127
- "adapters/vanilla": [
128
- "dist/adapters/vanilla/index.d.ts"
129
- ],
130
- "adapters/alpine": [
131
- "dist/adapters/alpine/index.d.ts"
132
- ],
133
- "adapters/qwik": [
134
- "dist/adapters/qwik/index.d.ts"
135
- ],
136
- "adapters/stencil": [
137
- "dist/adapters/stencil/index.d.ts"
138
- ],
139
- "adapters/htmx": [
140
- "dist/adapters/htmx/index.d.ts"
141
- ],
142
- "adapters/stimulus": [
143
- "dist/adapters/stimulus/index.d.ts"
144
- ]
145
- }
146
- },
147
- "devDependencies": {
148
- "@rollup/plugin-commonjs": "^29.0.0",
149
- "@rollup/plugin-node-resolve": "^15.2.3",
150
- "@rollup/plugin-replace": "^5.0.5",
151
- "@rollup/plugin-terser": "^0.4.4",
152
- "@vitest/coverage-v8": "^4.0.18",
153
- "eslint": "^10.0.2",
154
- "jsdom": "^28.0.0",
155
- "prettier": "^3.8.1",
156
- "rollup": "^4.9.0",
157
- "vitest": "^4.0.18"
158
- },
159
- "peerDependencies": {
160
- "@angular/core": ">=14.0.0",
161
- "@builder.io/qwik": ">=1.0.0",
162
- "@hotwired/stimulus": ">=3.0.0",
163
- "@stencil/core": ">=4.0.0",
164
- "alpinejs": ">=3.0.0",
165
- "htmx.org": ">=2.0.0",
166
- "lit": ">=2.0.0",
167
- "preact": ">=10.0.0",
168
- "react": ">=16.8.0",
169
- "react-dom": ">=16.8.0",
170
- "solid-js": ">=1.0.0",
171
- "svelte": ">=3.0.0",
172
- "vue": ">=3.0.0"
173
- },
174
- "overrides": {
175
- "serialize-javascript": "^7.0.3"
176
- },
177
- "peerDependenciesMeta": {
178
- "react": {
179
- "optional": true
180
- },
181
- "react-dom": {
182
- "optional": true
183
- },
184
- "vue": {
185
- "optional": true
186
- },
187
- "@angular/core": {
188
- "optional": true
189
- },
190
- "svelte": {
191
- "optional": true
192
- },
193
- "solid-js": {
194
- "optional": true
195
- },
196
- "preact": {
197
- "optional": true
198
- },
199
- "lit": {
200
- "optional": true
201
- },
202
- "alpinejs": {
203
- "optional": true
204
- },
205
- "@builder.io/qwik": {
206
- "optional": true
207
- },
208
- "@stencil/core": {
209
- "optional": true
210
- },
211
- "htmx.org": {
212
- "optional": true
213
- },
214
- "@hotwired/stimulus": {
215
- "optional": true
216
- }
217
- }
218
- }
1
+ {
2
+ "name": "wu-framework",
3
+ "version": "2.1.2",
4
+ "description": "Universal Microfrontends Framework - 13 frameworks, zero config, Shadow DOM isolation",
5
+ "main": "dist/wu-framework.cjs.js",
6
+ "module": "dist/wu-framework.esm.js",
7
+ "browser": "dist/wu-framework.umd.js",
8
+ "type": "module",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/wu-framework.esm.js",
12
+ "require": "./dist/wu-framework.cjs.js",
13
+ "browser": "./dist/wu-framework.umd.js"
14
+ },
15
+ "./adapters": "./dist/adapters/index.js",
16
+ "./adapters/react": "./dist/adapters/react/index.js",
17
+ "./adapters/vue": "./dist/adapters/vue/index.js",
18
+ "./adapters/angular": "./dist/adapters/angular/index.js",
19
+ "./adapters/svelte": "./dist/adapters/svelte/index.js",
20
+ "./adapters/preact": "./dist/adapters/preact/index.js",
21
+ "./adapters/solid": "./dist/adapters/solid/index.js",
22
+ "./adapters/lit": "./dist/adapters/lit/index.js",
23
+ "./adapters/vanilla": "./dist/adapters/vanilla/index.js",
24
+ "./adapters/alpine": "./dist/adapters/alpine/index.js",
25
+ "./adapters/qwik": "./dist/adapters/qwik/index.js",
26
+ "./adapters/stencil": "./dist/adapters/stencil/index.js",
27
+ "./adapters/htmx": "./dist/adapters/htmx/index.js",
28
+ "./adapters/stimulus": "./dist/adapters/stimulus/index.js",
29
+ "./integrations/astro": "./integrations/astro/index.js",
30
+ "./integrations/astro/WuApp.astro": "./integrations/astro/WuApp.astro",
31
+ "./integrations/astro/WuShell.astro": "./integrations/astro/WuShell.astro",
32
+ "./sandbox/iframe": "./dist/core/wu-iframe-sandbox.js",
33
+ "./sandbox/html-parser": "./dist/core/wu-html-parser.js",
34
+ "./sandbox/script-executor": "./dist/core/wu-script-executor.js",
35
+ "./ai": "./dist/ai/wu-ai.js"
36
+ },
37
+ "scripts": {
38
+ "dev": "rollup -c --watch",
39
+ "build": "node scripts/build.js all --clean",
40
+ "build:dev": "rollup -c --environment BUILD_TARGET:dev",
41
+ "build:prod": "rollup -c --environment BUILD_TARGET:prod",
42
+ "build:all": "node scripts/build.js all --clean",
43
+ "clean": "node -e \"require('fs').rmSync('dist',{recursive:true,force:true})\"",
44
+ "test": "vitest run",
45
+ "test:watch": "vitest",
46
+ "test:coverage": "vitest run --coverage",
47
+ "lint": "eslint src/",
48
+ "format": "prettier --write src/",
49
+ "format:check": "prettier --check src/",
50
+ "prepublishOnly": "npm run build"
51
+ },
52
+ "keywords": [
53
+ "microfrontends",
54
+ "micro-frontends",
55
+ "framework-agnostic",
56
+ "react",
57
+ "vue",
58
+ "angular",
59
+ "svelte",
60
+ "preact",
61
+ "solid",
62
+ "lit",
63
+ "web-components",
64
+ "shadow-dom",
65
+ "universal",
66
+ "zero-config",
67
+ "ai",
68
+ "llm",
69
+ "webmcp",
70
+ "mcp",
71
+ "tool-calling",
72
+ "byol"
73
+ ],
74
+ "author": "Luis Garcia",
75
+ "license": "MIT",
76
+ "repository": {
77
+ "type": "git",
78
+ "url": "git+https://github.com/LuisPadre25/wu-framework.git"
79
+ },
80
+ "bugs": {
81
+ "url": "https://github.com/LuisPadre25/wu-framework/issues"
82
+ },
83
+ "homepage": "https://www.wu-framework.com",
84
+ "engines": {
85
+ "node": ">=16.0.0"
86
+ },
87
+ "browserslist": [
88
+ "defaults",
89
+ "not IE 11",
90
+ "supports es6-module"
91
+ ],
92
+ "files": [
93
+ "dist/",
94
+ "integrations/",
95
+ "README.md",
96
+ "LICENSE"
97
+ ],
98
+ "sideEffects": [
99
+ "./dist/wu-framework.esm.js",
100
+ "./dist/wu-framework.cjs.js",
101
+ "./dist/wu-framework.umd.js",
102
+ "./dist/wu-framework.dev.js"
103
+ ],
104
+ "typesVersions": {
105
+ "*": {
106
+ "adapters/react": [
107
+ "dist/adapters/react/index.d.ts"
108
+ ],
109
+ "adapters/vue": [
110
+ "dist/adapters/vue/index.d.ts"
111
+ ],
112
+ "adapters/angular": [
113
+ "dist/adapters/angular/index.d.ts"
114
+ ],
115
+ "adapters/svelte": [
116
+ "dist/adapters/svelte/index.d.ts"
117
+ ],
118
+ "adapters/preact": [
119
+ "dist/adapters/preact/index.d.ts"
120
+ ],
121
+ "adapters/solid": [
122
+ "dist/adapters/solid/index.d.ts"
123
+ ],
124
+ "adapters/lit": [
125
+ "dist/adapters/lit/index.d.ts"
126
+ ],
127
+ "adapters/vanilla": [
128
+ "dist/adapters/vanilla/index.d.ts"
129
+ ],
130
+ "adapters/alpine": [
131
+ "dist/adapters/alpine/index.d.ts"
132
+ ],
133
+ "adapters/qwik": [
134
+ "dist/adapters/qwik/index.d.ts"
135
+ ],
136
+ "adapters/stencil": [
137
+ "dist/adapters/stencil/index.d.ts"
138
+ ],
139
+ "adapters/htmx": [
140
+ "dist/adapters/htmx/index.d.ts"
141
+ ],
142
+ "adapters/stimulus": [
143
+ "dist/adapters/stimulus/index.d.ts"
144
+ ]
145
+ }
146
+ },
147
+ "devDependencies": {
148
+ "@rollup/plugin-commonjs": "^29.0.0",
149
+ "@rollup/plugin-node-resolve": "^15.2.3",
150
+ "@rollup/plugin-replace": "^5.0.5",
151
+ "@rollup/plugin-terser": "^0.4.4",
152
+ "@vitest/coverage-v8": "^4.0.18",
153
+ "eslint": "^10.0.2",
154
+ "jsdom": "^28.0.0",
155
+ "prettier": "^3.8.1",
156
+ "rollup": "^4.9.0",
157
+ "vitest": "^4.0.18"
158
+ },
159
+ "peerDependencies": {
160
+ "@angular/core": ">=14.0.0",
161
+ "@builder.io/qwik": ">=1.0.0",
162
+ "@hotwired/stimulus": ">=3.0.0",
163
+ "@stencil/core": ">=4.0.0",
164
+ "alpinejs": ">=3.0.0",
165
+ "htmx.org": ">=2.0.0",
166
+ "lit": ">=2.0.0",
167
+ "preact": ">=10.0.0",
168
+ "react": ">=16.8.0",
169
+ "react-dom": ">=16.8.0",
170
+ "solid-js": ">=1.0.0",
171
+ "svelte": ">=3.0.0",
172
+ "vue": ">=3.0.0"
173
+ },
174
+ "overrides": {
175
+ "serialize-javascript": "^7.0.3"
176
+ },
177
+ "peerDependenciesMeta": {
178
+ "react": {
179
+ "optional": true
180
+ },
181
+ "react-dom": {
182
+ "optional": true
183
+ },
184
+ "vue": {
185
+ "optional": true
186
+ },
187
+ "@angular/core": {
188
+ "optional": true
189
+ },
190
+ "svelte": {
191
+ "optional": true
192
+ },
193
+ "solid-js": {
194
+ "optional": true
195
+ },
196
+ "preact": {
197
+ "optional": true
198
+ },
199
+ "lit": {
200
+ "optional": true
201
+ },
202
+ "alpinejs": {
203
+ "optional": true
204
+ },
205
+ "@builder.io/qwik": {
206
+ "optional": true
207
+ },
208
+ "@stencil/core": {
209
+ "optional": true
210
+ },
211
+ "htmx.org": {
212
+ "optional": true
213
+ },
214
+ "@hotwired/stimulus": {
215
+ "optional": true
216
+ }
217
+ }
218
+ }
@@ -1,2 +0,0 @@
1
- import{l as t}from"./wu-logger-fJfUHBGA.js";class e{constructor(){this._cache=new Map}async fetchHtml(e,r){t.wuDebug(`[HtmlParser] Fetching HTML for ${r} from ${e}`);const s=await fetch(e,{method:"GET",headers:{Accept:"text/html,application/xhtml+xml,*/*"}});if(!s.ok)throw new Error(`[HtmlParser] Failed to fetch ${e}: HTTP ${s.status}`);const n=await s.text();if(!n||!n.trim())throw new Error(`[HtmlParser] Empty HTML response from ${e}`);return t.wuDebug(`[HtmlParser] Fetched ${n.length} chars for ${r}`),n}parse(e,r,s){const n=`${r}:${e.length}`;if(this._cache.has(n))return this._cache.get(n);const c=(new DOMParser).parseFromString(e,"text/html"),i=[],l=[],a=[],o=[],h={inlineScripts:i,externalScripts:l,inlineStyles:a,externalStyles:o,baseUrl:s};c.head&&this._extractResources(c.head,h);const u=c.body||c.documentElement;this._extractResources(u,h);const m={dom:u.innerHTML,scripts:{inline:i,external:l},styles:{inline:a,external:o}};return this._cache.set(n,m),t.wuDebug(`[HtmlParser] ${r}: ${i.length} inline scripts, ${l.length} external scripts, ${a.length+o.length} styles`),m}async fetchAndParse(t,e){const r=await this.fetchHtml(t,e);return this.parse(r,e,t)}_extractResources(t,e){const r=Array.from(t.children);for(const t of r){const r=t.nodeName.toLowerCase();if("script"!==r){if("style"===r){const r=t.textContent?.trim();r&&e.inlineStyles.push(r),t.replaceWith(document.createComment("wu:style"));continue}if("link"===r){const r=t.getAttribute("rel"),s=t.getAttribute("href");if("stylesheet"===r&&s){e.externalStyles.push(this._resolveUrl(s,e.baseUrl)),t.replaceWith(document.createComment("wu:link"));continue}}t.children.length>0&&this._extractResources(t,e)}else this._extractScript(t,e),t.replaceWith(document.createComment("wu:script"))}}_extractScript(e,r){const s=e.getAttribute("type")||"",n=e.getAttribute("src");if("module"!==s)if(n)r.externalScripts.push(this._resolveUrl(n,r.baseUrl));else{const t=e.textContent?.trim();t&&r.inlineScripts.push(t)}else t.wuDebug('[HtmlParser] Skipping type="module" script (use sandbox: "module" for ES modules)')}_resolveUrl(t,e){if(t.startsWith("http://")||t.startsWith("https://"))return t;if(t.startsWith("//"))return`https:${t}`;try{return new URL(t,e).href}catch{const r=e.replace(/\/$/,"");return t.startsWith("/")?r+t:`${r}/${t}`}}clearCache(){this._cache.clear()}}export{e as WuHtmlParser};
2
- //# sourceMappingURL=wu-html-parser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"wu-html-parser.js","sources":["../src/core/wu-html-parser.js"],"sourcesContent":["/**\r\n * WU-HTML-PARSER: Fetch and parse HTML entries from micro-apps.\r\n *\r\n * Used in \"strict\" sandbox mode. The flow:\r\n * 1. Fetch the HTML page at the app's URL\r\n * 2. Parse it: extract inline/external scripts, inline/external styles, and clean DOM\r\n * 3. Return structured result so wu-core can inject DOM + styles into Shadow DOM\r\n * and execute scripts inside the proxy sandbox via WuScriptExecutor.\r\n *\r\n * This is the qiankun-style \"HTML entry\" approach that enables real JS isolation.\r\n */\r\n\r\nimport { logger } from './wu-logger.js';\r\n\r\nexport class WuHtmlParser {\r\n constructor() {\r\n this._cache = new Map();\r\n }\r\n\r\n /**\r\n * Fetch HTML content from a URL.\r\n * @param {string} url - App URL (e.g. http://localhost:3001)\r\n * @param {string} appName - For logging\r\n * @returns {Promise<string>} Raw HTML string\r\n */\r\n async fetchHtml(url, appName) {\r\n logger.wuDebug(`[HtmlParser] Fetching HTML for ${appName} from ${url}`);\r\n\r\n const response = await fetch(url, {\r\n method: 'GET',\r\n headers: { 'Accept': 'text/html,application/xhtml+xml,*/*' }\r\n });\r\n\r\n if (!response.ok) {\r\n throw new Error(`[HtmlParser] Failed to fetch ${url}: HTTP ${response.status}`);\r\n }\r\n\r\n const html = await response.text();\r\n if (!html || !html.trim()) {\r\n throw new Error(`[HtmlParser] Empty HTML response from ${url}`);\r\n }\r\n\r\n logger.wuDebug(`[HtmlParser] Fetched ${html.length} chars for ${appName}`);\r\n return html;\r\n }\r\n\r\n /**\r\n * Parse HTML string into structured parts.\r\n *\r\n * @param {string} html - Raw HTML\r\n * @param {string} appName - App identifier\r\n * @param {string} baseUrl - Base URL for resolving relative paths\r\n * @returns {{\r\n * dom: string,\r\n * scripts: { inline: string[], external: string[] },\r\n * styles: { inline: string[], external: string[] }\r\n * }}\r\n */\r\n parse(html, appName, baseUrl) {\r\n const cacheKey = `${appName}:${html.length}`;\r\n if (this._cache.has(cacheKey)) {\r\n return this._cache.get(cacheKey);\r\n }\r\n\r\n const parser = new DOMParser();\r\n const doc = parser.parseFromString(html, 'text/html');\r\n\r\n const inlineScripts = [];\r\n const externalScripts = [];\r\n const inlineStyles = [];\r\n const externalStyles = [];\r\n\r\n const ctx = {\r\n inlineScripts, externalScripts,\r\n inlineStyles, externalStyles,\r\n baseUrl\r\n };\r\n\r\n // DOMParser moves <style>, <link>, and some <script> tags to <head>.\r\n // Extract resources from both head and body to capture everything.\r\n if (doc.head) {\r\n this._extractResources(doc.head, ctx);\r\n }\r\n\r\n const temp = doc.body || doc.documentElement;\r\n this._extractResources(temp, ctx);\r\n\r\n const result = {\r\n dom: temp.innerHTML,\r\n scripts: { inline: inlineScripts, external: externalScripts },\r\n styles: { inline: inlineStyles, external: externalStyles }\r\n };\r\n\r\n this._cache.set(cacheKey, result);\r\n\r\n logger.wuDebug(\r\n `[HtmlParser] ${appName}: ${inlineScripts.length} inline scripts, ` +\r\n `${externalScripts.length} external scripts, ` +\r\n `${inlineStyles.length + externalStyles.length} styles`\r\n );\r\n\r\n return result;\r\n }\r\n\r\n /**\r\n * Convenience: fetch + parse in one call.\r\n */\r\n async fetchAndParse(url, appName) {\r\n const html = await this.fetchHtml(url, appName);\r\n return this.parse(html, appName, url);\r\n }\r\n\r\n /**\r\n * Recursively walk the DOM, extracting scripts and styles,\r\n * replacing them with comments to keep the DOM clean.\r\n */\r\n _extractResources(element, ctx) {\r\n // Iterate over a static copy since we mutate the DOM\r\n const children = Array.from(element.children);\r\n\r\n for (const child of children) {\r\n const tag = child.nodeName.toLowerCase();\r\n\r\n if (tag === 'script') {\r\n this._extractScript(child, ctx);\r\n child.replaceWith(document.createComment('wu:script'));\r\n continue;\r\n }\r\n\r\n if (tag === 'style') {\r\n const text = child.textContent?.trim();\r\n if (text) ctx.inlineStyles.push(text);\r\n child.replaceWith(document.createComment('wu:style'));\r\n continue;\r\n }\r\n\r\n if (tag === 'link') {\r\n const rel = child.getAttribute('rel');\r\n const href = child.getAttribute('href');\r\n if (rel === 'stylesheet' && href) {\r\n ctx.externalStyles.push(this._resolveUrl(href, ctx.baseUrl));\r\n child.replaceWith(document.createComment('wu:link'));\r\n continue;\r\n }\r\n }\r\n\r\n // Recurse into children\r\n if (child.children.length > 0) {\r\n this._extractResources(child, ctx);\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Extract a <script> tag into inline or external list.\r\n * Skips type=\"module\" scripts (they can't be eval'd — use module mode for those).\r\n */\r\n _extractScript(el, ctx) {\r\n const type = el.getAttribute('type') || '';\r\n const src = el.getAttribute('src');\r\n\r\n // Module scripts can't be executed via new Function / eval.\r\n // If the app uses ES modules, it should use sandbox: 'module' mode.\r\n if (type === 'module') {\r\n logger.wuDebug('[HtmlParser] Skipping type=\"module\" script (use sandbox: \"module\" for ES modules)');\r\n return;\r\n }\r\n\r\n if (src) {\r\n ctx.externalScripts.push(this._resolveUrl(src, ctx.baseUrl));\r\n } else {\r\n const text = el.textContent?.trim();\r\n if (text) ctx.inlineScripts.push(text);\r\n }\r\n }\r\n\r\n /**\r\n * Resolve a relative URL against a base URL.\r\n */\r\n _resolveUrl(url, baseUrl) {\r\n if (url.startsWith('http://') || url.startsWith('https://')) return url;\r\n if (url.startsWith('//')) return `https:${url}`;\r\n\r\n try {\r\n return new URL(url, baseUrl).href;\r\n } catch {\r\n // Fallback for environments without URL constructor\r\n const base = baseUrl.replace(/\\/$/, '');\r\n return url.startsWith('/') ? base + url : `${base}/${url}`;\r\n }\r\n }\r\n\r\n /**\r\n * Clear the parse cache.\r\n */\r\n clearCache() {\r\n this._cache.clear();\r\n }\r\n}\r\n"],"names":["WuHtmlParser","constructor","this","_cache","Map","fetchHtml","url","appName","logger","wuDebug","response","fetch","method","headers","Accept","ok","Error","status","html","text","trim","length","parse","baseUrl","cacheKey","has","get","doc","DOMParser","parseFromString","inlineScripts","externalScripts","inlineStyles","externalStyles","ctx","head","_extractResources","temp","body","documentElement","result","dom","innerHTML","scripts","inline","external","styles","set","fetchAndParse","element","children","Array","from","child","tag","nodeName","toLowerCase","textContent","push","replaceWith","document","createComment","rel","getAttribute","href","_resolveUrl","_extractScript","el","type","src","startsWith","URL","base","replace","clearCache","clear"],"mappings":"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"}