@harperfast/harper 5.2.0-beta.1 → 5.2.0-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cliOperations.ts +76 -12
- package/bin/run.ts +10 -0
- package/bin/status.ts +1 -1
- package/components/Application.ts +146 -83
- package/components/Scope.ts +4 -0
- package/components/componentLoader.ts +7 -0
- package/components/operations.js +21 -1
- package/config/configUtils.ts +139 -5
- package/config-app.schema.json +70 -0
- package/dist/bin/cliOperations.js +76 -12
- package/dist/bin/cliOperations.js.map +1 -1
- package/dist/bin/run.js +9 -0
- package/dist/bin/run.js.map +1 -1
- package/dist/bin/status.js +1 -1
- package/dist/bin/status.js.map +1 -1
- package/dist/components/Application.d.ts +12 -5
- package/dist/components/Application.js +121 -60
- package/dist/components/Application.js.map +1 -1
- package/dist/components/Scope.d.ts +1 -0
- package/dist/components/Scope.js +4 -0
- package/dist/components/Scope.js.map +1 -1
- package/dist/components/componentLoader.js +7 -0
- package/dist/components/componentLoader.js.map +1 -1
- package/dist/components/operations.js +20 -1
- package/dist/components/operations.js.map +1 -1
- package/dist/config/configUtils.d.ts +31 -0
- package/dist/config/configUtils.js +127 -5
- package/dist/config/configUtils.js.map +1 -1
- package/dist/resources/DatabaseTransaction.d.ts +12 -0
- package/dist/resources/DatabaseTransaction.js +97 -0
- package/dist/resources/DatabaseTransaction.js.map +1 -1
- package/dist/resources/RequestTarget.js +13 -3
- package/dist/resources/RequestTarget.js.map +1 -1
- package/dist/resources/Resource.js +16 -0
- package/dist/resources/Resource.js.map +1 -1
- package/dist/resources/Table.js +35 -2
- package/dist/resources/Table.js.map +1 -1
- package/dist/resources/analytics/metadata.d.ts +3 -0
- package/dist/resources/analytics/metadata.js +3 -0
- package/dist/resources/analytics/metadata.js.map +1 -1
- package/dist/resources/analytics/write.js +22 -0
- package/dist/resources/analytics/write.js.map +1 -1
- package/dist/resources/defineResource.js +20 -7
- package/dist/resources/defineResource.js.map +1 -1
- package/dist/resources/jsResource.d.ts +24 -0
- package/dist/resources/jsResource.js +58 -2
- package/dist/resources/jsResource.js.map +1 -1
- package/dist/resources/openApi.js +45 -20
- package/dist/resources/openApi.js.map +1 -1
- package/dist/resources/scheduler/CronExpression.d.ts +71 -0
- package/dist/resources/scheduler/CronExpression.js +367 -0
- package/dist/resources/scheduler/CronExpression.js.map +1 -0
- package/dist/resources/scheduler/engine.d.ts +91 -0
- package/dist/resources/scheduler/engine.js +767 -0
- package/dist/resources/scheduler/engine.js.map +1 -0
- package/dist/resources/scheduler/scheduler.d.ts +33 -0
- package/dist/resources/scheduler/scheduler.js +200 -0
- package/dist/resources/scheduler/scheduler.js.map +1 -0
- package/dist/security/auth.js +1 -0
- package/dist/security/auth.js.map +1 -1
- package/dist/security/jsLoader.js +8 -0
- package/dist/security/jsLoader.js.map +1 -1
- package/dist/security/keys.d.ts +32 -0
- package/dist/security/keys.js +147 -0
- package/dist/security/keys.js.map +1 -1
- package/dist/server/REST.js +67 -1
- package/dist/server/REST.js.map +1 -1
- package/dist/server/Server.d.ts +6 -0
- package/dist/server/Server.js.map +1 -1
- package/dist/server/http.d.ts +2 -0
- package/dist/server/http.js +139 -14
- package/dist/server/http.js.map +1 -1
- package/dist/server/operationsServer.js +3 -3
- package/dist/server/operationsServer.js.map +1 -1
- package/dist/server/serverHelpers/progressEmitter.js +5 -1
- package/dist/server/serverHelpers/progressEmitter.js.map +1 -1
- package/dist/server/threads/threadServer.js +9 -5
- package/dist/server/threads/threadServer.js.map +1 -1
- package/dist/utility/common_utils.js +25 -0
- package/dist/utility/common_utils.js.map +1 -1
- package/dist/utility/install/installer.d.ts +9 -1
- package/dist/utility/install/installer.js +21 -0
- package/dist/utility/install/installer.js.map +1 -1
- package/dist/validation/configValidator.js +3 -0
- package/dist/validation/configValidator.js.map +1 -1
- package/npm-shrinkwrap.json +272 -230
- package/package.json +3 -3
- package/resources/DESIGN.md +1 -1
- package/resources/DatabaseTransaction.ts +95 -0
- package/resources/RequestTarget.ts +12 -3
- package/resources/Resource.ts +18 -0
- package/resources/Table.ts +34 -3
- package/resources/analytics/metadata.ts +3 -0
- package/resources/analytics/write.ts +23 -0
- package/resources/defineResource.ts +17 -4
- package/resources/jsResource.ts +61 -2
- package/resources/openApi.ts +44 -19
- package/resources/scheduler/CronExpression.ts +394 -0
- package/resources/scheduler/engine.ts +812 -0
- package/resources/scheduler/scheduler.ts +236 -0
- package/security/auth.ts +1 -0
- package/security/jsLoader.ts +8 -0
- package/security/keys.ts +152 -0
- package/server/REST.ts +70 -1
- package/server/Server.ts +6 -0
- package/server/http.ts +122 -15
- package/server/operationsServer.ts +5 -3
- package/server/serverHelpers/progressEmitter.ts +5 -1
- package/server/threads/threadServer.js +9 -5
- package/studio/web/assets/{Chat-BZks8dVF.js → Chat-DHP4XpID.js} +2 -2
- package/studio/web/assets/{Chat-BZks8dVF.js.map → Chat-DHP4XpID.js.map} +1 -1
- package/studio/web/assets/{FloatingChat-Dic8paVO.js → FloatingChat-CJ7PssCv.js} +4 -4
- package/studio/web/assets/{FloatingChat-Dic8paVO.js.map → FloatingChat-CJ7PssCv.js.map} +1 -1
- package/studio/web/assets/{applications-uOXkeUIN.js → applications-DxXiGpsR.js} +2 -2
- package/studio/web/assets/{applications-uOXkeUIN.js.map → applications-DxXiGpsR.js.map} +1 -1
- package/studio/web/assets/{index-i-2wrKhv.js → index-BdbBanDP.js} +6 -6
- package/studio/web/assets/{index-i-2wrKhv.js.map → index-BdbBanDP.js.map} +1 -1
- package/studio/web/assets/{index.lazy-Csk8eCoB.js → index.lazy-B2eH28zD.js} +4 -4
- package/studio/web/assets/{index.lazy-Csk8eCoB.js.map → index.lazy-B2eH28zD.js.map} +1 -1
- package/studio/web/assets/{profile-Sb3mGDl6.js → profile-DK5hgucv.js} +2 -2
- package/studio/web/assets/{profile-Sb3mGDl6.js.map → profile-DK5hgucv.js.map} +1 -1
- package/studio/web/assets/{setComponentFile-BgZcaPJ2.js → setComponentFile-BVDWRYxx.js} +2 -2
- package/studio/web/assets/{setComponentFile-BgZcaPJ2.js.map → setComponentFile-BVDWRYxx.js.map} +1 -1
- package/studio/web/assets/{setup-DKtlLgmT.js → setup-DJ9BInoK.js} +2 -2
- package/studio/web/assets/{setup-DKtlLgmT.js.map → setup-DJ9BInoK.js.map} +1 -1
- package/studio/web/assets/{status-B45iLeug.js → status-B_qzmgfD.js} +2 -2
- package/studio/web/assets/{status-B45iLeug.js.map → status-B_qzmgfD.js.map} +1 -1
- package/studio/web/assets/{swagger-ui-react-Csu4026e.js → swagger-ui-react-DOL5jCqg.js} +2 -2
- package/studio/web/assets/{swagger-ui-react-Csu4026e.js.map → swagger-ui-react-DOL5jCqg.js.map} +1 -1
- package/studio/web/assets/{tsMode-DVgxUr_l.js → tsMode-DpxUxfTW.js} +2 -2
- package/studio/web/assets/{tsMode-DVgxUr_l.js.map → tsMode-DpxUxfTW.js.map} +1 -1
- package/studio/web/assets/{useEntityRestURL-yfDQMV1f.js → useEntityRestURL-CU_lY6XW.js} +2 -2
- package/studio/web/assets/{useEntityRestURL-yfDQMV1f.js.map → useEntityRestURL-CU_lY6XW.js.map} +1 -1
- package/studio/web/index.html +1 -1
- package/utility/common_utils.ts +26 -0
- package/utility/install/installer.ts +26 -1
- package/validation/configValidator.ts +3 -0
package/dist/resources/Table.js
CHANGED
|
@@ -1168,7 +1168,7 @@ function makeTable(options) {
|
|
|
1168
1168
|
// go back to the static search method so it gets a chance to override
|
|
1169
1169
|
return constructor.search(target, this.getContext());
|
|
1170
1170
|
}
|
|
1171
|
-
if (target && target.id
|
|
1171
|
+
if (target && target.id == null && !target.toString()) {
|
|
1172
1172
|
const description = {
|
|
1173
1173
|
// basically a describe call
|
|
1174
1174
|
records: './', // an href to the records themselves
|
|
@@ -1986,7 +1986,10 @@ function makeTable(options) {
|
|
|
1986
1986
|
let residencyId;
|
|
1987
1987
|
if (options?.residencyId != undefined)
|
|
1988
1988
|
residencyId = options.residencyId;
|
|
1989
|
-
|
|
1989
|
+
// options/context expiresAt are the most specific overrides; a record @expiresAt field
|
|
1990
|
+
// (resolved below, once recordToStore is merged) overrides the table default in both
|
|
1991
|
+
// directions; the table default is the final fallback. -1 means no expiration.
|
|
1992
|
+
let expiresAt = options?.expiresAt ?? context?.expiresAt;
|
|
1990
1993
|
const additionalAuditRefs = []; // track additional audit refs to store
|
|
1991
1994
|
// Bulk base-copy snapshot apply: store current-state directly with no audit/transaction-log entry
|
|
1992
1995
|
// and no out-of-order resequencing/dedup (the source of the O(n) keyed-lookup spin in
|
|
@@ -2354,6 +2357,36 @@ function makeTable(options) {
|
|
|
2354
2357
|
}
|
|
2355
2358
|
residencyId = getResidencyId(residency);
|
|
2356
2359
|
}
|
|
2360
|
+
if (expiresAt == undefined) {
|
|
2361
|
+
// A schema @expiresAt attribute makes the record field authoritative over the table
|
|
2362
|
+
// default, in both directions: stamp it into the stored expiry metadata that governs
|
|
2363
|
+
// read-hiding and the cleanup sweep, not just the separate index-pruning sweep (which
|
|
2364
|
+
// only removes already-past records and so can never extend past the table default).
|
|
2365
|
+
// Read from recordToStore so the metadata matches exactly what the pruning sweep later
|
|
2366
|
+
// reads back. Falls back to the table default when the field is unset or not a timestamp.
|
|
2367
|
+
const fieldExpiresAt = expiresAtProperty ? recordToStore?.[expiresAtProperty.name] : undefined;
|
|
2368
|
+
// Coerce only genuine timestamp shapes: a number/bigint epoch, a Date, or a numeric/ISO
|
|
2369
|
+
// string. Booleans, empty/whitespace strings, and null/undefined fall through to NaN so a
|
|
2370
|
+
// nonsensical field value uses the table default rather than expiring the record at epoch 0.
|
|
2371
|
+
let fieldExpiresAtMs = NaN;
|
|
2372
|
+
if (typeof fieldExpiresAt === 'number' || typeof fieldExpiresAt === 'bigint')
|
|
2373
|
+
fieldExpiresAtMs = Number(fieldExpiresAt);
|
|
2374
|
+
else if (fieldExpiresAt instanceof Date)
|
|
2375
|
+
fieldExpiresAtMs = fieldExpiresAt.getTime();
|
|
2376
|
+
else if (typeof fieldExpiresAt === 'string' && fieldExpiresAt.trim() !== '') {
|
|
2377
|
+
const numeric = Number(fieldExpiresAt);
|
|
2378
|
+
fieldExpiresAtMs = Number.isFinite(numeric) ? numeric : Date.parse(fieldExpiresAt);
|
|
2379
|
+
}
|
|
2380
|
+
// Only a finite, non-negative epoch counts: negatives collide with the -1 "no expiration"
|
|
2381
|
+
// sentinel (the encoder omits HAS_EXPIRATION for <0, but the field sweep would still evict a
|
|
2382
|
+
// negative field value), so treat a negative/NaN field as unset and use the table default.
|
|
2383
|
+
expiresAt =
|
|
2384
|
+
Number.isFinite(fieldExpiresAtMs) && fieldExpiresAtMs >= 0
|
|
2385
|
+
? fieldExpiresAtMs
|
|
2386
|
+
: expirationMs
|
|
2387
|
+
? expirationMs + Date.now()
|
|
2388
|
+
: -1;
|
|
2389
|
+
}
|
|
2357
2390
|
if (!fullUpdate) {
|
|
2358
2391
|
// we use our own data as the basis for the audit record, which will include information about the incremental updates, even if it was overwritten by CRDT resolution
|
|
2359
2392
|
auditRecordToStore = recordUpdate;
|