adjacent-next 0.1.0
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 +15 -0
- package/LICENSE +21 -0
- package/README.md +42 -0
- package/dist/app-router-bridges.d.ts +11 -0
- package/dist/app-router-bridges.d.ts.map +1 -0
- package/dist/app-router-bridges.js +38 -0
- package/dist/app-router-bridges.js.map +1 -0
- package/dist/base-path.d.ts +27 -0
- package/dist/base-path.d.ts.map +1 -0
- package/dist/base-path.js +112 -0
- package/dist/base-path.js.map +1 -0
- package/dist/create-adjacent.d.ts +22 -0
- package/dist/create-adjacent.d.ts.map +1 -0
- package/dist/create-adjacent.js +31 -0
- package/dist/create-adjacent.js.map +1 -0
- package/dist/dev-channel-client.d.ts +6 -0
- package/dist/dev-channel-client.d.ts.map +1 -0
- package/dist/dev-channel-client.js +68 -0
- package/dist/dev-channel-client.js.map +1 -0
- package/dist/dev-channel.d.ts +7 -0
- package/dist/dev-channel.d.ts.map +1 -0
- package/dist/dev-channel.js +8 -0
- package/dist/dev-channel.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/proxy.d.ts +7 -0
- package/dist/proxy.d.ts.map +1 -0
- package/dist/proxy.js +13 -0
- package/dist/proxy.js.map +1 -0
- package/dist/service-worker-registration.d.ts +6 -0
- package/dist/service-worker-registration.d.ts.map +1 -0
- package/dist/service-worker-registration.js +35 -0
- package/dist/service-worker-registration.js.map +1 -0
- package/dist/service-worker.d.ts +23 -0
- package/dist/service-worker.d.ts.map +1 -0
- package/dist/service-worker.js +393 -0
- package/dist/service-worker.js.map +1 -0
- package/dist/with-adjacent-layout.d.ts +10 -0
- package/dist/with-adjacent-layout.d.ts.map +1 -0
- package/dist/with-adjacent-layout.js +11 -0
- package/dist/with-adjacent-layout.js.map +1 -0
- package/dist/with-adjacent.d.ts +17 -0
- package/dist/with-adjacent.d.ts.map +1 -0
- package/dist/with-adjacent.js +139 -0
- package/dist/with-adjacent.js.map +1 -0
- package/package.json +72 -0
package/CHANGELOG.md
ADDED
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Eric Kweyunga
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# adjacent-next
|
|
2
|
+
|
|
3
|
+
Next.js App Router integration for Adjacent: metadata, manifest, service worker, and development wiring.
|
|
4
|
+
|
|
5
|
+
## Documentation
|
|
6
|
+
|
|
7
|
+
- [Next.js integration](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/nextjs.md)
|
|
8
|
+
- [Request proxy](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/proxy.md)
|
|
9
|
+
- [Conventional assets](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/assets.md)
|
|
10
|
+
- [All the documentation](https://github.com/erickweyunga/adjacent-framework/blob/main/docs/README.md)
|
|
11
|
+
|
|
12
|
+
## Installation
|
|
13
|
+
|
|
14
|
+
```bash
|
|
15
|
+
npm install adjacent-next
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
Most projects get this through the CLI instead, which installs and wires it up:
|
|
19
|
+
|
|
20
|
+
```bash
|
|
21
|
+
npx adjacent-cli init
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
`withAdjacent()` wraps `next.config.ts`, `createAdjacent()` derives the
|
|
25
|
+
metadata and manifest, and `withAdjacentLayout()` injects the browser runtime
|
|
26
|
+
into a root layout that stays ordinary JSX. Bridge helpers cover the files Next
|
|
27
|
+
requires to physically exist: `app/manifest.ts` and `app/sw.js/route.ts`.
|
|
28
|
+
|
|
29
|
+
## Issues
|
|
30
|
+
|
|
31
|
+
If you hit a problem using this package, please
|
|
32
|
+
[report it here](https://github.com/erickweyunga/adjacent-framework/issues/new).
|
|
33
|
+
|
|
34
|
+
## Contributing
|
|
35
|
+
|
|
36
|
+
Issues and pull requests are welcome. Please read the
|
|
37
|
+
[contributing guide](https://github.com/erickweyunga/adjacent-framework/blob/main/CONTRIBUTING.md)
|
|
38
|
+
first.
|
|
39
|
+
|
|
40
|
+
## License
|
|
41
|
+
|
|
42
|
+
MIT
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type AdjacentConfig, type AdjacentConfigExport } from "adjacent-core";
|
|
2
|
+
import type { MetadataRoute } from "next";
|
|
3
|
+
import type { CreateAdjacentOptions } from "./create-adjacent.js";
|
|
4
|
+
export declare function resolveNextConfig(config: AdjacentConfigExport, options?: CreateAdjacentOptions): AdjacentConfig | Promise<AdjacentConfig>;
|
|
5
|
+
export type AdjacentManifest = () => MetadataRoute.Manifest | Promise<MetadataRoute.Manifest>;
|
|
6
|
+
export interface AdjacentServiceWorkerBridge {
|
|
7
|
+
readonly GET: () => Response | Promise<Response>;
|
|
8
|
+
}
|
|
9
|
+
export declare function createAdjacentManifest(config: AdjacentConfigExport, options?: CreateAdjacentOptions): AdjacentManifest;
|
|
10
|
+
export declare function createAdjacentServiceWorker(config: AdjacentConfigExport, options?: CreateAdjacentOptions): AdjacentServiceWorkerBridge;
|
|
11
|
+
//# sourceMappingURL=app-router-bridges.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-router-bridges.d.ts","sourceRoot":"","sources":["../src/app-router-bridges.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,cAAc,EACnB,KAAK,oBAAoB,EAE1B,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,MAAM,CAAC;AAG1C,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAmBlE,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAI1C;AAED,MAAM,MAAM,gBAAgB,GAAG,MAC3B,aAAa,CAAC,QAAQ,GACtB,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;AAEpC,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,GAAG,EAAE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;CAClD;AAED,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,gBAAgB,CAOlB;AAED,wBAAgB,2BAA2B,CACzC,MAAM,EAAE,oBAAoB,EAC5B,OAAO,GAAE,qBAA0B,GAClC,2BAA2B,CAS7B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { parseConfig, resolveConfig, resolveManifest, } from "adjacent-core";
|
|
2
|
+
import { applyBasePathToManifest } from "./base-path.js";
|
|
3
|
+
import { createServiceWorkerRoute } from "./service-worker.js";
|
|
4
|
+
function inferConfigContext(options) {
|
|
5
|
+
const mode = options.mode ?? (process.env.NODE_ENV === "test"
|
|
6
|
+
? "test"
|
|
7
|
+
: process.env.NODE_ENV === "production"
|
|
8
|
+
? "production"
|
|
9
|
+
: "development");
|
|
10
|
+
return {
|
|
11
|
+
command: options.command ?? (mode === "development" ? "dev" : "build"),
|
|
12
|
+
mode,
|
|
13
|
+
projectRoot: options.projectRoot ?? process.cwd(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
export function resolveNextConfig(config, options = {}) {
|
|
17
|
+
return typeof config === "function"
|
|
18
|
+
? resolveConfig(config, inferConfigContext(options))
|
|
19
|
+
: parseConfig(config);
|
|
20
|
+
}
|
|
21
|
+
export function createAdjacentManifest(config, options = {}) {
|
|
22
|
+
return () => {
|
|
23
|
+
const resolved = resolveNextConfig(config, options);
|
|
24
|
+
const build = (value) => applyBasePathToManifest(resolveManifest(value));
|
|
25
|
+
return resolved instanceof Promise ? resolved.then(build) : build(resolved);
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
export function createAdjacentServiceWorker(config, options = {}) {
|
|
29
|
+
return {
|
|
30
|
+
GET() {
|
|
31
|
+
const resolved = resolveNextConfig(config, options);
|
|
32
|
+
return resolved instanceof Promise
|
|
33
|
+
? resolved.then((value) => createServiceWorkerRoute(value).GET())
|
|
34
|
+
: createServiceWorkerRoute(resolved).GET();
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=app-router-bridges.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"app-router-bridges.js","sourceRoot":"","sources":["../src/app-router-bridges.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,aAAa,EACb,eAAe,GAIhB,MAAM,eAAe,CAAC;AAGvB,OAAO,EAAE,uBAAuB,EAAE,MAAM,gBAAgB,CAAC;AAEzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAE/D,SAAS,kBAAkB,CAAC,OAA8B;IACxD,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAC3B,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,MAAM;QAC7B,CAAC,CAAC,MAAM;QACR,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,KAAK,YAAY;YACrC,CAAC,CAAC,YAAY;YACd,CAAC,CAAC,aAAa,CACpB,CAAC;IAEF,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,IAAI,KAAK,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QACtE,IAAI;QACJ,WAAW,EAAE,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,EAAE;KAClD,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,iBAAiB,CAC/B,MAA4B,EAC5B,UAAiC,EAAE;IAEnC,OAAO,OAAO,MAAM,KAAK,UAAU;QACjC,CAAC,CAAC,aAAa,CAAC,MAAM,EAAE,kBAAkB,CAAC,OAAO,CAAC,CAAC;QACpD,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC1B,CAAC;AAUD,MAAM,UAAU,sBAAsB,CACpC,MAA4B,EAC5B,UAAiC,EAAE;IAEnC,OAAO,GAAG,EAAE;QACV,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QACpD,MAAM,KAAK,GAAG,CAAC,KAAqB,EAA0B,EAAE,CAC9D,uBAAuB,CAAC,eAAe,CAAC,KAAK,CAAC,CAA2B,CAAC;QAC5E,OAAO,QAAQ,YAAY,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAC9E,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CACzC,MAA4B,EAC5B,UAAiC,EAAE;IAEnC,OAAO;QACL,GAAG;YACD,MAAM,QAAQ,GAAG,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACpD,OAAO,QAAQ,YAAY,OAAO;gBAChC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,wBAAwB,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC;gBACjE,CAAC,CAAC,wBAAwB,CAAC,QAAQ,CAAC,CAAC,GAAG,EAAE,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/** The name the base path travels under, in Next's `env` and in the worker. */
|
|
2
|
+
export declare const BASE_PATH_ENV = "ADJACENT_BASE_PATH";
|
|
3
|
+
/**
|
|
4
|
+
* Where the application is served from, as a prefix to put in front of a
|
|
5
|
+
* root-relative path. Empty at the origin root, which is most applications.
|
|
6
|
+
*
|
|
7
|
+
* Read from Next's `env`, which `withAdjacent()` writes at build time, because
|
|
8
|
+
* `next.config.ts` is the only place that knows the base path and none of this
|
|
9
|
+
* code can reach it.
|
|
10
|
+
*/
|
|
11
|
+
export declare function basePath(): string;
|
|
12
|
+
export declare function normaliseBasePath(value: string | undefined): string;
|
|
13
|
+
/**
|
|
14
|
+
* Prefixes a root-relative path. An absolute URL and a relative path are both
|
|
15
|
+
* left alone: one already says where it is, and the other is resolved against
|
|
16
|
+
* whatever is asking.
|
|
17
|
+
*/
|
|
18
|
+
export declare function withBasePath(path: string, base?: string): string;
|
|
19
|
+
/**
|
|
20
|
+
* Moves every root-relative URL in a resolved manifest under the base path.
|
|
21
|
+
*
|
|
22
|
+
* Enumerated rather than walked, because one member that looks like a URL is
|
|
23
|
+
* not one: `share_target.params.url` names a query parameter, and prefixing it
|
|
24
|
+
* would break sharing while looking exactly like the fix.
|
|
25
|
+
*/
|
|
26
|
+
export declare function applyBasePathToManifest<T extends Record<string, unknown>>(manifest: T, base?: string): T;
|
|
27
|
+
//# sourceMappingURL=base-path.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-path.d.ts","sourceRoot":"","sources":["../src/base-path.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,eAAO,MAAM,aAAa,uBAAuB,CAAC;AAElD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAInE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAa,GAAG,MAAM,CAGpE;AAcD;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACvE,QAAQ,EAAE,CAAC,EACX,IAAI,SAAa,GAChB,CAAC,CA4EH"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/** The name the base path travels under, in Next's `env` and in the worker. */
|
|
2
|
+
export const BASE_PATH_ENV = "ADJACENT_BASE_PATH";
|
|
3
|
+
/**
|
|
4
|
+
* Where the application is served from, as a prefix to put in front of a
|
|
5
|
+
* root-relative path. Empty at the origin root, which is most applications.
|
|
6
|
+
*
|
|
7
|
+
* Read from Next's `env`, which `withAdjacent()` writes at build time, because
|
|
8
|
+
* `next.config.ts` is the only place that knows the base path and none of this
|
|
9
|
+
* code can reach it.
|
|
10
|
+
*/
|
|
11
|
+
export function basePath() {
|
|
12
|
+
return normaliseBasePath(process.env[BASE_PATH_ENV]);
|
|
13
|
+
}
|
|
14
|
+
export function normaliseBasePath(value) {
|
|
15
|
+
if (!value || value === "/")
|
|
16
|
+
return "";
|
|
17
|
+
const withLeading = value.startsWith("/") ? value : `/${value}`;
|
|
18
|
+
return withLeading.replace(/\/+$/, "");
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Prefixes a root-relative path. An absolute URL and a relative path are both
|
|
22
|
+
* left alone: one already says where it is, and the other is resolved against
|
|
23
|
+
* whatever is asking.
|
|
24
|
+
*/
|
|
25
|
+
export function withBasePath(path, base = basePath()) {
|
|
26
|
+
if (base === "" || !path.startsWith("/"))
|
|
27
|
+
return path;
|
|
28
|
+
return `${base}${path}`;
|
|
29
|
+
}
|
|
30
|
+
function images(value, base) {
|
|
31
|
+
if (!Array.isArray(value))
|
|
32
|
+
return value;
|
|
33
|
+
return value.map((image) => typeof image?.src === "string" ? { ...image, src: withBasePath(image.src, base) } : image);
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Moves every root-relative URL in a resolved manifest under the base path.
|
|
37
|
+
*
|
|
38
|
+
* Enumerated rather than walked, because one member that looks like a URL is
|
|
39
|
+
* not one: `share_target.params.url` names a query parameter, and prefixing it
|
|
40
|
+
* would break sharing while looking exactly like the fix.
|
|
41
|
+
*/
|
|
42
|
+
export function applyBasePathToManifest(manifest, base = basePath()) {
|
|
43
|
+
if (base === "")
|
|
44
|
+
return manifest;
|
|
45
|
+
const path = (value) => typeof value === "string" ? withBasePath(value, base) : value;
|
|
46
|
+
const nested = (value, map) => Array.isArray(value) ? value.map((entry) => map(entry)) : value;
|
|
47
|
+
return {
|
|
48
|
+
...manifest,
|
|
49
|
+
...(manifest["file_handlers"] === undefined
|
|
50
|
+
? null
|
|
51
|
+
: {
|
|
52
|
+
file_handlers: nested(manifest["file_handlers"], (handler) => ({
|
|
53
|
+
...handler,
|
|
54
|
+
action: path(handler["action"]),
|
|
55
|
+
icons: images(handler["icons"], base),
|
|
56
|
+
})),
|
|
57
|
+
}),
|
|
58
|
+
...(manifest["icons"] === undefined ? null : { icons: images(manifest["icons"], base) }),
|
|
59
|
+
...(manifest["id"] === undefined ? null : { id: path(manifest["id"]) }),
|
|
60
|
+
...(manifest["note_taking"] === undefined
|
|
61
|
+
? null
|
|
62
|
+
: {
|
|
63
|
+
note_taking: {
|
|
64
|
+
...manifest["note_taking"],
|
|
65
|
+
new_note_url: path(manifest["note_taking"]["new_note_url"]),
|
|
66
|
+
},
|
|
67
|
+
}),
|
|
68
|
+
...(manifest["protocol_handlers"] === undefined
|
|
69
|
+
? null
|
|
70
|
+
: {
|
|
71
|
+
protocol_handlers: nested(manifest["protocol_handlers"], (handler) => ({ ...handler, url: path(handler["url"]) })),
|
|
72
|
+
}),
|
|
73
|
+
...(manifest["scope"] === undefined ? null : { scope: path(manifest["scope"]) }),
|
|
74
|
+
...(manifest["screenshots"] === undefined
|
|
75
|
+
? null
|
|
76
|
+
: { screenshots: images(manifest["screenshots"], base) }),
|
|
77
|
+
...(manifest["share_target"] === undefined
|
|
78
|
+
? null
|
|
79
|
+
: {
|
|
80
|
+
// `action` only. `params` names query parameters, not URLs.
|
|
81
|
+
share_target: {
|
|
82
|
+
...manifest["share_target"],
|
|
83
|
+
action: path(manifest["share_target"]["action"]),
|
|
84
|
+
},
|
|
85
|
+
}),
|
|
86
|
+
...(manifest["shortcuts"] === undefined
|
|
87
|
+
? null
|
|
88
|
+
: {
|
|
89
|
+
shortcuts: nested(manifest["shortcuts"], (shortcut) => ({
|
|
90
|
+
...shortcut,
|
|
91
|
+
icons: images(shortcut["icons"], base),
|
|
92
|
+
url: path(shortcut["url"]),
|
|
93
|
+
})),
|
|
94
|
+
}),
|
|
95
|
+
...(manifest["start_url"] === undefined
|
|
96
|
+
? null
|
|
97
|
+
: { start_url: path(manifest["start_url"]) }),
|
|
98
|
+
...(manifest["widgets"] === undefined
|
|
99
|
+
? null
|
|
100
|
+
: {
|
|
101
|
+
widgets: nested(manifest["widgets"], (widget) => ({
|
|
102
|
+
...widget,
|
|
103
|
+
backgrounds: images(widget["backgrounds"], base),
|
|
104
|
+
data: path(widget["data"]),
|
|
105
|
+
icons: images(widget["icons"], base),
|
|
106
|
+
ms_ac_template: path(widget["ms_ac_template"]),
|
|
107
|
+
screenshots: images(widget["screenshots"], base),
|
|
108
|
+
})),
|
|
109
|
+
}),
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=base-path.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base-path.js","sourceRoot":"","sources":["../src/base-path.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { type AdjacentConfig, type AdjacentConfigFactory, type ConfigContext } from "adjacent-core";
|
|
2
|
+
import type { Metadata, MetadataRoute, Viewport } from "next";
|
|
3
|
+
import { type ReactNode } from "react";
|
|
4
|
+
import { type AdjacentServiceWorkerRoute } from "./service-worker.js";
|
|
5
|
+
export interface AdjacentNextApp {
|
|
6
|
+
readonly devChannel: ReactNode;
|
|
7
|
+
readonly manifest: () => MetadataRoute.Manifest;
|
|
8
|
+
readonly metadata: Metadata;
|
|
9
|
+
readonly serviceWorker: AdjacentServiceWorkerRoute;
|
|
10
|
+
readonly serviceWorkerRegistration: ReactNode;
|
|
11
|
+
readonly viewport: Viewport;
|
|
12
|
+
}
|
|
13
|
+
export interface CreateAdjacentOptions {
|
|
14
|
+
readonly command?: ConfigContext["command"];
|
|
15
|
+
readonly metadata?: Metadata;
|
|
16
|
+
readonly mode?: ConfigContext["mode"];
|
|
17
|
+
readonly projectRoot?: string;
|
|
18
|
+
}
|
|
19
|
+
/** Creates the complete Next.js App Router integration for an Adjacent app. */
|
|
20
|
+
export declare function createAdjacent(config: AdjacentConfig, options?: CreateAdjacentOptions): AdjacentNextApp;
|
|
21
|
+
export declare function createAdjacent(config: AdjacentConfigFactory, options?: CreateAdjacentOptions): Promise<AdjacentNextApp>;
|
|
22
|
+
//# sourceMappingURL=create-adjacent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-adjacent.d.ts","sourceRoot":"","sources":["../src/create-adjacent.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,KAAK,cAAc,EAEnB,KAAK,qBAAqB,EAC1B,KAAK,aAAa,EACnB,MAAM,eAAe,CAAC;AACvB,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,MAAM,MAAM,CAAC;AAC9D,OAAO,EAAiB,KAAK,SAAS,EAAE,MAAM,OAAO,CAAC;AAItD,OAAO,EAAmD,KAAK,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AAGvH,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC;IAC/B,QAAQ,CAAC,QAAQ,EAAE,MAAM,aAAa,CAAC,QAAQ,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC5B,QAAQ,CAAC,aAAa,EAAE,0BAA0B,CAAC;IACnD,QAAQ,CAAC,yBAAyB,EAAE,SAAS,CAAC;IAC9C,QAAQ,CAAC,QAAQ,EAAE,QAAQ,CAAC;CAC7B;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,CAAC,EAAE,aAAa,CAAC,SAAS,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACtC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;CAC/B;AAwBD,+EAA+E;AAC/E,wBAAgB,cAAc,CAC5B,MAAM,EAAE,cAAc,EACtB,OAAO,CAAC,EAAE,qBAAqB,GAC9B,eAAe,CAAC;AACnB,wBAAgB,cAAc,CAC5B,MAAM,EAAE,qBAAqB,EAC7B,OAAO,CAAC,EAAE,qBAAqB,GAC9B,OAAO,CAAC,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { parseConfig, resolveManifest, resolveMetadata, resolveViewport, } from "adjacent-core";
|
|
2
|
+
import { createElement } from "react";
|
|
3
|
+
import { resolveNextConfig } from "./app-router-bridges.js";
|
|
4
|
+
import { DevChannel } from "./dev-channel-client.js";
|
|
5
|
+
import { resolveDevChannel } from "./dev-channel.js";
|
|
6
|
+
import { createServiceWorkerRoute, resolveOfflineRuntime } from "./service-worker.js";
|
|
7
|
+
import { ServiceWorkerRegistration } from "./service-worker-registration.js";
|
|
8
|
+
function createResolvedAdjacent(config, options = {}) {
|
|
9
|
+
const manifest = resolveManifest(config);
|
|
10
|
+
const offline = resolveOfflineRuntime(config.offline);
|
|
11
|
+
const development = (options.mode ?? process.env.NODE_ENV) === "development";
|
|
12
|
+
return {
|
|
13
|
+
devChannel: createElement(DevChannel, {
|
|
14
|
+
enabled: resolveDevChannel().enabled,
|
|
15
|
+
}),
|
|
16
|
+
manifest: () => manifest,
|
|
17
|
+
metadata: { ...resolveMetadata(config), ...options.metadata },
|
|
18
|
+
serviceWorker: createServiceWorkerRoute(config),
|
|
19
|
+
serviceWorkerRegistration: createElement(ServiceWorkerRegistration, {
|
|
20
|
+
enabled: offline.enabled && !development,
|
|
21
|
+
}),
|
|
22
|
+
viewport: resolveViewport(config),
|
|
23
|
+
};
|
|
24
|
+
}
|
|
25
|
+
export function createAdjacent(config, options = {}) {
|
|
26
|
+
if (typeof config === "function") {
|
|
27
|
+
return Promise.resolve(resolveNextConfig(config, options)).then((resolved) => createResolvedAdjacent(resolved, options));
|
|
28
|
+
}
|
|
29
|
+
return createResolvedAdjacent(parseConfig(config), options);
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=create-adjacent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-adjacent.js","sourceRoot":"","sources":["../src/create-adjacent.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,eAAe,GAKhB,MAAM,eAAe,CAAC;AAEvB,OAAO,EAAE,aAAa,EAAkB,MAAM,OAAO,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,wBAAwB,EAAE,qBAAqB,EAAmC,MAAM,qBAAqB,CAAC;AACvH,OAAO,EAAE,yBAAyB,EAAE,MAAM,kCAAkC,CAAC;AAkB7E,SAAS,sBAAsB,CAC7B,MAAsB,EACtB,UAAiC,EAAE;IAEnC,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAA2B,CAAC;IACnE,MAAM,OAAO,GAAG,qBAAqB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtD,MAAM,WAAW,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,aAAa,CAAC;IAE7E,OAAO;QACL,UAAU,EAAE,aAAa,CAAC,UAAU,EAAE;YACpC,OAAO,EAAE,iBAAiB,EAAE,CAAC,OAAO;SACrC,CAAC;QACF,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;QACxB,QAAQ,EAAE,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,EAAE,GAAG,OAAO,CAAC,QAAQ,EAAE;QAC7D,aAAa,EAAE,wBAAwB,CAAC,MAAM,CAAC;QAC/C,yBAAyB,EAAE,aAAa,CAAC,yBAAyB,EAAE;YAClE,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,WAAW;SACzC,CAAC;QACF,QAAQ,EAAE,eAAe,CAAC,MAAM,CAAC;KAClC,CAAC;AACJ,CAAC;AAWD,MAAM,UAAU,cAAc,CAC5B,MAA4B,EAC5B,UAAiC,EAAE;IAEnC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;QACjC,OAAO,OAAO,CAAC,OAAO,CAAC,iBAAiB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,CAC3E,sBAAsB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAC1C,CAAC;IACJ,CAAC;IACD,OAAO,sBAAsB,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-channel-client.d.ts","sourceRoot":"","sources":["../src/dev-channel-client.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;CACxB;AAyDD,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,IAAuB,GACxB,EAAE,eAAe,GAAG,IAAI,CAUxB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { DEV_COMMAND, safeParseDevCommand } from "adjacent-core";
|
|
3
|
+
import { useEffect } from "react";
|
|
4
|
+
import { DEV_CHANNEL_PATH } from "./dev-channel.js";
|
|
5
|
+
const RETRY_DELAY_MS = 1_000;
|
|
6
|
+
function delay(milliseconds, signal) {
|
|
7
|
+
return new Promise((resolve) => {
|
|
8
|
+
const timer = setTimeout(resolve, milliseconds);
|
|
9
|
+
signal.addEventListener("abort", () => {
|
|
10
|
+
clearTimeout(timer);
|
|
11
|
+
resolve();
|
|
12
|
+
}, { once: true });
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
async function clearAdjacentRuntime() {
|
|
16
|
+
if ("serviceWorker" in navigator) {
|
|
17
|
+
const registrations = await navigator.serviceWorker.getRegistrations();
|
|
18
|
+
await Promise.all(registrations.map((registration) => registration.unregister()));
|
|
19
|
+
}
|
|
20
|
+
if (!("caches" in window))
|
|
21
|
+
return;
|
|
22
|
+
const names = await caches.keys();
|
|
23
|
+
await Promise.all(names
|
|
24
|
+
.filter((name) => name.startsWith("adjacent-"))
|
|
25
|
+
.map((name) => caches.delete(name)));
|
|
26
|
+
}
|
|
27
|
+
async function execute(command) {
|
|
28
|
+
if (command.type === DEV_COMMAND.navigate) {
|
|
29
|
+
location.assign(command.path);
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
if (command.type === DEV_COMMAND.clearCache) {
|
|
33
|
+
await clearAdjacentRuntime();
|
|
34
|
+
}
|
|
35
|
+
location.reload();
|
|
36
|
+
}
|
|
37
|
+
async function listen(path, signal) {
|
|
38
|
+
while (!signal.aborted) {
|
|
39
|
+
try {
|
|
40
|
+
const response = await fetch(path, { cache: "no-store", signal });
|
|
41
|
+
if (response.status === 204)
|
|
42
|
+
continue;
|
|
43
|
+
if (!response.ok) {
|
|
44
|
+
await delay(RETRY_DELAY_MS, signal);
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
const command = safeParseDevCommand(await response.json());
|
|
48
|
+
if (command)
|
|
49
|
+
await execute(command);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
if (signal.aborted)
|
|
53
|
+
return;
|
|
54
|
+
await delay(RETRY_DELAY_MS, signal);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
export function DevChannel({ enabled, path = DEV_CHANNEL_PATH, }) {
|
|
59
|
+
useEffect(() => {
|
|
60
|
+
if (!enabled)
|
|
61
|
+
return;
|
|
62
|
+
const controller = new AbortController();
|
|
63
|
+
void listen(path, controller.signal);
|
|
64
|
+
return () => controller.abort();
|
|
65
|
+
}, [enabled, path]);
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=dev-channel-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-channel-client.js","sourceRoot":"","sources":["../src/dev-channel-client.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAA2B,MAAM,eAAe,CAAC;AAC1F,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAOpD,MAAM,cAAc,GAAG,KAAK,CAAC;AAE7B,SAAS,KAAK,CAAC,YAAoB,EAAE,MAAmB;IACtD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAChD,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,GAAG,EAAE;YACpC,YAAY,CAAC,KAAK,CAAC,CAAC;YACpB,OAAO,EAAE,CAAC;QACZ,CAAC,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACrB,CAAC,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,oBAAoB;IACjC,IAAI,eAAe,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,aAAa,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC;QACvE,MAAM,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;IACpF,CAAC;IACD,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC;QAAE,OAAO;IAClC,MAAM,KAAK,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;IAClC,MAAM,OAAO,CAAC,GAAG,CACf,KAAK;SACF,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;SAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACtC,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAA2B;IAChD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,QAAQ,EAAE,CAAC;QAC1C,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC9B,OAAO;IACT,CAAC;IACD,IAAI,OAAO,CAAC,IAAI,KAAK,WAAW,CAAC,UAAU,EAAE,CAAC;QAC5C,MAAM,oBAAoB,EAAE,CAAC;IAC/B,CAAC;IACD,QAAQ,CAAC,MAAM,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,MAAmB;IACrD,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACvB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG;gBAAE,SAAS;YACtC,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,MAAM,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;gBACpC,SAAS;YACX,CAAC;YACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YAC3D,IAAI,OAAO;gBAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,MAAM,CAAC,OAAO;gBAAE,OAAO;YAC3B,MAAM,KAAK,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,EACzB,OAAO,EACP,IAAI,GAAG,gBAAgB,GACP;IAChB,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAC;QACzC,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,MAAM,CAAC,CAAC;QACrC,OAAO,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC,EAAE,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAEpB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare const DEV_CHANNEL_PATH = "/_adjacent/dev";
|
|
2
|
+
export interface ResolvedDevChannel {
|
|
3
|
+
readonly enabled: boolean;
|
|
4
|
+
readonly url?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function resolveDevChannel(channelUrl?: string | undefined, nodeEnvironment?: "development" | "production" | "test"): ResolvedDevChannel;
|
|
7
|
+
//# sourceMappingURL=dev-channel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-channel.d.ts","sourceRoot":"","sources":["../src/dev-channel.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,mBAAmB,CAAC;AAEjD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,iBAAiB,CAC/B,UAAU,qBAAuC,EACjD,eAAe,wCAAuB,GACrC,kBAAkB,CAKpB"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export const DEV_CHANNEL_PATH = "/_adjacent/dev";
|
|
2
|
+
export function resolveDevChannel(channelUrl = process.env.ADJACENT_DEV_CHANNEL_URL, nodeEnvironment = process.env.NODE_ENV) {
|
|
3
|
+
if (nodeEnvironment !== "development" || !channelUrl) {
|
|
4
|
+
return { enabled: false };
|
|
5
|
+
}
|
|
6
|
+
return { enabled: true, url: channelUrl };
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=dev-channel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dev-channel.js","sourceRoot":"","sources":["../src/dev-channel.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAAG,gBAAgB,CAAC;AAOjD,MAAM,UAAU,iBAAiB,CAC/B,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,wBAAwB,EACjD,eAAe,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ;IAEtC,IAAI,eAAe,KAAK,aAAa,IAAI,CAAC,UAAU,EAAE,CAAC;QACrD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;IAC5B,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,EAAE,CAAC;AAC5C,CAAC"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createAdjacent, type AdjacentNextApp, type CreateAdjacentOptions, } from "./create-adjacent.js";
|
|
2
|
+
export { withAdjacentLayout, type AdjacentLayoutProps, type AdjacentLayoutRuntime, } from "./with-adjacent-layout.js";
|
|
3
|
+
export { createAdjacentManifest, createAdjacentServiceWorker, resolveNextConfig, type AdjacentManifest, type AdjacentServiceWorkerBridge, } from "./app-router-bridges.js";
|
|
4
|
+
export { DevChannel, type DevChannelProps, } from "./dev-channel-client.js";
|
|
5
|
+
export { DEV_CHANNEL_PATH, resolveDevChannel, type ResolvedDevChannel, } from "./dev-channel.js";
|
|
6
|
+
export { createServiceWorkerRoute, createServiceWorkerSource, DEFAULT_ASSET_LIMIT, resolveOfflineRuntime, type AdjacentServiceWorkerRoute, type ResolvedOfflineRuntime, } from "./service-worker.js";
|
|
7
|
+
export { discoverLocalDevOrigins, shouldSendDevTunnelHeaders, BUILD_ID_ENV, withAdjacent, type AdjacentNextConfigOptions, } from "./with-adjacent.js";
|
|
8
|
+
export { BASE_PATH_ENV, basePath, normaliseBasePath, withBasePath, } from "./base-path.js";
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,EACd,KAAK,eAAe,EACpB,KAAK,qBAAqB,GAC3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,EAClB,KAAK,mBAAmB,EACxB,KAAK,qBAAqB,GAC3B,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,EACjB,KAAK,gBAAgB,EACrB,KAAK,2BAA2B,GACjC,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,UAAU,EACV,KAAK,eAAe,GACrB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,EACjB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,EACrB,KAAK,0BAA0B,EAC/B,KAAK,sBAAsB,GAC5B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,YAAY,EACZ,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,YAAY,GACb,MAAM,gBAAgB,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { createAdjacent, } from "./create-adjacent.js";
|
|
2
|
+
export { withAdjacentLayout, } from "./with-adjacent-layout.js";
|
|
3
|
+
export { createAdjacentManifest, createAdjacentServiceWorker, resolveNextConfig, } from "./app-router-bridges.js";
|
|
4
|
+
export { DevChannel, } from "./dev-channel-client.js";
|
|
5
|
+
export { DEV_CHANNEL_PATH, resolveDevChannel, } from "./dev-channel.js";
|
|
6
|
+
export { createServiceWorkerRoute, createServiceWorkerSource, DEFAULT_ASSET_LIMIT, resolveOfflineRuntime, } from "./service-worker.js";
|
|
7
|
+
export { discoverLocalDevOrigins, shouldSendDevTunnelHeaders, BUILD_ID_ENV, withAdjacent, } from "./with-adjacent.js";
|
|
8
|
+
export { BASE_PATH_ENV, basePath, normaliseBasePath, withBasePath, } from "./base-path.js";
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,kBAAkB,GAGnB,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC3B,iBAAiB,GAGlB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,UAAU,GAEX,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,gBAAgB,EAChB,iBAAiB,GAElB,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EACL,wBAAwB,EACxB,yBAAyB,EACzB,mBAAmB,EACnB,qBAAqB,GAGtB,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,uBAAuB,EACvB,0BAA0B,EAC1B,YAAY,EACZ,YAAY,GAEb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,YAAY,GACb,MAAM,gBAAgB,CAAC"}
|
package/dist/proxy.d.ts
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { NextFetchEvent, NextRequest } from "next/server";
|
|
2
|
+
export type AdjacentProxyResult = Response | undefined | void;
|
|
3
|
+
export type AdjacentProxyHandler = (request: NextRequest, event: NextFetchEvent) => AdjacentProxyResult | Promise<AdjacentProxyResult>;
|
|
4
|
+
export type AdjacentProxy = (request: NextRequest, event: NextFetchEvent) => Promise<Response>;
|
|
5
|
+
/** Composes proxy handlers in order. Returning no response continues the chain. */
|
|
6
|
+
export declare function createAdjacentProxy(...handlers: readonly AdjacentProxyHandler[]): AdjacentProxy;
|
|
7
|
+
//# sourceMappingURL=proxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.d.ts","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/D,MAAM,MAAM,mBAAmB,GAAG,QAAQ,GAAG,SAAS,GAAG,IAAI,CAAC;AAE9D,MAAM,MAAM,oBAAoB,GAAG,CACjC,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,cAAc,KAClB,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;AAExD,MAAM,MAAM,aAAa,GAAG,CAC1B,OAAO,EAAE,WAAW,EACpB,KAAK,EAAE,cAAc,KAClB,OAAO,CAAC,QAAQ,CAAC,CAAC;AAEvB,mFAAmF;AACnF,wBAAgB,mBAAmB,CACjC,GAAG,QAAQ,EAAE,SAAS,oBAAoB,EAAE,GAC3C,aAAa,CAWf"}
|
package/dist/proxy.js
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
/** Composes proxy handlers in order. Returning no response continues the chain. */
|
|
3
|
+
export function createAdjacentProxy(...handlers) {
|
|
4
|
+
return async function proxy(request, event) {
|
|
5
|
+
for (const handler of handlers) {
|
|
6
|
+
const response = await handler(request, event);
|
|
7
|
+
if (response instanceof Response)
|
|
8
|
+
return response;
|
|
9
|
+
}
|
|
10
|
+
return NextResponse.next();
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
//# sourceMappingURL=proxy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"proxy.js","sourceRoot":"","sources":["../src/proxy.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAc3C,mFAAmF;AACnF,MAAM,UAAU,mBAAmB,CACjC,GAAG,QAAyC;IAE5C,OAAO,KAAK,UAAU,KAAK,CACzB,OAAoB,EACpB,KAAqB;QAErB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC/C,IAAI,QAAQ,YAAY,QAAQ;gBAAE,OAAO,QAAQ,CAAC;QACpD,CAAC;QACD,OAAO,YAAY,CAAC,IAAI,EAAE,CAAC;IAC7B,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface ServiceWorkerRegistrationProps {
|
|
2
|
+
readonly enabled: boolean;
|
|
3
|
+
readonly scriptUrl?: string;
|
|
4
|
+
}
|
|
5
|
+
export declare function ServiceWorkerRegistration({ enabled, scriptUrl, }: ServiceWorkerRegistrationProps): null;
|
|
6
|
+
//# sourceMappingURL=service-worker-registration.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-worker-registration.d.ts","sourceRoot":"","sources":["../src/service-worker-registration.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,wBAAgB,yBAAyB,CAAC,EACxC,OAAO,EACP,SAAS,GACV,EAAE,8BAA8B,GAAG,IAAI,CAoCvC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
"use client";
|
|
2
|
+
import { useEffect } from "react";
|
|
3
|
+
import { basePath, withBasePath } from "./base-path.js";
|
|
4
|
+
export function ServiceWorkerRegistration({ enabled, scriptUrl, }) {
|
|
5
|
+
useEffect(() => {
|
|
6
|
+
if (!("serviceWorker" in navigator))
|
|
7
|
+
return;
|
|
8
|
+
// An application served under a base path serves its worker there too, and
|
|
9
|
+
// asking at the origin root would find nothing.
|
|
10
|
+
const script = scriptUrl ?? withBasePath("/sw.js");
|
|
11
|
+
const scope = `${basePath()}/`;
|
|
12
|
+
const operation = enabled
|
|
13
|
+
? navigator.serviceWorker.register(script, {
|
|
14
|
+
scope,
|
|
15
|
+
updateViaCache: "none",
|
|
16
|
+
}).then(() => undefined)
|
|
17
|
+
: navigator.serviceWorker.getRegistrations().then(async (registrations) => {
|
|
18
|
+
const expectedUrl = new URL(script, location.href).href;
|
|
19
|
+
await Promise.all(registrations
|
|
20
|
+
.filter(({ active }) => active?.scriptURL === expectedUrl)
|
|
21
|
+
.map((registration) => registration.unregister()));
|
|
22
|
+
if (!("caches" in window))
|
|
23
|
+
return;
|
|
24
|
+
const cacheNames = await caches.keys();
|
|
25
|
+
await Promise.all(cacheNames
|
|
26
|
+
.filter((name) => name.startsWith("adjacent-"))
|
|
27
|
+
.map((name) => caches.delete(name)));
|
|
28
|
+
});
|
|
29
|
+
void operation.catch((error) => {
|
|
30
|
+
console.error("Adjacent could not configure its service worker.", error);
|
|
31
|
+
});
|
|
32
|
+
}, [enabled, scriptUrl]);
|
|
33
|
+
return null;
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=service-worker-registration.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-worker-registration.js","sourceRoot":"","sources":["../src/service-worker-registration.ts"],"names":[],"mappings":"AAAA,YAAY,CAAC;AAEb,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAOxD,MAAM,UAAU,yBAAyB,CAAC,EACxC,OAAO,EACP,SAAS,GACsB;IAC/B,SAAS,CAAC,GAAG,EAAE;QACb,IAAI,CAAC,CAAC,eAAe,IAAI,SAAS,CAAC;YAAE,OAAO;QAE5C,2EAA2E;QAC3E,gDAAgD;QAChD,MAAM,MAAM,GAAG,SAAS,IAAI,YAAY,CAAC,QAAQ,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,GAAG,QAAQ,EAAE,GAAG,CAAC;QAE/B,MAAM,SAAS,GAAG,OAAO;YACvB,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,EAAE;gBACvC,KAAK;gBACL,cAAc,EAAE,MAAM;aACvB,CAAC,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YAC1B,CAAC,CAAC,SAAS,CAAC,aAAa,CAAC,gBAAgB,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,aAAa,EAAE,EAAE;gBACtE,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC;gBACxD,MAAM,OAAO,CAAC,GAAG,CACf,aAAa;qBACV,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,WAAW,CAAC;qBACzD,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,CAAC,CACpD,CAAC;gBACF,IAAI,CAAC,CAAC,QAAQ,IAAI,MAAM,CAAC;oBAAE,OAAO;gBAClC,MAAM,UAAU,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC;gBACvC,MAAM,OAAO,CAAC,GAAG,CACf,UAAU;qBACP,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;qBAC9C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CACtC,CAAC;YACJ,CAAC,CAAC,CAAC;QAEP,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;YACtC,OAAO,CAAC,KAAK,CAAC,kDAAkD,EAAE,KAAK,CAAC,CAAC;QAC3E,CAAC,CAAC,CAAC;IACL,CAAC,EAAE,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC;IAEzB,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type AdjacentConfig } from "adjacent-core";
|
|
2
|
+
export interface ResolvedOfflineRuntime {
|
|
3
|
+
/** How many entries the asset cache keeps before the oldest are dropped. */
|
|
4
|
+
readonly assetLimit: number;
|
|
5
|
+
readonly enabled: boolean;
|
|
6
|
+
/** Paths the worker leaves alone, normalised and in a stable order. */
|
|
7
|
+
readonly exclude: readonly string[];
|
|
8
|
+
readonly fallback?: `/${string}`;
|
|
9
|
+
readonly navigation: "cache-first" | "network-first";
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Enough for an application's own scripts, styles, fonts and the images of a
|
|
13
|
+
* few screens, and small enough that a long session cannot fill the origin's
|
|
14
|
+
* storage quota with them.
|
|
15
|
+
*/
|
|
16
|
+
export declare const DEFAULT_ASSET_LIMIT = 64;
|
|
17
|
+
export interface AdjacentServiceWorkerRoute {
|
|
18
|
+
readonly GET: () => Response;
|
|
19
|
+
}
|
|
20
|
+
export declare function resolveOfflineRuntime(offline: AdjacentConfig["offline"]): ResolvedOfflineRuntime;
|
|
21
|
+
export declare function createServiceWorkerSource(config: AdjacentConfig, development?: boolean): string;
|
|
22
|
+
export declare function createServiceWorkerRoute(config: AdjacentConfig): AdjacentServiceWorkerRoute;
|
|
23
|
+
//# sourceMappingURL=service-worker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service-worker.d.ts","sourceRoot":"","sources":["../src/service-worker.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AAIpE,MAAM,WAAW,sBAAsB;IACrC,4EAA4E;IAC5E,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,uEAAuE;IACvE,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,MAAM,EAAE,CAAC;IACjC,QAAQ,CAAC,UAAU,EAAE,aAAa,GAAG,eAAe,CAAC;CACtD;AAED;;;;GAIG;AACH,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAEtC,MAAM,WAAW,0BAA0B;IACzC,QAAQ,CAAC,GAAG,EAAE,MAAM,QAAQ,CAAC;CAC9B;AAsBD,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,cAAc,CAAC,SAAS,CAAC,GACjC,sBAAsB,CAwBxB;AAED,wBAAgB,yBAAyB,CACvC,MAAM,EAAE,cAAc,EACtB,WAAW,UAAyC,GACnD,MAAM,CAwUR;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,cAAc,GACrB,0BAA0B,CAe5B"}
|