@absolutejs/absolute 0.20.0-beta.173 → 0.20.0-beta.175
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.
- package/CHANGELOG.md +30 -0
- package/changelog.json +71 -0
- package/dist/angular/browser.js +13 -2
- package/dist/angular/browser.js.map +3 -3
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/angular/index.js +113 -34
- package/dist/angular/index.js.map +12 -9
- package/dist/angular/server.js +113 -34
- package/dist/angular/server.js.map +12 -9
- package/dist/build.js +946 -731
- package/dist/build.js.map +40 -37
- package/dist/cli/{add-ae6mg79m.js → add-ntg96znk.js} +32 -31
- package/dist/cli/{compile-ndc36zna.js → compile-w2z6c9vt.js} +16 -14
- package/dist/cli/config/server.js +85 -65
- package/dist/cli/{dev-x49583aj.js → dev-8br5mr7t.js} +17 -3
- package/dist/cli/{expoProject-h404n2r8.js → expoProject-1qtw97js.js} +2 -1
- package/dist/cli/{generate-brvjesd6.js → generate-5vyz1s44.js} +7 -6
- package/dist/cli/{htmx-5twhjz7p.js → htmx-26hs6jdm.js} +2 -1
- package/dist/cli/{index-gyjxrnnz.js → index-23hvdyxf.js} +18 -16
- package/dist/cli/index-4j1twret.js +22 -0
- package/dist/cli/{index-z794p5qg.js → index-6522t968.js} +43 -21
- package/dist/cli/{index-25e7k849.js → index-7z1hh3fg.js} +4 -4
- package/dist/cli/{index-s0r5q839.js → index-cksezef8.js} +10 -8
- package/dist/cli/{index-q3snnhyd.js → index-enbw9484.js} +34 -33
- package/dist/cli/{index-b1wht4q5.js → index-kes8he5s.js} +6 -4
- package/dist/cli/{index-vh68jb0e.js → index-pkw3jktb.js} +17 -16
- package/dist/cli/{index-rervww4p.js → index-zyd80s3h.js} +119 -119
- package/dist/cli/index.js +11 -11
- package/dist/cli/{islands-p4vgx7a2.js → islands-bx67g15t.js} +8 -7
- package/dist/cli/{mobile-nqdkk3gd.js → mobile-we5q51ey.js} +5 -4
- package/dist/cli/{remove-abaf0w6k.js → remove-4jh862qa.js} +6 -5
- package/dist/cli/{start-t3cq57wn.js → start-srs11bm8.js} +5 -4
- package/dist/cli/{typecheck-fag7djt5.js → typecheck-7fvww3b7.js} +28 -26
- package/dist/client/chunks/index-4j1snyh2.js +18 -0
- package/dist/client/chunks/index-4j1snyh2.js.map +10 -0
- package/dist/client/chunks/{index-6b66nzyf.js → index-a3rpg5kw.js} +6 -16
- package/dist/client/chunks/{index-6b66nzyf.js.map → index-a3rpg5kw.js.map} +3 -4
- package/dist/client/chunks/{islands-s2ta5ajb.js → islands-mfjmdwnb.js} +11 -4
- package/dist/client/chunks/{islands-s2ta5ajb.js.map → islands-mfjmdwnb.js.map} +3 -3
- package/dist/client/chunks/{react-dcvkaba2.js → react-sprprqzs.js} +20 -4
- package/dist/client/chunks/react-sprprqzs.js.map +10 -0
- package/dist/client/chunks/svelte-6ewphsvj.js +30 -0
- package/dist/client/chunks/svelte-6ewphsvj.js.map +10 -0
- package/dist/client/chunks/{vue-a84fzp3v.js → vue-db6ppn1f.js} +14 -4
- package/dist/client/chunks/vue-db6ppn1f.js.map +10 -0
- package/dist/client/index.js +65 -8
- package/dist/client/index.js.map +4 -4
- package/dist/client/navigation.js +5 -3
- package/dist/client/navigation.js.map +2 -2
- package/dist/client/prefetch.js +1 -1
- package/dist/dev/client/handlers/islands.ts +85 -0
- package/dist/dev/client/hmrClient.ts +6 -0
- package/dist/dev/importCostReport.js +45 -26
- package/dist/index.js +1080 -852
- package/dist/index.js.map +41 -38
- package/dist/islands/index.js +57 -10
- package/dist/islands/index.js.map +9 -7
- package/dist/mobile/index.js +115 -95
- package/dist/mobile/index.js.map +6 -5
- package/dist/mobile/remoteMacAgentEntry.js +205 -651
- package/dist/react/browser.js +15 -4
- package/dist/react/browser.js.map +5 -5
- package/dist/react/components/client.js +506 -0
- package/dist/react/components/index.js +14 -15
- package/dist/react/components/index.js.map +4 -4
- package/dist/react/components/server/index.js +728 -0
- package/dist/react/hooks/index.js +14 -15
- package/dist/react/hooks/index.js.map +4 -4
- package/dist/react/index.js +66 -6
- package/dist/react/index.js.map +11 -9
- package/dist/react/router/browser.js +7 -8
- package/dist/react/router/browser.js.map +4 -4
- package/dist/react/router/index.js +7 -8
- package/dist/react/router/index.js.map +4 -4
- package/dist/react/server.js +14 -1
- package/dist/react/server.js.map +4 -4
- package/dist/src/build/buildReactServerComponents.d.ts +4 -0
- package/dist/src/build/islandEntries.d.ts +5 -0
- package/dist/src/cli/config/absolute/resolveAbsoluteConfig.d.ts +3 -3
- package/dist/src/cli/config/auth/resolveAuthSettings.d.ts +3 -3
- package/dist/src/client/hydrators/react.d.ts +7 -0
- package/dist/src/client/hydrators/svelte.d.ts +3 -0
- package/dist/src/client/hydrators/vue.d.ts +3 -0
- package/dist/src/client/preserveIslandMarkup.d.ts +5 -0
- package/dist/src/core/islandServerGeneration.d.ts +3 -0
- package/dist/src/dev/angular/fastHmrCompiler.d.ts +2 -2
- package/dist/src/dev/angular/hmrImportGenerator.d.ts +2 -2
- package/dist/src/dev/angular/vendor/translator/ts_util.d.ts +2 -2
- package/dist/src/dev/angular/vendor/translator/typescript_ast_factory.d.ts +40 -40
- package/dist/src/dev/angular/vendor/translator/typescript_translator.d.ts +3 -3
- package/dist/src/react/components/client.d.ts +4 -0
- package/dist/src/react/components/server/index.d.ts +8 -0
- package/dist/src/react/serverComponents/constants.d.ts +2 -1
- package/dist/src/utils/lazyTypescript.d.ts +3 -0
- package/dist/svelte/index.js +66 -6
- package/dist/svelte/index.js.map +10 -8
- package/dist/svelte/server.js +38 -3
- package/dist/svelte/server.js.map +6 -5
- package/dist/types/build.d.ts +3 -2
- package/dist/types/globals.d.ts +15 -0
- package/dist/vue/browser.js +26 -16
- package/dist/vue/browser.js.map +5 -5
- package/dist/vue/index.js +65 -21
- package/dist/vue/index.js.map +10 -9
- package/package.json +1 -1
- package/dist/client/chunks/react-dcvkaba2.js.map +0 -10
- package/dist/client/chunks/svelte-4yfa5bxa.js +0 -17
- package/dist/client/chunks/svelte-4yfa5bxa.js.map +0 -10
- package/dist/client/chunks/vue-a84fzp3v.js.map +0 -10
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,36 @@ This file is generated by `absolute-changelog` from the entries in
|
|
|
6
6
|
`changelog/`. Edit an entry, not this file — and add new ones under
|
|
7
7
|
`changelog/unreleased/`.
|
|
8
8
|
|
|
9
|
+
## 0.20.0-beta.175 — 2026-11-14
|
|
10
|
+
|
|
11
|
+
### Fixed
|
|
12
|
+
|
|
13
|
+
- **Angular hot updates no longer break the Content Security Policy under secureHeaders()**
|
|
14
|
+
With `secureHeaders()` on, every Angular hot update in dev (a template, style or component edit) logged "Applying inline style violates the following Content Security Policy directive 'style-src …'", and the browser dropped the updated styles. Angular's browser bootstrap never received the page's CSP nonce, so the `<style>` elements it added after the server render had none. Angular pages and Angular islands now pass the nonce to Angular (`CSP_NONCE`) in the browser, in dev and in production, so hot-updated styles and styles for components rendered only in the browser are allowed.
|
|
15
|
+
- **`absolute dev` no longer restarts the server for a directory change event**
|
|
16
|
+
The first `absolute dev` boot of a freshly copied project could log `Server file changed: src/backend/assets — restarting...` and restart the server once, because the file watcher reported the `assets` directory itself and a path with no file extension was treated like `.env`. Directory events no longer restart the dev server; changes to the files inside a directory are still handled through their own events.
|
|
17
|
+
- **`absolute dev` logs one `hmr update` per save of a server file**
|
|
18
|
+
Saving a server file such as `src/backend/api.ts` under `absolute dev` printed `[hmr] hmr update src/backend/api.ts` two or more times, because an editor save reaches the watcher as several events and each one got past the "content unchanged" check before the first had recorded the new content. The edit was applied once; now it is also logged once.
|
|
19
|
+
- **Island pages get HMR in dev: island edits swap in place without a reload**
|
|
20
|
+
In `absolute dev`, pages that render islands now update like any other page. Editing an island component (a React, Svelte or Vue file listed in your island registry, or a file it imports) rebuilds that island and swaps it into the open page without a reload: the edited island starts over from its props, the page and its other islands keep their state, and island stores keep their values. The next reload renders the edit on the server too, so the hydration-mismatch overlay no longer appears. Before, a React island edit left the browser on the old island bundle (every reload then failed hydration), and a Svelte or Vue island edit changed nothing at all. Editing the React page that hosts the islands, or a component it imports, also updates in place again; before, the update could leave lifeless copies of the islands on screen. This covers islands rendered by React and HTML pages, and the island registry may live outside your framework directories (for example `src/islands/`). Angular islands, and edits to the registry file itself, still reload the page.
|
|
21
|
+
- **Errors thrown by routes are logged for API and fetch requests too, not only page requests**
|
|
22
|
+
When your app has no `onError` of its own, a route that throws was only logged for page and HTMX requests, and only when the project had an HTML or HTMX `error.html`. The same route called with `fetch` or `curl` (`Accept: */*`) or asking for JSON returned Elysia's generic 500 and wrote nothing to the log, in development and production, so a mistyped `asset()` key in an API route failed silently. Every unhandled route error is now logged once on the server, with the method, path and stack, whatever the request accepts. Responses are unchanged: the error details stay out of the response body, 404s and thrown `status(...)` responses are not logged, and an app that registers its own `onError` still handles (and logs) errors itself.
|
|
23
|
+
- **React Server Components pages named `*RSC.tsx` no longer get a doubled `RSCRSC` manifest key** (`asset`, `BaseBuildConfig`)
|
|
24
|
+
A React Server Components page whose file name already ends in RSC got the suffix twice: `pages/HomeRSC.tsx` was `asset(manifest, 'HomeRSCRSC')`, so the natural `'HomeRSC'` was missing from the manifest and the route failed only at request time. Such a page is now `asset(manifest, 'HomeRSC')`. The doubled key still works as a deprecated alias for the same bundle and prints a one-time warning in dev naming the new key. If `pages/Home.tsx` and `pages/HomeRSC.tsx` both exist, `Home.tsx` keeps `HomeRSC` (its key is unchanged), `HomeRSC.tsx` stays at `HomeRSCRSC`, and the build warns about the clash.
|
|
25
|
+
- **`@absolutejs/absolute/react/components` can be imported from React Server Components** (`SuspenseSlot`, `StreamSlot`, `Link`)
|
|
26
|
+
Importing anything from `@absolutejs/absolute/react/components` (for example `SuspenseSlot`) in a React Server Component crashed the page with `TypeError: createContext is not a function`, because the entry also defines `Link`'s context and React's server build has no `createContext`. A server component that imports the entry now gets a server components version of it: `SuspenseSlot`, `StreamSlot`, `Head`, `Image` and `JsonLd` render on the server as before, and `Link` and `usePrefetch` come from a "use client" module, so a server component can render `<Link>` and it hydrates as a client component. Wrapping these in your own 'use client' file is no longer needed. As with any client component, `<Link>` props passed from a server component must be serializable (no event handlers).
|
|
27
|
+
- **HTML and HTMX error and not-found pages load their stylesheets in production**
|
|
28
|
+
The HTML and HTMX `error.html`, `not-found.html` and `loading.html` pages were copied into the build as written, so a stylesheet or script linked relative to the source (such as `../../styles/indexes/site.css`) returned 404 and the error page showed unstyled. These pages now get the same hashed asset URLs (and font tags) as your other HTML and HTMX pages.
|
|
29
|
+
- **Svelte component style edits now apply in dev without a reload**
|
|
30
|
+
Editing only the `<style>` block of a Svelte component in dev hot-updated the component, but the page kept the old styles until a full reload: the browser reused the component's previously loaded stylesheet module. Each version of a component's styles now gets its own URL, so style edits apply immediately.
|
|
31
|
+
|
|
32
|
+
## 0.20.0-beta.174 — 2026-11-14
|
|
33
|
+
|
|
34
|
+
### Changed
|
|
35
|
+
|
|
36
|
+
- **Servers start faster: the framework no longer loads TypeScript at import**
|
|
37
|
+
Importing `@absolutejs/absolute` (and its `build`, `angular`, `angular/server` and `mobile` entry points) loaded the `typescript` package straight away, which takes a few hundred milliseconds of CPU, even though a running server never needs it. TypeScript now loads the first time the framework actually uses it (route scanning, island registries, Angular compilation, config editing), so servers start faster. Nothing you call changed, and those functions stay synchronous.
|
|
38
|
+
|
|
9
39
|
## 0.20.0-beta.173 — 2026-11-14
|
|
10
40
|
|
|
11
41
|
### Security
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,77 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"detail": "With `secureHeaders()` on, every Angular hot update in dev (a template, style or component edit) logged \"Applying inline style violates the following Content Security Policy directive 'style-src …'\", and the browser dropped the updated styles. Angular's browser bootstrap never received the page's CSP nonce, so the `<style>` elements it added after the server render had none. Angular pages and Angular islands now pass the nonce to Angular (`CSP_NONCE`) in the browser, in dev and in production, so hot-updated styles and styles for components rendered only in the browser are allowed.",
|
|
9
|
+
"kind": "fixed",
|
|
10
|
+
"summary": "Angular hot updates no longer break the Content Security Policy under secureHeaders()"
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
"detail": "The first `absolute dev` boot of a freshly copied project could log `Server file changed: src/backend/assets — restarting...` and restart the server once, because the file watcher reported the `assets` directory itself and a path with no file extension was treated like `.env`. Directory events no longer restart the dev server; changes to the files inside a directory are still handled through their own events.",
|
|
14
|
+
"kind": "fixed",
|
|
15
|
+
"summary": "`absolute dev` no longer restarts the server for a directory change event"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"detail": "Saving a server file such as `src/backend/api.ts` under `absolute dev` printed `[hmr] hmr update src/backend/api.ts` two or more times, because an editor save reaches the watcher as several events and each one got past the \"content unchanged\" check before the first had recorded the new content. The edit was applied once; now it is also logged once.",
|
|
19
|
+
"kind": "fixed",
|
|
20
|
+
"summary": "`absolute dev` logs one `hmr update` per save of a server file"
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
"detail": "In `absolute dev`, pages that render islands now update like any other page. Editing an island component (a React, Svelte or Vue file listed in your island registry, or a file it imports) rebuilds that island and swaps it into the open page without a reload: the edited island starts over from its props, the page and its other islands keep their state, and island stores keep their values. The next reload renders the edit on the server too, so the hydration-mismatch overlay no longer appears. Before, a React island edit left the browser on the old island bundle (every reload then failed hydration), and a Svelte or Vue island edit changed nothing at all. Editing the React page that hosts the islands, or a component it imports, also updates in place again; before, the update could leave lifeless copies of the islands on screen. This covers islands rendered by React and HTML pages, and the island registry may live outside your framework directories (for example `src/islands/`). Angular islands, and edits to the registry file itself, still reload the page.",
|
|
24
|
+
"kind": "fixed",
|
|
25
|
+
"summary": "Island pages get HMR in dev: island edits swap in place without a reload"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"detail": "When your app has no `onError` of its own, a route that throws was only logged for page and HTMX requests, and only when the project had an HTML or HTMX `error.html`. The same route called with `fetch` or `curl` (`Accept: */*`) or asking for JSON returned Elysia's generic 500 and wrote nothing to the log, in development and production, so a mistyped `asset()` key in an API route failed silently. Every unhandled route error is now logged once on the server, with the method, path and stack, whatever the request accepts. Responses are unchanged: the error details stay out of the response body, 404s and thrown `status(...)` responses are not logged, and an app that registers its own `onError` still handles (and logs) errors itself.",
|
|
29
|
+
"kind": "fixed",
|
|
30
|
+
"summary": "Errors thrown by routes are logged for API and fetch requests too, not only page requests"
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
"detail": "A React Server Components page whose file name already ends in RSC got the suffix twice: `pages/HomeRSC.tsx` was `asset(manifest, 'HomeRSCRSC')`, so the natural `'HomeRSC'` was missing from the manifest and the route failed only at request time. Such a page is now `asset(manifest, 'HomeRSC')`. The doubled key still works as a deprecated alias for the same bundle and prints a one-time warning in dev naming the new key. If `pages/Home.tsx` and `pages/HomeRSC.tsx` both exist, `Home.tsx` keeps `HomeRSC` (its key is unchanged), `HomeRSC.tsx` stays at `HomeRSCRSC`, and the build warns about the clash.",
|
|
34
|
+
"kind": "fixed",
|
|
35
|
+
"summary": "React Server Components pages named `*RSC.tsx` no longer get a doubled `RSCRSC` manifest key",
|
|
36
|
+
"symbols": [
|
|
37
|
+
"asset",
|
|
38
|
+
"BaseBuildConfig"
|
|
39
|
+
]
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
"detail": "Importing anything from `@absolutejs/absolute/react/components` (for example `SuspenseSlot`) in a React Server Component crashed the page with `TypeError: createContext is not a function`, because the entry also defines `Link`'s context and React's server build has no `createContext`. A server component that imports the entry now gets a server components version of it: `SuspenseSlot`, `StreamSlot`, `Head`, `Image` and `JsonLd` render on the server as before, and `Link` and `usePrefetch` come from a \"use client\" module, so a server component can render `<Link>` and it hydrates as a client component. Wrapping these in your own 'use client' file is no longer needed. As with any client component, `<Link>` props passed from a server component must be serializable (no event handlers).",
|
|
43
|
+
"kind": "fixed",
|
|
44
|
+
"summary": "`@absolutejs/absolute/react/components` can be imported from React Server Components",
|
|
45
|
+
"symbols": [
|
|
46
|
+
"SuspenseSlot",
|
|
47
|
+
"StreamSlot",
|
|
48
|
+
"Link"
|
|
49
|
+
]
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"detail": "The HTML and HTMX `error.html`, `not-found.html` and `loading.html` pages were copied into the build as written, so a stylesheet or script linked relative to the source (such as `../../styles/indexes/site.css`) returned 404 and the error page showed unstyled. These pages now get the same hashed asset URLs (and font tags) as your other HTML and HTMX pages.",
|
|
53
|
+
"kind": "fixed",
|
|
54
|
+
"summary": "HTML and HTMX error and not-found pages load their stylesheets in production"
|
|
55
|
+
},
|
|
56
|
+
{
|
|
57
|
+
"detail": "Editing only the `<style>` block of a Svelte component in dev hot-updated the component, but the page kept the old styles until a full reload: the browser reused the component's previously loaded stylesheet module. Each version of a component's styles now gets its own URL, so style edits apply immediately.",
|
|
58
|
+
"kind": "fixed",
|
|
59
|
+
"summary": "Svelte component style edits now apply in dev without a reload"
|
|
60
|
+
}
|
|
61
|
+
],
|
|
62
|
+
"date": "2026-11-14",
|
|
63
|
+
"version": "0.20.0-beta.175"
|
|
64
|
+
},
|
|
65
|
+
{
|
|
66
|
+
"changes": [
|
|
67
|
+
{
|
|
68
|
+
"detail": "Importing `@absolutejs/absolute` (and its `build`, `angular`, `angular/server` and `mobile` entry points) loaded the `typescript` package straight away, which takes a few hundred milliseconds of CPU, even though a running server never needs it. TypeScript now loads the first time the framework actually uses it (route scanning, island registries, Angular compilation, config editing), so servers start faster. Nothing you call changed, and those functions stay synchronous.",
|
|
69
|
+
"kind": "changed",
|
|
70
|
+
"summary": "Servers start faster: the framework no longer loads TypeScript at import"
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"date": "2026-11-14",
|
|
74
|
+
"version": "0.20.0-beta.174"
|
|
75
|
+
},
|
|
5
76
|
{
|
|
6
77
|
"changes": [
|
|
7
78
|
{
|
package/dist/angular/browser.js
CHANGED
|
@@ -9599,6 +9599,8 @@ var isMatchingIslandElement = (element, props) => {
|
|
|
9599
9599
|
const attributes = getIslandMarkerAttributes(props);
|
|
9600
9600
|
return element.dataset.island === "true" && element.dataset.component === attributes["data-component"] && element.dataset.framework === attributes["data-framework"] && (element.dataset.hydrate ?? "load") === attributes["data-hydrate"] && (element.dataset.props ?? "{}") === attributes["data-props"];
|
|
9601
9601
|
};
|
|
9602
|
+
var RUNTIME_ISLAND_ATTRIBUTES = new Set(["data-error", "data-hydrated"]);
|
|
9603
|
+
var readMarkerAttributes = (element) => Object.fromEntries(element.getAttributeNames().filter((name) => !RUNTIME_ISLAND_ATTRIBUTES.has(name)).map((name) => [name, element.getAttribute(name) ?? ""]));
|
|
9602
9604
|
var preserveIslandMarkup = (props) => {
|
|
9603
9605
|
if (typeof document === "undefined") {
|
|
9604
9606
|
return {
|
|
@@ -9620,10 +9622,19 @@ var preserveIslandMarkup = (props) => {
|
|
|
9620
9622
|
};
|
|
9621
9623
|
}
|
|
9622
9624
|
return {
|
|
9623
|
-
attributes:
|
|
9625
|
+
attributes: readMarkerAttributes(liveCandidate),
|
|
9624
9626
|
innerHTML: liveCandidate.innerHTML
|
|
9625
9627
|
};
|
|
9626
9628
|
};
|
|
9629
|
+
var innerHtmlObjects = new Map;
|
|
9630
|
+
var getStableInnerHtml = (html) => {
|
|
9631
|
+
const existing = innerHtmlObjects.get(html);
|
|
9632
|
+
if (existing)
|
|
9633
|
+
return existing;
|
|
9634
|
+
const created = { __html: html };
|
|
9635
|
+
innerHtmlObjects.set(html, created);
|
|
9636
|
+
return created;
|
|
9637
|
+
};
|
|
9627
9638
|
|
|
9628
9639
|
// src/angular/Island.browser.ts
|
|
9629
9640
|
init_islandMarkupAttributes();
|
|
@@ -10357,5 +10368,5 @@ export {
|
|
|
10357
10368
|
withPendingTask
|
|
10358
10369
|
};
|
|
10359
10370
|
|
|
10360
|
-
//# debugId=
|
|
10371
|
+
//# debugId=A24A0224D61EBADD64756E2164756E21
|
|
10361
10372
|
//# sourceMappingURL=browser.js.map
|