@absolutejs/absolute 0.20.0-beta.133 → 0.20.0-beta.134
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 +14 -0
- package/changelog.json +24 -0
- package/dist/angular/components/core/streamingSlotRegistrar.js +1 -1
- package/dist/angular/components/core/streamingSlotRegistry.js +2 -2
- package/dist/build.js +25 -4
- package/dist/build.js.map +5 -5
- package/dist/cli/{compile-nf4qsqyd.js → compile-dae4qez4.js} +3 -2
- package/dist/cli/{config-3te1fbry.js → config-hy5dkexz.js} +1 -1
- package/dist/cli/{dev-j3dhb396.js → dev-wv69we44.js} +1 -1
- package/dist/cli/{index-c3tqbpkq.js → index-f0bjr9s0.js} +2 -2
- package/dist/cli/{index-hfvxsgf4.js → index-gy8rm8hs.js} +199 -64
- package/dist/cli/{index-rrxeqrbn.js → index-t7yf3vxs.js} +8 -0
- package/dist/cli/index.js +5 -5
- package/dist/cli/{mobile-m0cdh8cf.js → mobile-5tx2cfm5.js} +3 -3
- package/dist/cli/{start-3z3gtgm0.js → start-tpebqwc0.js} +3 -3
- package/dist/dev/serverBootstrap.js +1 -1
- package/dist/index.js +25 -4
- package/dist/index.js.map +5 -5
- package/dist/mobile/index.js +46 -14
- package/dist/mobile/index.js.map +6 -6
- package/dist/mobile/remoteMacAgentEntry.js +66 -66
- package/dist/mobile/shellBootstrap.js +23 -0
- package/dist/src/mobile/artifactStore.d.ts +4 -0
- package/dist/src/mobile/config.d.ts +4 -0
- package/dist/src/mobile/pushDeepLinks.d.ts +16 -0
- package/dist/types/build.d.ts +11 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,20 @@ 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.134 — 2026-10-08
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- **Mobile release history can live in a blob store, so CI builds keep serving installed apps** (`NormalizedAbsoluteMobileConfig`)
|
|
14
|
+
Builds keep answering the three most recent mobile releases so installed apps keep working, but that history lived only in the build directory, so a fresh checkout such as a CI run started with none and every installed app was asked to update. Set `mobile.compatibility.store` to a project module whose default export is a blob store (for example `awsS3BlobStore` from `@absolutejs/blob/aws-s3`) and `absolute start` and `absolute compile` read the history from it and write each new release back. Releases that only an existing build directory knows are copied into the store on the first build, and `mobile.compatibility.prefix` keeps several apps or environments in one bucket apart. The store does not change the app's runtime fingerprint.
|
|
15
|
+
- **Tapping a push notification opens its deepLink inside the app**
|
|
16
|
+
A push sent with `deepLink` carried it to the device as `absoluteDeepLink`, but tapping the notification only opened the app. Tapping it now opens that page inside the app, in Capacitor and Expo apps alike. The link takes the same route as any other deep link, so only the app's configured HTTPS hosts and its URL scheme are opened; anything else is ignored. Action buttons other than the notification body are still left to the app's own `pushNotifications.onAction` listener.
|
|
17
|
+
|
|
18
|
+
### Fixed
|
|
19
|
+
|
|
20
|
+
- **PDF assets are served as application/pdf**
|
|
21
|
+
PDF assets were served without a PDF content type in `absolute dev` and in compiled apps, so browsers could download them instead of opening them. They are now served as `application/pdf`.
|
|
22
|
+
|
|
9
23
|
## 0.20.0-beta.133 — 2026-10-06
|
|
10
24
|
|
|
11
25
|
### Changed
|
package/changelog.json
CHANGED
|
@@ -2,6 +2,30 @@
|
|
|
2
2
|
"contract": 1,
|
|
3
3
|
"name": "@absolutejs/absolute",
|
|
4
4
|
"releases": [
|
|
5
|
+
{
|
|
6
|
+
"changes": [
|
|
7
|
+
{
|
|
8
|
+
"detail": "Builds keep answering the three most recent mobile releases so installed apps keep working, but that history lived only in the build directory, so a fresh checkout such as a CI run started with none and every installed app was asked to update. Set `mobile.compatibility.store` to a project module whose default export is a blob store (for example `awsS3BlobStore` from `@absolutejs/blob/aws-s3`) and `absolute start` and `absolute compile` read the history from it and write each new release back. Releases that only an existing build directory knows are copied into the store on the first build, and `mobile.compatibility.prefix` keeps several apps or environments in one bucket apart. The store does not change the app's runtime fingerprint.",
|
|
9
|
+
"kind": "added",
|
|
10
|
+
"summary": "Mobile release history can live in a blob store, so CI builds keep serving installed apps",
|
|
11
|
+
"symbols": [
|
|
12
|
+
"NormalizedAbsoluteMobileConfig"
|
|
13
|
+
]
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
"detail": "PDF assets were served without a PDF content type in `absolute dev` and in compiled apps, so browsers could download them instead of opening them. They are now served as `application/pdf`.",
|
|
17
|
+
"kind": "fixed",
|
|
18
|
+
"summary": "PDF assets are served as application/pdf"
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
"detail": "A push sent with `deepLink` carried it to the device as `absoluteDeepLink`, but tapping the notification only opened the app. Tapping it now opens that page inside the app, in Capacitor and Expo apps alike. The link takes the same route as any other deep link, so only the app's configured HTTPS hosts and its URL scheme are opened; anything else is ignored. Action buttons other than the notification body are still left to the app's own `pushNotifications.onAction` listener.",
|
|
22
|
+
"kind": "added",
|
|
23
|
+
"summary": "Tapping a push notification opens its deepLink inside the app"
|
|
24
|
+
}
|
|
25
|
+
],
|
|
26
|
+
"date": "2026-10-08",
|
|
27
|
+
"version": "0.20.0-beta.134"
|
|
28
|
+
},
|
|
5
29
|
{
|
|
6
30
|
"changes": [
|
|
7
31
|
{
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
// .angular-partial-tmp-
|
|
2
|
+
// .angular-partial-tmp-47WTEl/src/core/streamingSlotRegistrar.ts
|
|
3
3
|
var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
|
|
4
4
|
var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
|
|
5
5
|
var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// @bun
|
|
2
|
-
// .angular-partial-tmp-
|
|
2
|
+
// .angular-partial-tmp-47WTEl/src/core/streamingSlotRegistrar.ts
|
|
3
3
|
var STREAMING_SLOT_REGISTRAR_KEY = Symbol.for("absolutejs.streamingSlotRegistrar");
|
|
4
4
|
var STREAMING_SLOT_WARNING_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotWarningController");
|
|
5
5
|
var STREAMING_SLOT_COLLECTION_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotCollectionController");
|
|
@@ -46,7 +46,7 @@ var warnMissingStreamingSlotCollector = (primitiveName) => {
|
|
|
46
46
|
getWarningController()?.maybeWarn(primitiveName);
|
|
47
47
|
};
|
|
48
48
|
|
|
49
|
-
// .angular-partial-tmp-
|
|
49
|
+
// .angular-partial-tmp-47WTEl/src/core/streamingSlotRegistry.ts
|
|
50
50
|
var STREAMING_SLOT_STORAGE_KEY = Symbol.for("absolutejs.streamingSlotAsyncLocalStorage");
|
|
51
51
|
var isObjectRecord2 = (value) => Boolean(value) && typeof value === "object";
|
|
52
52
|
var isAsyncLocalStorage = (value) => isObjectRecord2(value) && ("getStore" in value) && typeof value.getStore === "function" && ("run" in value) && typeof value.run === "function";
|
package/dist/build.js
CHANGED
|
@@ -21637,7 +21637,7 @@ var init_compileAngular = __esm(() => {
|
|
|
21637
21637
|
|
|
21638
21638
|
// node_modules/content-tag/pkg/node/content_tag.cjs
|
|
21639
21639
|
var require_content_tag = __commonJS(function(exports, module) {
|
|
21640
|
-
var __dirname = "/
|
|
21640
|
+
var __dirname = "/home/runner/work/absolutejs/absolutejs/node_modules/content-tag/pkg/node";
|
|
21641
21641
|
var imports = {};
|
|
21642
21642
|
imports["__wbindgen_placeholder__"] = exports;
|
|
21643
21643
|
var wasm;
|
|
@@ -25764,6 +25764,7 @@ var init_assetStore = __esm(() => {
|
|
|
25764
25764
|
".map": "application/json",
|
|
25765
25765
|
".mjs": "application/javascript",
|
|
25766
25766
|
".otf": "font/otf",
|
|
25767
|
+
".pdf": "application/pdf",
|
|
25767
25768
|
".png": "image/png",
|
|
25768
25769
|
".svg": "image/svg+xml",
|
|
25769
25770
|
".ttf": "font/ttf",
|
|
@@ -27987,6 +27988,14 @@ var APP_ID_PATTERN, SCHEME_PATTERN, APPLE_APP_ID_PREFIX_PATTERN, CERTIFICATE_FIN
|
|
|
27987
27988
|
appName: requireText(config.appName, "mobile.appName"),
|
|
27988
27989
|
...branding ? { branding } : {},
|
|
27989
27990
|
bundleDirectory: resolveProjectPath(projectRoot, config.bundleDirectory ?? ".absolutejs/mobile/web", "mobile.bundleDirectory"),
|
|
27991
|
+
...config.compatibility ? {
|
|
27992
|
+
compatibilityStore: {
|
|
27993
|
+
modulePath: resolveProjectPath(projectRoot, requireText(config.compatibility.store, "mobile.compatibility.store"), "mobile.compatibility.store"),
|
|
27994
|
+
...config.compatibility.prefix === undefined ? {} : {
|
|
27995
|
+
prefix: requireText(config.compatibility.prefix, "mobile.compatibility.prefix")
|
|
27996
|
+
}
|
|
27997
|
+
}
|
|
27998
|
+
} : {},
|
|
27990
27999
|
deepLinkHosts: normalizeHosts(config.deepLinks?.hosts, productionOrigin),
|
|
27991
28000
|
deepLinkScheme,
|
|
27992
28001
|
engine: config.engine ?? "capacitor",
|
|
@@ -30064,6 +30073,7 @@ import {
|
|
|
30064
30073
|
writeFile as writeFile11
|
|
30065
30074
|
} from "fs/promises";
|
|
30066
30075
|
import { join as join56, resolve as resolvePath } from "path";
|
|
30076
|
+
import { pathToFileURL as pathToFileURL4 } from "url";
|
|
30067
30077
|
var DEFAULT_MAX_PRODUCER_BYTES = 134217728, SHA_2562 = "sha256", ARTIFACT_FILE = "artifact.json", RELEASE_ID_PATTERN, DEFAULT_BLOB_PREFIX = "absolutejs/mobile-compatibility", hashBlob = async (blob) => {
|
|
30068
30078
|
const bytes = new Uint8Array(await blob.arrayBuffer());
|
|
30069
30079
|
return createHash7(SHA_2562).update(bytes).digest("hex");
|
|
@@ -30242,6 +30252,17 @@ var DEFAULT_MAX_PRODUCER_BYTES = 134217728, SHA_2562 = "sha256", ARTIFACT_FILE =
|
|
|
30242
30252
|
}
|
|
30243
30253
|
}
|
|
30244
30254
|
};
|
|
30255
|
+
}, isFunctionRecord = (value, keys) => typeof value === "object" && value !== null && keys.every((key) => typeof Reflect.get(value, key) === "function"), isArtifactStore = (value) => isFunctionRecord(value, ["delete", "list", "read", "write"]), isBlobStore = (value) => isFunctionRecord(value, ["delete", "get", "list", "put"]), loadAbsoluteMobileCompatibilityStore = async (options) => {
|
|
30256
|
+
const loaded = await import(pathToFileURL4(options.modulePath).href);
|
|
30257
|
+
const exported = typeof loaded === "object" && loaded !== null ? Reflect.get(loaded, "default") ?? Reflect.get(loaded, "store") : undefined;
|
|
30258
|
+
if (isArtifactStore(exported))
|
|
30259
|
+
return exported;
|
|
30260
|
+
if (isBlobStore(exported))
|
|
30261
|
+
return createAbsoluteMobileBlobArtifactStore({
|
|
30262
|
+
...options.prefix === undefined ? {} : { prefix: options.prefix },
|
|
30263
|
+
store: exported
|
|
30264
|
+
});
|
|
30265
|
+
throw new TypeError(`mobile.compatibility.store (${options.modulePath}) must export a blob store with get, put, list and delete.`);
|
|
30245
30266
|
}, verifyAbsoluteMobileCompatibilityProducer = async (release, maxProducerBytes = DEFAULT_MAX_PRODUCER_BYTES) => {
|
|
30246
30267
|
const { artifact, producer } = release;
|
|
30247
30268
|
if (producer.size !== artifact.producer.bytes || producer.size > maxProducerBytes) {
|
|
@@ -30276,7 +30297,7 @@ import {
|
|
|
30276
30297
|
writeFile as writeFile12
|
|
30277
30298
|
} from "fs/promises";
|
|
30278
30299
|
import { dirname as dirname34, join as join57, resolve as resolvePath2 } from "path";
|
|
30279
|
-
import { pathToFileURL as
|
|
30300
|
+
import { pathToFileURL as pathToFileURL5 } from "url";
|
|
30280
30301
|
var ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT = 1, CURRENT_BUNDLE_FILE = "current.json", BUNDLES_DIRECTORY = "bundles", ARTIFACT_FILE2 = "artifact.json", BUNDLE_ID_PATTERN, isRecord9 = (value) => typeof value === "object" && value !== null && !Array.isArray(value), errorHasCode2 = (error, code) => typeof error === "object" && error !== null && Reflect.get(error, "code") === code, bundleIdFor = (currentReleaseId, releases) => {
|
|
30281
30302
|
const identity = JSON.stringify({
|
|
30282
30303
|
currentReleaseId,
|
|
@@ -30335,7 +30356,7 @@ var ABSOLUTE_MOBILE_MATERIALIZED_BUNDLE_FORMAT = 1, CURRENT_BUNDLE_FILE = "curre
|
|
|
30335
30356
|
throw error;
|
|
30336
30357
|
}
|
|
30337
30358
|
return destination;
|
|
30338
|
-
}, readCompatibilityModule = (modulePath) => import(
|
|
30359
|
+
}, readCompatibilityModule = (modulePath) => import(pathToFileURL5(modulePath).href), resolveProducerHandler = (loaded, exportName) => {
|
|
30339
30360
|
const value = loaded[exportName];
|
|
30340
30361
|
if (!isRecord9(value) || typeof value.handle !== "function") {
|
|
30341
30362
|
throw new TypeError(`Compatibility producer export ${exportName} must expose handle(request).`);
|
|
@@ -37596,5 +37617,5 @@ export {
|
|
|
37596
37617
|
devBuild
|
|
37597
37618
|
};
|
|
37598
37619
|
|
|
37599
|
-
//# debugId=
|
|
37620
|
+
//# debugId=38D11963F42C01EC64756E2164756E21
|
|
37600
37621
|
//# sourceMappingURL=build.js.map
|