@powerhousedao/shared 6.2.2-dev.9 → 6.2.2-staging.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/dist/clis/args/access-token--9H57y8J.d.mts +18 -0
- package/dist/clis/args/access-token--9H57y8J.d.mts.map +1 -0
- package/dist/clis/args/access-token-To5LaIfL.mjs +22 -0
- package/dist/clis/args/access-token-To5LaIfL.mjs.map +1 -0
- package/dist/clis/args/access-token.d.mts +2 -18
- package/dist/clis/args/access-token.mjs +1 -21
- package/dist/clis/args/{common-dbsvksvf.mjs → common-CcYbXrBx.mjs} +7 -2
- package/dist/clis/args/common-CcYbXrBx.mjs.map +1 -0
- package/dist/clis/args/{common-Cr8LZG55.d.mts → common-Dsf1vpHV.d.mts} +7 -4
- package/dist/clis/args/{common-Cr8LZG55.d.mts.map → common-Dsf1vpHV.d.mts.map} +1 -1
- package/dist/clis/args/common.d.mts +2 -2
- package/dist/clis/args/common.mjs +2 -2
- package/dist/clis/args/connect-BVVvCmL9.mjs +198 -0
- package/dist/clis/args/connect-BVVvCmL9.mjs.map +1 -0
- package/dist/clis/args/connect-DetTnI8g.d.mts +443 -0
- package/dist/clis/args/connect-DetTnI8g.d.mts.map +1 -0
- package/dist/clis/args/connect.d.mts +2 -434
- package/dist/clis/args/connect.mjs +1 -196
- package/dist/clis/args/{generate-Cs5okckF.mjs → generate-CA916Fvj.mjs} +2 -2
- package/dist/clis/args/{generate-Cs5okckF.mjs.map → generate-CA916Fvj.mjs.map} +1 -1
- package/dist/clis/args/generate-DnV-bfXt.d.mts +87 -0
- package/dist/clis/args/generate-DnV-bfXt.d.mts.map +1 -0
- package/dist/clis/args/generate.d.mts +2 -87
- package/dist/clis/args/generate.mjs +1 -1
- package/dist/clis/args/{help-BkF9Cxud.mjs → help-Bqbgbalu.mjs} +15 -15
- package/dist/clis/args/{help-BkF9Cxud.mjs.map → help-Bqbgbalu.mjs.map} +1 -1
- package/dist/clis/args/{help-CYjFrzIJ.d.mts → help-CjAsudUn.d.mts} +1 -1
- package/dist/clis/args/{help-CYjFrzIJ.d.mts.map → help-CjAsudUn.d.mts.map} +1 -1
- package/dist/clis/args/help.d.mts +1 -1
- package/dist/clis/args/help.mjs +1 -13
- package/dist/clis/args/index.d.mts +19 -19
- package/dist/clis/args/index.mjs +19 -19
- package/dist/clis/args/init-CUXyfquF.d.mts +55 -0
- package/dist/clis/args/init-CUXyfquF.d.mts.map +1 -0
- package/dist/clis/args/init-rz9Ei7nq.mjs +67 -0
- package/dist/clis/args/init-rz9Ei7nq.mjs.map +1 -0
- package/dist/clis/args/init.d.mts +2 -55
- package/dist/clis/args/init.mjs +1 -66
- package/dist/clis/args/inspect-DtZeoA5c.d.mts +15 -0
- package/dist/clis/args/inspect-DtZeoA5c.d.mts.map +1 -0
- package/dist/clis/args/inspect-tckH8mSw.mjs +15 -0
- package/dist/clis/args/inspect-tckH8mSw.mjs.map +1 -0
- package/dist/clis/args/inspect.d.mts +2 -15
- package/dist/clis/args/inspect.mjs +1 -14
- package/dist/clis/args/install-CkP8zcHb.d.mts +40 -0
- package/dist/clis/args/install-CkP8zcHb.d.mts.map +1 -0
- package/dist/clis/args/install-Sz2DlCHh.mjs +32 -0
- package/dist/clis/args/install-Sz2DlCHh.mjs.map +1 -0
- package/dist/clis/args/install.d.mts +2 -40
- package/dist/clis/args/install.mjs +1 -31
- package/dist/clis/args/list-BGf8s_gj.d.mts +12 -0
- package/dist/clis/args/list-BGf8s_gj.d.mts.map +1 -0
- package/dist/clis/args/list-DM2d6f1m.mjs +7 -0
- package/dist/clis/args/list-DM2d6f1m.mjs.map +1 -0
- package/dist/clis/args/list.d.mts +2 -12
- package/dist/clis/args/list.mjs +1 -6
- package/dist/clis/args/login-DNsHwvqk.d.mts +27 -0
- package/dist/clis/args/login-DNsHwvqk.d.mts.map +1 -0
- package/dist/clis/args/login-DiKT5Jfu.mjs +40 -0
- package/dist/clis/args/login-DiKT5Jfu.mjs.map +1 -0
- package/dist/clis/args/login.d.mts +2 -27
- package/dist/clis/args/login.mjs +1 -39
- package/dist/clis/args/magic-string.es-h_0HDQBQ.mjs +1013 -0
- package/dist/clis/args/magic-string.es-h_0HDQBQ.mjs.map +1 -0
- package/dist/clis/args/migrate-CG_gWc4k.mjs +29 -0
- package/dist/clis/args/migrate-CG_gWc4k.mjs.map +1 -0
- package/dist/clis/args/migrate-sixkWhxm.d.mts +21 -0
- package/dist/clis/args/migrate-sixkWhxm.d.mts.map +1 -0
- package/dist/clis/args/migrate.d.mts +2 -21
- package/dist/clis/args/migrate.mjs +1 -28
- package/dist/clis/args/publish-DDZYsUfV.mjs +19 -0
- package/dist/clis/args/publish-DDZYsUfV.mjs.map +1 -0
- package/dist/clis/args/publish-Dqe5DUst.d.mts +18 -0
- package/dist/clis/args/publish-Dqe5DUst.d.mts.map +1 -0
- package/dist/clis/args/publish.d.mts +2 -18
- package/dist/clis/args/publish.mjs +1 -18
- package/dist/clis/args/registry-C_OVFQmI.mjs +23 -0
- package/dist/clis/args/registry-C_OVFQmI.mjs.map +1 -0
- package/dist/clis/args/registry-C_RfTsKB.d.mts +19 -0
- package/dist/clis/args/registry-C_RfTsKB.d.mts.map +1 -0
- package/dist/clis/args/registry.d.mts +2 -19
- package/dist/clis/args/registry.mjs +1 -22
- package/dist/clis/args/service-CHOOr0Gg.mjs +11 -0
- package/dist/clis/args/service-CHOOr0Gg.mjs.map +1 -0
- package/dist/clis/args/{service-C88bN_g_.d.mts → service-DhIkf8-O.d.mts} +1 -1
- package/dist/clis/args/{service-C88bN_g_.d.mts.map → service-DhIkf8-O.d.mts.map} +1 -1
- package/dist/clis/args/service.d.mts +1 -1
- package/dist/clis/args/service.mjs +1 -10
- package/dist/clis/args/switchboard-BlPaq2at.d.mts +72 -0
- package/dist/clis/args/switchboard-BlPaq2at.d.mts.map +1 -0
- package/dist/clis/args/switchboard-Dsp7nosi.mjs +85 -0
- package/dist/clis/args/switchboard-Dsp7nosi.mjs.map +1 -0
- package/dist/clis/args/switchboard.d.mts +2 -72
- package/dist/clis/args/switchboard.mjs +1 -84
- package/dist/clis/args/uninstall-BpA3YYbw.d.mts +31 -0
- package/dist/clis/args/uninstall-BpA3YYbw.d.mts.map +1 -0
- package/dist/clis/args/uninstall-CTwTX0u_.mjs +16 -0
- package/dist/clis/args/uninstall-CTwTX0u_.mjs.map +1 -0
- package/dist/clis/args/uninstall.d.mts +2 -31
- package/dist/clis/args/uninstall.mjs +1 -15
- package/dist/clis/args/unpublish-BPMkGEg5.mjs +30 -0
- package/dist/clis/args/unpublish-BPMkGEg5.mjs.map +1 -0
- package/dist/clis/args/unpublish-CvwaIimG.d.mts +24 -0
- package/dist/clis/args/unpublish-CvwaIimG.d.mts.map +1 -0
- package/dist/clis/args/unpublish.d.mts +2 -24
- package/dist/clis/args/unpublish.mjs +1 -29
- package/dist/clis/args/vetra-DLQ6lhLl.d.mts +113 -0
- package/dist/clis/args/vetra-DLQ6lhLl.d.mts.map +1 -0
- package/dist/clis/args/vetra-b4KUu1Ax.mjs +126 -0
- package/dist/clis/args/vetra-b4KUu1Ax.mjs.map +1 -0
- package/dist/clis/args/vetra-ports.test.d.mts +1 -0
- package/dist/clis/args/vetra-ports.test.mjs +13249 -0
- package/dist/clis/args/vetra-ports.test.mjs.map +1 -0
- package/dist/clis/args/vetra.d.mts +2 -102
- package/dist/clis/args/vetra.mjs +2 -75
- package/dist/clis/build-config.d.mts +1 -1
- package/dist/clis/build-config.d.mts.map +1 -1
- package/dist/clis/constants.d.mts +199 -55
- package/dist/clis/constants.d.mts.map +1 -1
- package/dist/clis/constants.mjs +12 -4
- package/dist/clis/constants.mjs.map +1 -1
- package/dist/clis/index.d.mts +591 -30
- package/dist/clis/index.d.mts.map +1 -1
- package/dist/clis/index.mjs +413 -18
- package/dist/clis/index.mjs.map +1 -1
- package/dist/clis/project-env.d.mts +27 -0
- package/dist/clis/project-env.d.mts.map +1 -0
- package/dist/clis/project-env.mjs +44 -0
- package/dist/clis/project-env.mjs.map +1 -0
- package/dist/clis/project-ports.d.mts +40 -0
- package/dist/clis/project-ports.d.mts.map +1 -0
- package/dist/clis/project-ports.mjs +90 -0
- package/dist/clis/project-ports.mjs.map +1 -0
- package/dist/{config-loader-19K8n4DO.js → config-loader-B845Hidf.js} +11 -14
- package/dist/config-loader-B845Hidf.js.map +1 -0
- package/dist/connect/config-loader.d.ts +2 -1
- package/dist/connect/config-loader.d.ts.map +1 -1
- package/dist/connect/config-loader.js +1 -1
- package/dist/connect/index.d.ts +486 -27
- package/dist/connect/index.d.ts.map +1 -1
- package/dist/connect/index.js +531 -5
- package/dist/connect/index.js.map +1 -1
- package/dist/connect/json-adapter.d.ts.map +1 -1
- package/dist/{constants-C_EQX4DY.d.ts → constants-BP_gjn8g.d.ts} +1 -1
- package/dist/constants-BP_gjn8g.d.ts.map +1 -0
- package/dist/constants.d.ts +1 -1
- package/dist/document-drive/index.d.ts +2 -2
- package/dist/document-drive/index.js +3 -3
- package/dist/document-drive/index.js.map +1 -1
- package/dist/document-model/index.d.ts +4 -5
- package/dist/document-model/index.js +1337 -133
- package/dist/document-model/index.js.map +1 -1
- package/dist/document-model/mock.d.ts +22 -2
- package/dist/document-model/mock.d.ts.map +1 -0
- package/dist/document-model/mock.js +32 -3
- package/dist/document-model/mock.js.map +1 -1
- package/dist/document-model/utils.d.ts +1 -2
- package/dist/document-model/utils.js +1 -2
- package/dist/{index-CQDIrK1k.d.ts → index-C_iVZe7f.d.ts} +1 -1
- package/dist/index-C_iVZe7f.d.ts.map +1 -0
- package/dist/index-DPuio_se.d.ts +836 -0
- package/dist/index-DPuio_se.d.ts.map +1 -0
- package/dist/index.d.ts +5 -6
- package/dist/processors/index.d.ts +2 -2
- package/dist/registry/index.d.ts +5 -4
- package/dist/registry/index.d.ts.map +1 -1
- package/dist/registry/index.js +9 -8
- package/dist/registry/index.js.map +1 -1
- package/dist/registry/manifest-slim.d.ts +1 -1
- package/dist/registry/urls.d.ts +11 -0
- package/dist/registry/urls.d.ts.map +1 -0
- package/dist/registry/urls.js +15 -0
- package/dist/registry/urls.js.map +1 -0
- package/dist/{types-DvWPqxJr.d.ts → types-BBUlASQ7.d.ts} +30 -4
- package/dist/types-BBUlASQ7.d.ts.map +1 -0
- package/dist/{types-DXsYu6Tq.d.ts → types-BzWRXB7f.d.ts} +507 -16
- package/dist/types-BzWRXB7f.d.ts.map +1 -0
- package/dist/utils-DP122OSS.d.ts +18 -0
- package/dist/utils-DP122OSS.d.ts.map +1 -0
- package/dist/{utils-DKOFCM0Q.js → utils-aaTmfxFW.js} +45 -2
- package/dist/utils-aaTmfxFW.js.map +1 -0
- package/package.json +12 -1
- package/dist/clis/args/access-token.d.mts.map +0 -1
- package/dist/clis/args/access-token.mjs.map +0 -1
- package/dist/clis/args/common-dbsvksvf.mjs.map +0 -1
- package/dist/clis/args/connect.d.mts.map +0 -1
- package/dist/clis/args/connect.mjs.map +0 -1
- package/dist/clis/args/generate.d.mts.map +0 -1
- package/dist/clis/args/init.d.mts.map +0 -1
- package/dist/clis/args/init.mjs.map +0 -1
- package/dist/clis/args/inspect.d.mts.map +0 -1
- package/dist/clis/args/inspect.mjs.map +0 -1
- package/dist/clis/args/install.d.mts.map +0 -1
- package/dist/clis/args/install.mjs.map +0 -1
- package/dist/clis/args/list.d.mts.map +0 -1
- package/dist/clis/args/list.mjs.map +0 -1
- package/dist/clis/args/login.d.mts.map +0 -1
- package/dist/clis/args/login.mjs.map +0 -1
- package/dist/clis/args/migrate.d.mts.map +0 -1
- package/dist/clis/args/migrate.mjs.map +0 -1
- package/dist/clis/args/publish.d.mts.map +0 -1
- package/dist/clis/args/publish.mjs.map +0 -1
- package/dist/clis/args/registry.d.mts.map +0 -1
- package/dist/clis/args/registry.mjs.map +0 -1
- package/dist/clis/args/service.mjs.map +0 -1
- package/dist/clis/args/switchboard.d.mts.map +0 -1
- package/dist/clis/args/switchboard.mjs.map +0 -1
- package/dist/clis/args/uninstall.d.mts.map +0 -1
- package/dist/clis/args/uninstall.mjs.map +0 -1
- package/dist/clis/args/unpublish.d.mts.map +0 -1
- package/dist/clis/args/unpublish.mjs.map +0 -1
- package/dist/clis/args/vetra.d.mts.map +0 -1
- package/dist/clis/args/vetra.mjs.map +0 -1
- package/dist/config-loader-19K8n4DO.js.map +0 -1
- package/dist/constants-C_EQX4DY.d.ts.map +0 -1
- package/dist/index-CQDIrK1k.d.ts.map +0 -1
- package/dist/index-Dz7JrBXs.d.ts +0 -399
- package/dist/index-Dz7JrBXs.d.ts.map +0 -1
- package/dist/mock-CBcf78ra.d.ts +0 -7
- package/dist/mock-CBcf78ra.d.ts.map +0 -1
- package/dist/types-D0NNBVGA.d.ts +0 -167
- package/dist/types-D0NNBVGA.d.ts.map +0 -1
- package/dist/types-DXsYu6Tq.d.ts.map +0 -1
- package/dist/types-DvWPqxJr.d.ts.map +0 -1
- package/dist/utils-BEByNOHo.d.ts +0 -9
- package/dist/utils-BEByNOHo.d.ts.map +0 -1
- package/dist/utils-DKOFCM0Q.js.map +0 -1
package/dist/connect/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { i as buildRuntimeConfig, n as deepMerge, r as DEFAULT_CONNECT_CONFIG, t as ConfigLoader } from "../config-loader-
|
|
1
|
+
import { i as buildRuntimeConfig, n as deepMerge, r as DEFAULT_CONNECT_CONFIG, t as ConfigLoader } from "../config-loader-B845Hidf.js";
|
|
2
2
|
import { JsonConfigAdapter } from "./json-adapter.js";
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
//#region connect/env-config.ts
|
|
@@ -210,6 +210,225 @@ function getStorageNamespace(basePath) {
|
|
|
210
210
|
return `${ROOT_STORAGE_NAMESPACE}--${normalized.slice(1, -1).toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-+|-+$/g, "") || "default"}`;
|
|
211
211
|
}
|
|
212
212
|
//#endregion
|
|
213
|
+
//#region connect/pwa-config.ts
|
|
214
|
+
const MANIFEST_SCALAR_KEYS = [
|
|
215
|
+
"name",
|
|
216
|
+
"short_name",
|
|
217
|
+
"description",
|
|
218
|
+
"theme_color",
|
|
219
|
+
"background_color",
|
|
220
|
+
"display",
|
|
221
|
+
"start_url",
|
|
222
|
+
"scope",
|
|
223
|
+
"launch_handler"
|
|
224
|
+
];
|
|
225
|
+
const ADDITIVE_MANIFEST_KEYS = new Set([
|
|
226
|
+
"icons",
|
|
227
|
+
"file_handlers",
|
|
228
|
+
"categories"
|
|
229
|
+
]);
|
|
230
|
+
function iconKey(icon) {
|
|
231
|
+
const purpose = typeof icon.purpose === "string" ? icon.purpose : icon.purpose?.join(",") ?? "";
|
|
232
|
+
return `${icon.src}|${icon.sizes ?? ""}|${purpose}`;
|
|
233
|
+
}
|
|
234
|
+
/** Concatenate, keeping the first occurrence per `key`. */
|
|
235
|
+
function dedupeBy(items, key) {
|
|
236
|
+
const seen = /* @__PURE__ */ new Set();
|
|
237
|
+
const result = [];
|
|
238
|
+
for (const item of items) {
|
|
239
|
+
const k = key(item);
|
|
240
|
+
if (seen.has(k)) continue;
|
|
241
|
+
seen.add(k);
|
|
242
|
+
result.push(item);
|
|
243
|
+
}
|
|
244
|
+
return result;
|
|
245
|
+
}
|
|
246
|
+
/** Concatenate icons, keeping the first occurrence of each (src,sizes,purpose). */
|
|
247
|
+
function dedupeIcons(icons) {
|
|
248
|
+
return dedupeBy(icons, iconKey);
|
|
249
|
+
}
|
|
250
|
+
/** `JSON.stringify` with object keys sorted recursively, so two structurally
|
|
251
|
+
* equal values always serialise identically (accept-map key order etc.). */
|
|
252
|
+
function stableStringify(value) {
|
|
253
|
+
if (Array.isArray(value)) return `[${value.map(stableStringify).join(",")}]`;
|
|
254
|
+
if (value !== null && typeof value === "object") return `{${Object.entries(value).filter(([, v]) => v !== void 0).sort(([a], [b]) => a < b ? -1 : a > b ? 1 : 0).map(([k, v]) => `${JSON.stringify(k)}:${stableStringify(v)}`).join(",")}}`;
|
|
255
|
+
return JSON.stringify(value);
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* Concatenate file handlers, keeping the first occurrence of each entry.
|
|
259
|
+
* Deduped on the WHOLE entry (canonical JSON) rather than any single field:
|
|
260
|
+
* every handler shares Connect's fixed action, and two handlers accepting
|
|
261
|
+
* different file types are both real contributions — only the exact same
|
|
262
|
+
* fragment arriving via two layers is a duplicate. Structural, so it also
|
|
263
|
+
* works on the vite-plugin-pwa handler shape in builder-tools.
|
|
264
|
+
*/
|
|
265
|
+
function dedupeFileHandlers(handlers) {
|
|
266
|
+
return dedupeBy(handlers, stableStringify);
|
|
267
|
+
}
|
|
268
|
+
/** Fold a manifest's top-level `category` string into a PWA config as a
|
|
269
|
+
* `categories: [category]` entry. PWA `categories` is DERIVED from the
|
|
270
|
+
* `category` field of every contributing `powerhouse.manifest.json` (never
|
|
271
|
+
* authored under `pwa`); `mergePwaConfig`/`mergeManifest` then union them
|
|
272
|
+
* across contributors. No-op when there is no usable category. */
|
|
273
|
+
function withInferredCategory(config, category) {
|
|
274
|
+
if (typeof category !== "string" || !category) return config;
|
|
275
|
+
return {
|
|
276
|
+
...config,
|
|
277
|
+
manifest: {
|
|
278
|
+
...config.manifest,
|
|
279
|
+
categories: [category]
|
|
280
|
+
}
|
|
281
|
+
};
|
|
282
|
+
}
|
|
283
|
+
/** Order-preserving string union (used for the precache glob lists). */
|
|
284
|
+
function unionStrings(base, extra) {
|
|
285
|
+
const result = [...base ?? []];
|
|
286
|
+
for (const item of extra) if (!result.includes(item)) result.push(item);
|
|
287
|
+
return result;
|
|
288
|
+
}
|
|
289
|
+
function patternKey(pattern) {
|
|
290
|
+
return typeof pattern === "string" ? `s:${pattern}` : `r:${pattern.source}:${pattern.flags ?? ""}`;
|
|
291
|
+
}
|
|
292
|
+
function unionPatterns(base, extra) {
|
|
293
|
+
const result = [...base ?? []];
|
|
294
|
+
const seen = new Set(result.map(patternKey));
|
|
295
|
+
for (const pattern of extra) {
|
|
296
|
+
const key = patternKey(pattern);
|
|
297
|
+
if (seen.has(key)) continue;
|
|
298
|
+
seen.add(key);
|
|
299
|
+
result.push(pattern);
|
|
300
|
+
}
|
|
301
|
+
return result;
|
|
302
|
+
}
|
|
303
|
+
/** Merge one fragment into `target` in place, applying the per-field
|
|
304
|
+
* strategies (manifest scalars deep-merge and win; icons/file_handlers/globs/
|
|
305
|
+
* rules/denylist are additive; size ceiling takes the max). */
|
|
306
|
+
function mergeInto(target, config) {
|
|
307
|
+
if (config.manifest) {
|
|
308
|
+
const { icons, file_handlers, categories, ...scalars } = config.manifest;
|
|
309
|
+
if (Object.keys(scalars).length > 0) target.manifest = deepMerge(target.manifest ?? {}, scalars);
|
|
310
|
+
if (icons?.length) target.manifest = {
|
|
311
|
+
...target.manifest ?? {},
|
|
312
|
+
icons: dedupeIcons([...target.manifest?.icons ?? [], ...icons])
|
|
313
|
+
};
|
|
314
|
+
if (file_handlers?.length) target.manifest = {
|
|
315
|
+
...target.manifest ?? {},
|
|
316
|
+
file_handlers: dedupeFileHandlers([...target.manifest?.file_handlers ?? [], ...file_handlers])
|
|
317
|
+
};
|
|
318
|
+
if (categories?.length) target.manifest = {
|
|
319
|
+
...target.manifest ?? {},
|
|
320
|
+
categories: unionStrings(target.manifest?.categories, categories)
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
if (config.globPatterns?.length) target.globPatterns = unionStrings(target.globPatterns, config.globPatterns);
|
|
324
|
+
if (config.globIgnores?.length) target.globIgnores = unionStrings(target.globIgnores, config.globIgnores);
|
|
325
|
+
if (config.runtimeCaching?.length) target.runtimeCaching = [...target.runtimeCaching ?? [], ...config.runtimeCaching];
|
|
326
|
+
if (config.navigateFallbackDenylist?.length) target.navigateFallbackDenylist = unionPatterns(target.navigateFallbackDenylist, config.navigateFallbackDenylist);
|
|
327
|
+
if (typeof config.maximumFileSizeToCacheInBytes === "number") target.maximumFileSizeToCacheInBytes = Math.max(target.maximumFileSizeToCacheInBytes ?? 0, config.maximumFileSizeToCacheInBytes);
|
|
328
|
+
}
|
|
329
|
+
/**
|
|
330
|
+
* Fold the build-time-known package PWA fragments and the project's
|
|
331
|
+
* `connect.pwa` block into one effective fragment. Precedence is
|
|
332
|
+
* `packageContributions (in order) < projectConfig` — the project config wins
|
|
333
|
+
* scalar fields, while arrays (`icons`, globs, `runtimeCaching`,
|
|
334
|
+
* `navigateFallbackDenylist`) are additive across every layer and the size
|
|
335
|
+
* ceiling takes the max.
|
|
336
|
+
*
|
|
337
|
+
* `onWarn` fires when two or more PACKAGES set the same manifest scalar to
|
|
338
|
+
* different values and the project config doesn't settle it — the winner is
|
|
339
|
+
* otherwise decided silently by package load order. The operator resolves it
|
|
340
|
+
* by setting that field in `connect.pwa`, which both wins and silences the
|
|
341
|
+
* warning.
|
|
342
|
+
*/
|
|
343
|
+
function mergePwaConfig(packageContributions, projectConfig, onWarn = () => {}) {
|
|
344
|
+
const merged = {};
|
|
345
|
+
const packageScalarSetters = {};
|
|
346
|
+
for (const { source, config } of packageContributions) {
|
|
347
|
+
mergeInto(merged, config);
|
|
348
|
+
for (const [key, value] of Object.entries(config.manifest ?? {})) {
|
|
349
|
+
if (ADDITIVE_MANIFEST_KEYS.has(key)) continue;
|
|
350
|
+
(packageScalarSetters[key] ??= []).push({
|
|
351
|
+
source,
|
|
352
|
+
value
|
|
353
|
+
});
|
|
354
|
+
}
|
|
355
|
+
}
|
|
356
|
+
if (projectConfig) mergeInto(merged, projectConfig);
|
|
357
|
+
const projectManifest = projectConfig?.manifest ?? {};
|
|
358
|
+
for (const key of MANIFEST_SCALAR_KEYS) {
|
|
359
|
+
const setters = packageScalarSetters[key];
|
|
360
|
+
const projectSettles = projectManifest[key] !== void 0;
|
|
361
|
+
if (!setters || setters.length < 2 || projectSettles) continue;
|
|
362
|
+
if (new Set(setters.map((s) => stableStringify(s.value))).size < 2) continue;
|
|
363
|
+
const sources = setters.map((s) => s.source);
|
|
364
|
+
onWarn(`PWA config: manifest.${key} set by multiple packages (${sources.join(", ")}); '${sources[sources.length - 1]}' wins by load order. Set connect.pwa.manifest.${key} in the project config to make the winner explicit.`);
|
|
365
|
+
}
|
|
366
|
+
return merged;
|
|
367
|
+
}
|
|
368
|
+
/** A serialisable URL pattern as Workbox consumes it: strings pass through
|
|
369
|
+
* verbatim, `{ source, flags }` is rebuilt into a RegExp. */
|
|
370
|
+
function toRegExpOrString(pattern) {
|
|
371
|
+
return typeof pattern === "string" ? pattern : new RegExp(pattern.source, pattern.flags);
|
|
372
|
+
}
|
|
373
|
+
//#endregion
|
|
374
|
+
//#region connect/pwa-manifest.ts
|
|
375
|
+
/**
|
|
376
|
+
* The one route launched files open at, shared by the built-in handler and
|
|
377
|
+
* injected into every contributed one. Not configurable: consuming launched
|
|
378
|
+
* files takes runtime code that lives in Connect itself, and a relative "."
|
|
379
|
+
* resolves against the manifest URL so it tracks any deploy base (the
|
|
380
|
+
* webmanifest is served dynamically and never rewritten by the dynamic-base
|
|
381
|
+
* plugin) — same trick as the base start_url/scope.
|
|
382
|
+
*/
|
|
383
|
+
const PWA_FILE_HANDLER_ACTION = ".";
|
|
384
|
+
const PWA_IDB_NAME = "ph-pwa";
|
|
385
|
+
const PWA_IDB_STORE = "fragments";
|
|
386
|
+
const PWA_IDB_KEY = "merged";
|
|
387
|
+
const PWA_IDB_VERSION = 1;
|
|
388
|
+
/**
|
|
389
|
+
* Lay a `PHConnectPwaManifest` fragment over a base web-manifest object.
|
|
390
|
+
*
|
|
391
|
+
* - **scalars** (name, theme_color, launch_handler, …): governed by
|
|
392
|
+
* `scalarPolicy`. `"fragment-wins"` lets the fragment overwrite the base;
|
|
393
|
+
* `"base-wins"` keeps the base and only fills fields it left unset. Keys
|
|
394
|
+
* listed in `protectedScalars` always behave as base-wins even under a
|
|
395
|
+
* fragment-wins policy — used at runtime to fragment-win cosmetic scalars
|
|
396
|
+
* while still protecting navigation-critical ones (`start_url`/`scope`) from
|
|
397
|
+
* an untrusted dynamically-installed package.
|
|
398
|
+
* - **arrays** (icons, file_handlers): always additive, base entries first,
|
|
399
|
+
* de-duplicated — so a package can extend but never displace a built-in
|
|
400
|
+
* (Chromium is first-registered-wins per file extension, so `.phd`/`.phdm`
|
|
401
|
+
* stay Connect's).
|
|
402
|
+
* - **categories**: order-preserving string union (derived from the manifest
|
|
403
|
+
* `category` field, not authored under `pwa`).
|
|
404
|
+
*
|
|
405
|
+
* The Connect-owned file-handler action is injected idempotently.
|
|
406
|
+
*/
|
|
407
|
+
function mergeManifest(base, fragment, opts) {
|
|
408
|
+
const scalarPolicy = opts?.scalarPolicy ?? "base-wins";
|
|
409
|
+
const protectedScalars = opts?.protectedScalars ?? [];
|
|
410
|
+
const result = { ...base };
|
|
411
|
+
const { icons, file_handlers, categories, ...scalars } = fragment ?? {};
|
|
412
|
+
const takeScalar = (key) => {
|
|
413
|
+
return (protectedScalars.includes(key) ? "base-wins" : scalarPolicy) === "fragment-wins" || result[key] === void 0;
|
|
414
|
+
};
|
|
415
|
+
for (const [key, value] of Object.entries(scalars)) if (takeScalar(key)) result[key] = value;
|
|
416
|
+
if (icons?.length) result.icons = dedupeIcons([...result.icons ?? [], ...icons]);
|
|
417
|
+
if (file_handlers?.length) {
|
|
418
|
+
const injected = file_handlers.map((handler) => ({
|
|
419
|
+
...handler,
|
|
420
|
+
action: "."
|
|
421
|
+
}));
|
|
422
|
+
result.file_handlers = dedupeFileHandlers([...result.file_handlers ?? [], ...injected]);
|
|
423
|
+
}
|
|
424
|
+
if (categories?.length) result.categories = unionStrings(result.categories, categories);
|
|
425
|
+
if (result.file_handlers?.length) result.file_handlers = result.file_handlers.map((handler) => ({
|
|
426
|
+
...handler,
|
|
427
|
+
action: "."
|
|
428
|
+
}));
|
|
429
|
+
return result;
|
|
430
|
+
}
|
|
431
|
+
//#endregion
|
|
213
432
|
//#region connect/schema-fragments.ts
|
|
214
433
|
const powerhousePackageSchema = {
|
|
215
434
|
type: "object",
|
|
@@ -262,6 +481,35 @@ const driveSectionSchema = {
|
|
|
262
481
|
}
|
|
263
482
|
}
|
|
264
483
|
};
|
|
484
|
+
const pwaUrlPatternSchema = {
|
|
485
|
+
description: "URL match. A string is matched verbatim by Workbox; { source, flags } is rebuilt into a RegExp at build time.",
|
|
486
|
+
oneOf: [{ type: "string" }, {
|
|
487
|
+
type: "object",
|
|
488
|
+
additionalProperties: false,
|
|
489
|
+
required: ["source"],
|
|
490
|
+
properties: {
|
|
491
|
+
source: {
|
|
492
|
+
type: "string",
|
|
493
|
+
description: "RegExp source."
|
|
494
|
+
},
|
|
495
|
+
flags: {
|
|
496
|
+
type: "string",
|
|
497
|
+
description: "RegExp flags (e.g. 'i')."
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
}]
|
|
501
|
+
};
|
|
502
|
+
const pwaIconSchema = {
|
|
503
|
+
type: "object",
|
|
504
|
+
additionalProperties: false,
|
|
505
|
+
required: ["src"],
|
|
506
|
+
properties: {
|
|
507
|
+
src: { type: "string" },
|
|
508
|
+
sizes: { type: "string" },
|
|
509
|
+
type: { type: "string" },
|
|
510
|
+
purpose: { type: "string" }
|
|
511
|
+
}
|
|
512
|
+
};
|
|
265
513
|
const phConnectRuntimeConfigSchema = {
|
|
266
514
|
type: "object",
|
|
267
515
|
additionalProperties: false,
|
|
@@ -315,6 +563,16 @@ const phConnectRuntimeConfigSchema = {
|
|
|
315
563
|
}
|
|
316
564
|
}
|
|
317
565
|
},
|
|
566
|
+
ai: {
|
|
567
|
+
type: "object",
|
|
568
|
+
additionalProperties: false,
|
|
569
|
+
description: "AI assistant (chat) behaviour.",
|
|
570
|
+
properties: { assistantEnabled: {
|
|
571
|
+
type: "boolean",
|
|
572
|
+
description: "When true, Connect mounts the in-browser AI assistant (bottom-right chat FAB that talks to a user-configured OpenAI-compatible endpoint and acts on the reactor). Disabled by default.",
|
|
573
|
+
default: false
|
|
574
|
+
} }
|
|
575
|
+
},
|
|
318
576
|
packages: {
|
|
319
577
|
type: "object",
|
|
320
578
|
additionalProperties: false,
|
|
@@ -344,9 +602,9 @@ const phConnectRuntimeConfigSchema = {
|
|
|
344
602
|
},
|
|
345
603
|
defaultDrives: {
|
|
346
604
|
type: "array",
|
|
347
|
-
description: "Drives the SPA auto-connects to on first load. Each
|
|
605
|
+
description: "Drives the SPA auto-connects to on first load. Each entry is either a remote drive (a URL, with optional name/icon overrides) or a local drive (created locally on first boot, with a stable id and optional name/icon/app).",
|
|
348
606
|
default: [],
|
|
349
|
-
items: {
|
|
607
|
+
items: { oneOf: [{
|
|
350
608
|
type: "object",
|
|
351
609
|
additionalProperties: false,
|
|
352
610
|
required: ["url"],
|
|
@@ -355,7 +613,27 @@ const phConnectRuntimeConfigSchema = {
|
|
|
355
613
|
name: { type: ["string", "null"] },
|
|
356
614
|
icon: { type: ["string", "null"] }
|
|
357
615
|
}
|
|
358
|
-
}
|
|
616
|
+
}, {
|
|
617
|
+
type: "object",
|
|
618
|
+
additionalProperties: false,
|
|
619
|
+
required: ["local", "id"],
|
|
620
|
+
properties: {
|
|
621
|
+
local: {
|
|
622
|
+
const: true,
|
|
623
|
+
description: "Discriminator: this entry is a local drive created on first boot."
|
|
624
|
+
},
|
|
625
|
+
id: {
|
|
626
|
+
type: "string",
|
|
627
|
+
description: "Stable drive id. The drive is created with this id on first boot and is not re-created on later boots."
|
|
628
|
+
},
|
|
629
|
+
name: { type: ["string", "null"] },
|
|
630
|
+
icon: { type: ["string", "null"] },
|
|
631
|
+
app: {
|
|
632
|
+
type: "string",
|
|
633
|
+
description: "Drive app (preferred editor) to open on the drive."
|
|
634
|
+
}
|
|
635
|
+
}
|
|
636
|
+
}] }
|
|
359
637
|
},
|
|
360
638
|
preserveStrategy: {
|
|
361
639
|
type: "string",
|
|
@@ -392,6 +670,56 @@ const phConnectRuntimeConfigSchema = {
|
|
|
392
670
|
type: "number",
|
|
393
671
|
description: "CAIP-2 chain reference within the network namespace.",
|
|
394
672
|
default: 1
|
|
673
|
+
},
|
|
674
|
+
namespace: {
|
|
675
|
+
type: "string",
|
|
676
|
+
description: "Renown localStorage namespace; share it across Connects to share login."
|
|
677
|
+
},
|
|
678
|
+
switchboardUrl: {
|
|
679
|
+
type: "string",
|
|
680
|
+
description: "Switchboard GraphQL URL. When set, Connect enables in-page (no-redirect) Renown sign-in; otherwise it falls back to the redirect flow via `url`."
|
|
681
|
+
},
|
|
682
|
+
adapters: {
|
|
683
|
+
type: "object",
|
|
684
|
+
additionalProperties: false,
|
|
685
|
+
description: "Per-adapter wallet config for in-page auth. Presence of an adapter key enables it; omit or leave empty for redirect-only behaviour.",
|
|
686
|
+
properties: {
|
|
687
|
+
rainbow: {
|
|
688
|
+
type: "object",
|
|
689
|
+
additionalProperties: false,
|
|
690
|
+
description: "wagmi + RainbowKit external-wallet adapter config.",
|
|
691
|
+
properties: {
|
|
692
|
+
walletConnectProjectId: {
|
|
693
|
+
type: "string",
|
|
694
|
+
description: "WalletConnect project id; required for this adapter to function."
|
|
695
|
+
},
|
|
696
|
+
infuraProjectId: {
|
|
697
|
+
type: "string",
|
|
698
|
+
description: "Optional Infura project id used to build RPC transports."
|
|
699
|
+
}
|
|
700
|
+
}
|
|
701
|
+
},
|
|
702
|
+
privy: {
|
|
703
|
+
type: "object",
|
|
704
|
+
additionalProperties: false,
|
|
705
|
+
description: "Privy embedded/social adapter config.",
|
|
706
|
+
properties: {
|
|
707
|
+
appId: {
|
|
708
|
+
type: "string",
|
|
709
|
+
description: "Privy application id; required for this adapter to function."
|
|
710
|
+
},
|
|
711
|
+
clientId: {
|
|
712
|
+
type: "string",
|
|
713
|
+
description: "Optional Privy client id."
|
|
714
|
+
},
|
|
715
|
+
methods: {
|
|
716
|
+
type: "array",
|
|
717
|
+
description: "Login methods this adapter offers; default per adapter when omitted.",
|
|
718
|
+
items: { type: "string" }
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
}
|
|
722
|
+
}
|
|
395
723
|
}
|
|
396
724
|
}
|
|
397
725
|
},
|
|
@@ -434,10 +762,208 @@ const phConnectRuntimeConfigSchema = {
|
|
|
434
762
|
default: false
|
|
435
763
|
}
|
|
436
764
|
}
|
|
765
|
+
},
|
|
766
|
+
reactor: {
|
|
767
|
+
type: "object",
|
|
768
|
+
additionalProperties: false,
|
|
769
|
+
description: "Settings for the reactor Connect runs in the browser, on the main thread or in the shared worker alike.",
|
|
770
|
+
properties: { featureFlags: {
|
|
771
|
+
type: "object",
|
|
772
|
+
additionalProperties: false,
|
|
773
|
+
description: "Enforcement flags. Each implies its predecessors, and the reactor refuses to boot on a set that names a later flag without an earlier one. These are consensus settings: a Connect syncing with a fleet must carry the same flags the fleet does, or the two reach different replay outcomes for the same history and diverge.",
|
|
774
|
+
properties: {
|
|
775
|
+
documentDecisions: {
|
|
776
|
+
type: "boolean",
|
|
777
|
+
description: "Decide writes from the document stream rather than the document meta cache, so a backdated deletion denies the operations that sort after it.",
|
|
778
|
+
default: false
|
|
779
|
+
},
|
|
780
|
+
authEnforcement: {
|
|
781
|
+
type: "boolean",
|
|
782
|
+
description: "Enforce the auth scope's policy at admission, replay, and read. Requires documentDecisions.",
|
|
783
|
+
default: false
|
|
784
|
+
},
|
|
785
|
+
authGroups: {
|
|
786
|
+
type: "boolean",
|
|
787
|
+
description: "Let `{ group }` principals match against the rosters of the group documents a policy names. Requires authEnforcement.",
|
|
788
|
+
default: false
|
|
789
|
+
},
|
|
790
|
+
authConditions: {
|
|
791
|
+
type: "boolean",
|
|
792
|
+
description: "Evaluate `where` and `match` conditions on grants. Requires authGroups. Do not enable on a fleet `preflight:auth` reports as crossing a reducer version.",
|
|
793
|
+
default: false
|
|
794
|
+
}
|
|
795
|
+
}
|
|
796
|
+
} }
|
|
797
|
+
},
|
|
798
|
+
pwa: {
|
|
799
|
+
type: "object",
|
|
800
|
+
additionalProperties: false,
|
|
801
|
+
description: "Progressive-web-app / service-worker overrides, layered on Connect's built-in PWA defaults at build time. Scalar fields deep-merge (this layer wins); the array members (icons, file_handlers, globs, runtimeCaching and denylist patterns) are additive; maximumFileSizeToCacheInBytes takes the max across contributors. (categories is not set here — it is derived from the manifest's category field.) Only applied when connect.app.offline is true.",
|
|
802
|
+
properties: {
|
|
803
|
+
manifest: {
|
|
804
|
+
type: "object",
|
|
805
|
+
additionalProperties: false,
|
|
806
|
+
description: "Web-app-manifest field overrides.",
|
|
807
|
+
properties: {
|
|
808
|
+
name: { type: "string" },
|
|
809
|
+
short_name: { type: "string" },
|
|
810
|
+
description: { type: "string" },
|
|
811
|
+
theme_color: { type: "string" },
|
|
812
|
+
background_color: { type: "string" },
|
|
813
|
+
display: {
|
|
814
|
+
type: "string",
|
|
815
|
+
enum: [
|
|
816
|
+
"fullscreen",
|
|
817
|
+
"standalone",
|
|
818
|
+
"minimal-ui",
|
|
819
|
+
"browser"
|
|
820
|
+
]
|
|
821
|
+
},
|
|
822
|
+
start_url: { type: "string" },
|
|
823
|
+
scope: { type: "string" },
|
|
824
|
+
icons: {
|
|
825
|
+
type: "array",
|
|
826
|
+
description: "Icons appended to the built-in set and de-duplicated by (src, sizes, purpose).",
|
|
827
|
+
items: pwaIconSchema
|
|
828
|
+
},
|
|
829
|
+
file_handlers: {
|
|
830
|
+
type: "array",
|
|
831
|
+
description: "File associations appended after Connect's built-in .phd/.phdm handler and de-duplicated on the whole entry. Entries only declare accepted types; there is no action field, because opening the files requires Connect's own runtime handling, so every handler opens at the app root.",
|
|
832
|
+
items: {
|
|
833
|
+
type: "object",
|
|
834
|
+
additionalProperties: false,
|
|
835
|
+
required: ["accept"],
|
|
836
|
+
properties: {
|
|
837
|
+
accept: {
|
|
838
|
+
type: "object",
|
|
839
|
+
description: "MIME type → file extensions. Each extension must start with '.'; browsers ignore entries without it.",
|
|
840
|
+
additionalProperties: {
|
|
841
|
+
type: "array",
|
|
842
|
+
items: {
|
|
843
|
+
type: "string",
|
|
844
|
+
pattern: "^\\."
|
|
845
|
+
}
|
|
846
|
+
}
|
|
847
|
+
},
|
|
848
|
+
icons: {
|
|
849
|
+
type: "array",
|
|
850
|
+
description: "OS-level file-type icons.",
|
|
851
|
+
items: pwaIconSchema
|
|
852
|
+
},
|
|
853
|
+
launch_type: {
|
|
854
|
+
type: "string",
|
|
855
|
+
enum: ["single-client", "multiple-clients"]
|
|
856
|
+
}
|
|
857
|
+
}
|
|
858
|
+
}
|
|
859
|
+
},
|
|
860
|
+
launch_handler: {
|
|
861
|
+
type: "object",
|
|
862
|
+
additionalProperties: false,
|
|
863
|
+
required: ["client_mode"],
|
|
864
|
+
description: "How the OS launches the app for handled files/links. Connect defaults to focus-existing.",
|
|
865
|
+
properties: { client_mode: {
|
|
866
|
+
type: "string",
|
|
867
|
+
enum: [
|
|
868
|
+
"auto",
|
|
869
|
+
"focus-existing",
|
|
870
|
+
"navigate-existing",
|
|
871
|
+
"navigate-new"
|
|
872
|
+
]
|
|
873
|
+
} }
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
},
|
|
877
|
+
globPatterns: {
|
|
878
|
+
type: "array",
|
|
879
|
+
items: { type: "string" },
|
|
880
|
+
description: "Extra Workbox precache globs, unioned with the built-ins."
|
|
881
|
+
},
|
|
882
|
+
globIgnores: {
|
|
883
|
+
type: "array",
|
|
884
|
+
items: { type: "string" },
|
|
885
|
+
description: "Extra precache ignore globs, unioned with the built-ins."
|
|
886
|
+
},
|
|
887
|
+
maximumFileSizeToCacheInBytes: {
|
|
888
|
+
type: "number",
|
|
889
|
+
description: "Raise the precache file-size ceiling. The max across all contributors wins, so no contributor can shrink another's limit."
|
|
890
|
+
},
|
|
891
|
+
runtimeCaching: {
|
|
892
|
+
type: "array",
|
|
893
|
+
description: "Runtime-caching rules appended after the built-in rules. Workbox is first-match-wins, so these cannot override a built-in rule matching the same URL.",
|
|
894
|
+
items: {
|
|
895
|
+
type: "object",
|
|
896
|
+
additionalProperties: false,
|
|
897
|
+
required: ["urlPattern", "handler"],
|
|
898
|
+
properties: {
|
|
899
|
+
urlPattern: pwaUrlPatternSchema,
|
|
900
|
+
handler: {
|
|
901
|
+
type: "string",
|
|
902
|
+
enum: [
|
|
903
|
+
"CacheFirst",
|
|
904
|
+
"CacheOnly",
|
|
905
|
+
"NetworkFirst",
|
|
906
|
+
"NetworkOnly",
|
|
907
|
+
"StaleWhileRevalidate"
|
|
908
|
+
]
|
|
909
|
+
},
|
|
910
|
+
method: {
|
|
911
|
+
type: "string",
|
|
912
|
+
enum: [
|
|
913
|
+
"GET",
|
|
914
|
+
"POST",
|
|
915
|
+
"PUT",
|
|
916
|
+
"DELETE",
|
|
917
|
+
"HEAD",
|
|
918
|
+
"PATCH"
|
|
919
|
+
]
|
|
920
|
+
},
|
|
921
|
+
options: {
|
|
922
|
+
type: "object",
|
|
923
|
+
additionalProperties: false,
|
|
924
|
+
properties: {
|
|
925
|
+
cacheName: { type: "string" },
|
|
926
|
+
networkTimeoutSeconds: {
|
|
927
|
+
type: "number",
|
|
928
|
+
description: "Seconds a NetworkFirst rule waits for the network before falling back to the cache."
|
|
929
|
+
},
|
|
930
|
+
expiration: {
|
|
931
|
+
type: "object",
|
|
932
|
+
additionalProperties: false,
|
|
933
|
+
properties: {
|
|
934
|
+
maxEntries: { type: "number" },
|
|
935
|
+
maxAgeSeconds: { type: "number" }
|
|
936
|
+
}
|
|
937
|
+
},
|
|
938
|
+
cacheableResponse: {
|
|
939
|
+
type: "object",
|
|
940
|
+
additionalProperties: false,
|
|
941
|
+
properties: {
|
|
942
|
+
statuses: {
|
|
943
|
+
type: "array",
|
|
944
|
+
items: { type: "number" }
|
|
945
|
+
},
|
|
946
|
+
headers: {
|
|
947
|
+
type: "object",
|
|
948
|
+
additionalProperties: { type: "string" }
|
|
949
|
+
}
|
|
950
|
+
}
|
|
951
|
+
}
|
|
952
|
+
}
|
|
953
|
+
}
|
|
954
|
+
}
|
|
955
|
+
}
|
|
956
|
+
},
|
|
957
|
+
navigateFallbackDenylist: {
|
|
958
|
+
type: "array",
|
|
959
|
+
description: "Extra SPA navigate-fallback denylist patterns, unioned with the built-ins.",
|
|
960
|
+
items: pwaUrlPatternSchema
|
|
961
|
+
}
|
|
962
|
+
}
|
|
437
963
|
}
|
|
438
964
|
}
|
|
439
965
|
};
|
|
440
966
|
//#endregion
|
|
441
|
-
export { ConfigLoader, DEFAULT_CONNECT_CONFIG, JsonConfigAdapter, ROOT_STORAGE_NAMESPACE, buildRuntimeConfig, connectEnvSchema, deepMerge, getStorageNamespace, loadConnectEnv, loadRuntimeEnv, normalizeBasePath, phConnectRuntimeConfigSchema, powerhousePackageSchema, runtimeEnvSchema, setConnectEnv };
|
|
967
|
+
export { ConfigLoader, DEFAULT_CONNECT_CONFIG, JsonConfigAdapter, PWA_FILE_HANDLER_ACTION, PWA_IDB_KEY, PWA_IDB_NAME, PWA_IDB_STORE, PWA_IDB_VERSION, ROOT_STORAGE_NAMESPACE, buildRuntimeConfig, connectEnvSchema, dedupeFileHandlers, dedupeIcons, deepMerge, getStorageNamespace, loadConnectEnv, loadRuntimeEnv, mergeManifest, mergePwaConfig, normalizeBasePath, phConnectRuntimeConfigSchema, powerhousePackageSchema, runtimeEnvSchema, setConnectEnv, toRegExpOrString, unionStrings, withInferredCategory };
|
|
442
968
|
|
|
443
969
|
//# sourceMappingURL=index.js.map
|