@powerhousedao/powerhouse-vetra-packages 6.2.2-dev.42 → 6.2.2-dev.44
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/browser/assets/{entry-Db_lIhQq.js → entry-C2ClkbVN.js} +2 -2
- package/dist/browser/assets/{projection-entry-DqgHaUSy.js → projection-entry-S39DdeT-.js} +3 -3
- package/dist/browser/{linting-_AQWr8aE.js → button-CuO8Gh3v.js} +17 -4
- package/dist/browser/button-CuO8Gh3v.js.map +1 -0
- package/dist/browser/{connect-BUnNjGUW.js → connect-70_1bgIZ.js} +49 -7
- package/dist/browser/{connect-BUnNjGUW.js.map → connect-70_1bgIZ.js.map} +1 -1
- package/dist/browser/{dist-BatmWBzA.js → dist-CXIjN0Ex.js} +150 -25
- package/dist/browser/dist-CXIjN0Ex.js.map +1 -0
- package/dist/browser/{document-drive-D3Z9vXTQ.js → document-drive-PYPIaEvw.js} +197 -13
- package/dist/browser/document-drive-PYPIaEvw.js.map +1 -0
- package/dist/browser/document-models/index.js +1 -1
- package/dist/browser/{editor-BLeFoOh6.js → editor-DOJeQKlN.js} +5 -5
- package/dist/browser/{editor-BLeFoOh6.js.map → editor-DOJeQKlN.js.map} +1 -1
- package/dist/browser/{editor-Bn6uXvxG.js → editor-QW6D3wl8.js} +668 -101
- package/dist/browser/editor-QW6D3wl8.js.map +1 -0
- package/dist/browser/editors/document-model-editor/module.js +1 -1
- package/dist/browser/editors/generic-drive-explorer/index.js +4 -4
- package/dist/browser/editors/generic-drive-explorer/module.js +1 -1
- package/dist/browser/{folder-view-DNzFnfW2.js → folder-view-VM5cJbvv.js} +29 -10
- package/dist/browser/folder-view-VM5cJbvv.js.map +1 -0
- package/dist/browser/{graphql-editor-DWo8N_z4.js → graphql-editor-CjpiNMV0.js} +3 -3
- package/dist/browser/{graphql-editor-DWo8N_z4.js.map → graphql-editor-CjpiNMV0.js.map} +1 -1
- package/dist/browser/index.js +378 -9
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/{json-editor-CEugjpFj.js → json-editor-CeIHor4v.js} +3 -3
- package/dist/browser/{json-editor-CEugjpFj.js.map → json-editor-CeIHor4v.js.map} +1 -1
- package/dist/browser/{lib-CiaHsAaR.js → lib-PZlA5c3e.js} +2 -2
- package/dist/browser/lib-PZlA5c3e.js.map +1 -0
- package/dist/browser/{state-schemas-VrticHe4.js → state-schemas-CbPirA44.js} +5 -15
- package/dist/browser/state-schemas-CbPirA44.js.map +1 -0
- package/dist/node/{linting-BjvRPjCY.mjs → button-Da7CxMn7.mjs} +17 -4
- package/dist/node/button-Da7CxMn7.mjs.map +1 -0
- package/dist/node/{connect-wMkkAckX.mjs → connect-CkBYxX_q.mjs} +49 -7
- package/dist/node/{connect-wMkkAckX.mjs.map → connect-CkBYxX_q.mjs.map} +1 -1
- package/dist/node/{dist-CUHBOv3P.mjs → dist-CS8QwZwZ.mjs} +150 -25
- package/dist/node/dist-CS8QwZwZ.mjs.map +1 -0
- package/dist/node/{document-drive-CI0J7nMj.mjs → document-drive-DrBAR9as.mjs} +197 -13
- package/dist/node/document-drive-DrBAR9as.mjs.map +1 -0
- package/dist/node/document-models/index.mjs +1 -1
- package/dist/node/{editor-Cr-mNQca.mjs → editor-ClZqmnoh.mjs} +670 -103
- package/dist/node/editor-ClZqmnoh.mjs.map +1 -0
- package/dist/node/{editor-aIeTo2EE.mjs → editor-Dv22q5WR.mjs} +5 -5
- package/dist/node/{editor-aIeTo2EE.mjs.map → editor-Dv22q5WR.mjs.map} +1 -1
- package/dist/node/editors/document-model-editor/module.mjs +1 -1
- package/dist/node/editors/generic-drive-explorer/index.mjs +4 -4
- package/dist/node/editors/generic-drive-explorer/module.mjs +1 -1
- package/dist/node/{folder-view-_x1OBYZN.mjs → folder-view-6H-dMp8X.mjs} +29 -10
- package/dist/node/folder-view-6H-dMp8X.mjs.map +1 -0
- package/dist/node/{graphql-editor-Dd2_z5QJ.mjs → graphql-editor-DP0o3W7f.mjs} +3 -3
- package/dist/node/{graphql-editor-Dd2_z5QJ.mjs.map → graphql-editor-DP0o3W7f.mjs.map} +1 -1
- package/dist/node/index.mjs +378 -9
- package/dist/node/index.mjs.map +1 -1
- package/dist/node/{json-editor-Dphg6ZeL.mjs → json-editor-CNbnXYz6.mjs} +3 -3
- package/dist/node/{json-editor-Dphg6ZeL.mjs.map → json-editor-CNbnXYz6.mjs.map} +1 -1
- package/dist/node/{main-Db0ei9wX.mjs → main-aITg389Z.mjs} +2 -2
- package/dist/node/main-aITg389Z.mjs.map +1 -0
- package/dist/node/{state-schemas-BSLgTw2O.mjs → state-schemas-CylQoH3Q.mjs} +6 -16
- package/dist/{browser/state-schemas-VrticHe4.js.map → node/state-schemas-CylQoH3Q.mjs.map} +1 -1
- package/package.json +7 -6
- package/dist/browser/dist-BatmWBzA.js.map +0 -1
- package/dist/browser/document-drive-D3Z9vXTQ.js.map +0 -1
- package/dist/browser/editor-Bn6uXvxG.js.map +0 -1
- package/dist/browser/folder-view-DNzFnfW2.js.map +0 -1
- package/dist/browser/lib-CiaHsAaR.js.map +0 -1
- package/dist/browser/linting-_AQWr8aE.js.map +0 -1
- package/dist/node/dist-CUHBOv3P.mjs.map +0 -1
- package/dist/node/document-drive-CI0J7nMj.mjs.map +0 -1
- package/dist/node/editor-Cr-mNQca.mjs.map +0 -1
- package/dist/node/folder-view-_x1OBYZN.mjs.map +0 -1
- package/dist/node/linting-BjvRPjCY.mjs.map +0 -1
- package/dist/node/main-Db0ei9wX.mjs.map +0 -1
- package/dist/node/state-schemas-BSLgTw2O.mjs.map +0 -1
|
@@ -3124,6 +3124,25 @@ var HashMismatchError = class extends Error {
|
|
|
3124
3124
|
return this._operation;
|
|
3125
3125
|
}
|
|
3126
3126
|
};
|
|
3127
|
+
/**
|
|
3128
|
+
* Thrown when replay or import requires a document model version that is not
|
|
3129
|
+
* registered. Carries the data the UI needs to explain the mismatch.
|
|
3130
|
+
*/
|
|
3131
|
+
var UnsupportedDocumentModelVersionError = class extends Error {
|
|
3132
|
+
documentType;
|
|
3133
|
+
requiredVersion;
|
|
3134
|
+
availableVersions;
|
|
3135
|
+
constructor(documentType, requiredVersion, availableVersions) {
|
|
3136
|
+
super(`No reducer registered for document version ${requiredVersion}. Available versions: ${availableVersions.join(", ")}`);
|
|
3137
|
+
this.name = "UnsupportedDocumentModelVersionError";
|
|
3138
|
+
this.documentType = documentType;
|
|
3139
|
+
this.requiredVersion = requiredVersion;
|
|
3140
|
+
this.availableVersions = availableVersions;
|
|
3141
|
+
}
|
|
3142
|
+
static isError(error) {
|
|
3143
|
+
return Error.isError(error) && error.name === "UnsupportedDocumentModelVersionError";
|
|
3144
|
+
}
|
|
3145
|
+
};
|
|
3127
3146
|
const isDefinedNonNullAny$1 = (v) => v !== void 0 && v !== null;
|
|
3128
3147
|
any().refine((v) => isDefinedNonNullAny$1(v));
|
|
3129
3148
|
const Load_StateSchema = _enum(["LOAD_STATE"]);
|
|
@@ -4124,7 +4143,7 @@ function assertValidGrant(grant, documentType) {
|
|
|
4124
4143
|
const grantId = isPlainValue(grant) && typeof grant.id === "string" ? grant.id : "";
|
|
4125
4144
|
const problem = grantProblem(grant);
|
|
4126
4145
|
if (problem !== null) throw new InvalidGrantError(grantId, problem);
|
|
4127
|
-
if (documentType === "
|
|
4146
|
+
if (documentType === "powerhouse/reactor-group" && "group" in grant.principal) throw new GroupPrincipalNotAllowedError(grantId);
|
|
4128
4147
|
}
|
|
4129
4148
|
/**
|
|
4130
4149
|
* Validates an initial grant list: the count cap, every grant, and — on a
|
|
@@ -4198,6 +4217,158 @@ function assertAuthAdministrationRetained(creator, previous, next, grantId) {
|
|
|
4198
4217
|
if (creator !== void 0) return;
|
|
4199
4218
|
if (administrationReachable(previous) && !administrationReachable(next)) throw new AuthAdministrationLockoutError(grantId);
|
|
4200
4219
|
}
|
|
4220
|
+
/**
|
|
4221
|
+
* An operand whose shape validation would have rejected. Distinguished from
|
|
4222
|
+
* an unresolved path so a structurally malformed operand poisons its whole
|
|
4223
|
+
* condition to false rather than reading as "absent", which `not` would
|
|
4224
|
+
* otherwise widen to true.
|
|
4225
|
+
*/
|
|
4226
|
+
const INVALID_OPERAND = Symbol("invalid-operand");
|
|
4227
|
+
/**
|
|
4228
|
+
* Narrows to the values conditions compare. An object, array, or non-finite
|
|
4229
|
+
* number resolves to undefined, and every comparison involving undefined is
|
|
4230
|
+
* false.
|
|
4231
|
+
*/
|
|
4232
|
+
function asConditionValue(value) {
|
|
4233
|
+
if (value === null || typeof value === "string" || typeof value === "boolean") return value;
|
|
4234
|
+
if (typeof value === "number" && Number.isFinite(value)) return value;
|
|
4235
|
+
}
|
|
4236
|
+
/**
|
|
4237
|
+
* Resolves one operand. Attr roots: `subject.*`, `doc.<scope>.*` where the
|
|
4238
|
+
* scope must be the executing scope (validation already rejects any other,
|
|
4239
|
+
* but resolution stays total), and `action.input.*`. Path steps read own
|
|
4240
|
+
* properties only, so prototype members can never influence a verdict.
|
|
4241
|
+
*/
|
|
4242
|
+
function resolveOperand(operand, subject, request, conditions) {
|
|
4243
|
+
if (!isPlainValue(operand)) return INVALID_OPERAND;
|
|
4244
|
+
const keys = Object.keys(operand);
|
|
4245
|
+
if (keys.length !== 1) return INVALID_OPERAND;
|
|
4246
|
+
if (keys[0] === "lit") {
|
|
4247
|
+
const value = asConditionValue(operand.lit);
|
|
4248
|
+
return value === void 0 ? INVALID_OPERAND : value;
|
|
4249
|
+
}
|
|
4250
|
+
if (keys[0] !== "attr") return INVALID_OPERAND;
|
|
4251
|
+
const attr = operand.attr;
|
|
4252
|
+
if (typeof attr !== "string" || attr.length === 0) return INVALID_OPERAND;
|
|
4253
|
+
const path = attr.split(".");
|
|
4254
|
+
let value;
|
|
4255
|
+
let rest;
|
|
4256
|
+
if (path[0] === "subject") {
|
|
4257
|
+
value = subject;
|
|
4258
|
+
rest = path.slice(1);
|
|
4259
|
+
} else if (path[0] === "doc") {
|
|
4260
|
+
if (path[1] !== request.scope) return;
|
|
4261
|
+
value = conditions.scopeState;
|
|
4262
|
+
rest = path.slice(2);
|
|
4263
|
+
} else if (path[0] === "action" && path[1] === "input") {
|
|
4264
|
+
value = conditions.actionInput;
|
|
4265
|
+
rest = path.slice(2);
|
|
4266
|
+
} else return;
|
|
4267
|
+
for (const segment of rest) {
|
|
4268
|
+
if (!isPlainValue(value) || !Object.hasOwn(value, segment)) return;
|
|
4269
|
+
value = value[segment];
|
|
4270
|
+
}
|
|
4271
|
+
return asConditionValue(value);
|
|
4272
|
+
}
|
|
4273
|
+
/**
|
|
4274
|
+
* Total order within one type: numbers numerically, strings by code point.
|
|
4275
|
+
* Everything else, including mixed types, does not order.
|
|
4276
|
+
*/
|
|
4277
|
+
function compareValues(left, right) {
|
|
4278
|
+
if (typeof left === "number" && typeof right === "number") return left < right ? -1 : left > right ? 1 : 0;
|
|
4279
|
+
if (typeof left === "string" && typeof right === "string") {
|
|
4280
|
+
const leftPoints = Array.from(left);
|
|
4281
|
+
const rightPoints = Array.from(right);
|
|
4282
|
+
const shared = Math.min(leftPoints.length, rightPoints.length);
|
|
4283
|
+
for (let i = 0; i < shared; i++) {
|
|
4284
|
+
const a = leftPoints[i].codePointAt(0) ?? 0;
|
|
4285
|
+
const b = rightPoints[i].codePointAt(0) ?? 0;
|
|
4286
|
+
if (a !== b) return a < b ? -1 : 1;
|
|
4287
|
+
}
|
|
4288
|
+
return leftPoints.length === rightPoints.length ? 0 : leftPoints.length < rightPoints.length ? -1 : 1;
|
|
4289
|
+
}
|
|
4290
|
+
}
|
|
4291
|
+
/**
|
|
4292
|
+
* Tri-state evaluation: undefined marks a structurally invalid node, which
|
|
4293
|
+
* poisons the whole tree to false at the top — and a structurally malformed
|
|
4294
|
+
* operand poisons its condition the same way. Both are distinct from an
|
|
4295
|
+
* operand whose path fails to resolve, which is a valid comparison that is
|
|
4296
|
+
* false. The distinction keeps `not` from widening over malformed input.
|
|
4297
|
+
*/
|
|
4298
|
+
function evaluateNode(node, subject, request, conditions) {
|
|
4299
|
+
if (!isPlainValue(node)) return;
|
|
4300
|
+
const keys = Object.keys(node);
|
|
4301
|
+
if (keys.length !== 1) return;
|
|
4302
|
+
const kind = keys[0];
|
|
4303
|
+
const body = node[kind];
|
|
4304
|
+
switch (kind) {
|
|
4305
|
+
case "eq":
|
|
4306
|
+
case "ne":
|
|
4307
|
+
case "lt":
|
|
4308
|
+
case "lte":
|
|
4309
|
+
case "gt":
|
|
4310
|
+
case "gte": {
|
|
4311
|
+
if (!Array.isArray(body) || body.length !== 2) return;
|
|
4312
|
+
const left = resolveOperand(body[0], subject, request, conditions);
|
|
4313
|
+
const right = resolveOperand(body[1], subject, request, conditions);
|
|
4314
|
+
if (left === INVALID_OPERAND || right === INVALID_OPERAND) return;
|
|
4315
|
+
if (left === void 0 || right === void 0) return false;
|
|
4316
|
+
if (kind === "eq") return left === right;
|
|
4317
|
+
if (kind === "ne") return left !== right;
|
|
4318
|
+
const order = compareValues(left, right);
|
|
4319
|
+
if (order === void 0) return false;
|
|
4320
|
+
switch (kind) {
|
|
4321
|
+
case "lt": return order < 0;
|
|
4322
|
+
case "lte": return order <= 0;
|
|
4323
|
+
case "gt": return order > 0;
|
|
4324
|
+
case "gte": return order >= 0;
|
|
4325
|
+
}
|
|
4326
|
+
return;
|
|
4327
|
+
}
|
|
4328
|
+
case "in":
|
|
4329
|
+
case "notIn": {
|
|
4330
|
+
if (!Array.isArray(body) || body.length !== 2 || !Array.isArray(body[1])) return;
|
|
4331
|
+
const left = resolveOperand(body[0], subject, request, conditions);
|
|
4332
|
+
if (left === INVALID_OPERAND) return;
|
|
4333
|
+
const elements = body[1].map((element) => resolveOperand(element, subject, request, conditions));
|
|
4334
|
+
if (elements.some((value) => value === INVALID_OPERAND)) return;
|
|
4335
|
+
if (left === void 0) return false;
|
|
4336
|
+
const found = elements.some((value) => value !== void 0 && value === left);
|
|
4337
|
+
return kind === "in" ? found : !found;
|
|
4338
|
+
}
|
|
4339
|
+
case "exists": {
|
|
4340
|
+
const value = resolveOperand(body, subject, request, conditions);
|
|
4341
|
+
if (value === INVALID_OPERAND) return;
|
|
4342
|
+
return value !== void 0;
|
|
4343
|
+
}
|
|
4344
|
+
case "and":
|
|
4345
|
+
case "or": {
|
|
4346
|
+
if (!Array.isArray(body)) return;
|
|
4347
|
+
let result = kind === "and";
|
|
4348
|
+
for (const child of body) {
|
|
4349
|
+
const value = evaluateNode(child, subject, request, conditions);
|
|
4350
|
+
if (value === void 0) return;
|
|
4351
|
+
if (kind === "and") result = result && value;
|
|
4352
|
+
else result = result || value;
|
|
4353
|
+
}
|
|
4354
|
+
return result;
|
|
4355
|
+
}
|
|
4356
|
+
case "not": {
|
|
4357
|
+
const value = evaluateNode(body, subject, request, conditions);
|
|
4358
|
+
return value === void 0 ? void 0 : !value;
|
|
4359
|
+
}
|
|
4360
|
+
default: return;
|
|
4361
|
+
}
|
|
4362
|
+
}
|
|
4363
|
+
/**
|
|
4364
|
+
* Evaluates a version-1 condition. Deterministic, total, and pure: any input
|
|
4365
|
+
* shape yields a boolean and never throws, and a malformed condition is
|
|
4366
|
+
* false. These are consensus semantics, versioned by `PHAuthState.version`;
|
|
4367
|
+
* changing them requires a new version.
|
|
4368
|
+
*/
|
|
4369
|
+
function evaluateCondition(condition, subject, request, conditions) {
|
|
4370
|
+
return evaluateNode(condition, subject, request, conditions) === true;
|
|
4371
|
+
}
|
|
4201
4372
|
function capabilityCovers(capability, request) {
|
|
4202
4373
|
if (capability.can !== request.verb) return false;
|
|
4203
4374
|
const scope = capability.scope;
|
|
@@ -4208,21 +4379,37 @@ function capabilityCovers(capability, request) {
|
|
|
4208
4379
|
}
|
|
4209
4380
|
return true;
|
|
4210
4381
|
}
|
|
4211
|
-
function principalMatches(principal, subject) {
|
|
4382
|
+
function principalMatches(principal, subject, request, groups, conditions) {
|
|
4212
4383
|
if ("anyone" in principal) return true;
|
|
4213
4384
|
if ("address" in principal) return subject.address !== void 0 && subject.address.toLowerCase() === principal.address.toLowerCase();
|
|
4385
|
+
if ("group" in principal) {
|
|
4386
|
+
if (groups === void 0 || subject.address === void 0) return false;
|
|
4387
|
+
const group = groups[principal.group];
|
|
4388
|
+
if (group === void 0 || !Array.isArray(group.members)) return false;
|
|
4389
|
+
const address = subject.address.toLowerCase();
|
|
4390
|
+
return group.members.some((member) => member.toLowerCase() === address);
|
|
4391
|
+
}
|
|
4392
|
+
if ("match" in principal) {
|
|
4393
|
+
if (conditions === void 0) return false;
|
|
4394
|
+
return evaluateCondition(principal.match, subject, request, conditions);
|
|
4395
|
+
}
|
|
4214
4396
|
return false;
|
|
4215
4397
|
}
|
|
4216
4398
|
/**
|
|
4217
4399
|
* Evaluates a v1 grant stack: default deny, last applicable grant wins, and
|
|
4218
|
-
* reports which grant decided it. Group
|
|
4219
|
-
*
|
|
4400
|
+
* reports which grant decided it. Group principals match only against a
|
|
4401
|
+
* supplied groups map, and `where` clauses and { match } principals evaluate
|
|
4402
|
+
* only against a supplied condition context; a grant that uses an unsupplied
|
|
4403
|
+
* feature never applies.
|
|
4220
4404
|
*/
|
|
4221
|
-
function evaluateGrantStack(grants, subject, request) {
|
|
4405
|
+
function evaluateGrantStack(grants, subject, request, groups, conditions) {
|
|
4222
4406
|
let applicable;
|
|
4223
4407
|
for (const grant of grants) {
|
|
4224
|
-
if (grant.where !== void 0)
|
|
4225
|
-
|
|
4408
|
+
if (grant.where !== void 0) {
|
|
4409
|
+
if (conditions === void 0) continue;
|
|
4410
|
+
if (!evaluateCondition(grant.where, subject, request, conditions)) continue;
|
|
4411
|
+
}
|
|
4412
|
+
if (capabilityCovers(grant.capability, request) && principalMatches(grant.principal, subject, request, groups, conditions)) applicable = grant;
|
|
4226
4413
|
}
|
|
4227
4414
|
if (applicable === void 0) return {
|
|
4228
4415
|
decision: "deny",
|
|
@@ -6843,10 +7030,7 @@ function replayDocumentVersioned(initialState, operations, config, header, dispa
|
|
|
6843
7030
|
const segmentEndHashPerScope = /* @__PURE__ */ new Map();
|
|
6844
7031
|
for (let k = 0; k <= validatedUpgrades.length; k++) {
|
|
6845
7032
|
const reducer = config.reducers[currentVersion];
|
|
6846
|
-
if (!reducer)
|
|
6847
|
-
const available = Object.keys(config.reducers).join(", ");
|
|
6848
|
-
throw new Error(`No reducer registered for document version ${currentVersion}. Available versions: ${available}`);
|
|
6849
|
-
}
|
|
7033
|
+
if (!reducer) throw new UnsupportedDocumentModelVersionError(header.documentType, currentVersion, Object.keys(config.reducers).map(Number).sort((a, b) => a - b));
|
|
6850
7034
|
for (const s of replayScopes) {
|
|
6851
7035
|
const ops = scopeOps[s] ?? [];
|
|
6852
7036
|
const segStart = k === 0 ? 0 : boundaries[k - 1]?.[s] ?? 0;
|
|
@@ -8123,6 +8307,6 @@ const driveDocumentModelModule = {
|
|
|
8123
8307
|
}
|
|
8124
8308
|
};
|
|
8125
8309
|
//#endregion
|
|
8126
|
-
export {
|
|
8310
|
+
export { setOperationSchema as $, createZip as A, replayDocumentVersioned as B, baseSaveToFileHandle as C, createPresignedHeader as D, createBaseState as E, documentModelDocumentType as F, setModelExtension as G, setAuthorWebsite as H, hashDocumentStateForScope as I, setModuleName as J, setModelId as K, isDocumentAction as L, deleteModule as M, deleteOperation as N, createReducer as O, deleteOperationError as P, setOperationName as Q, redo as R, baseLoadFromInputVersioned as S, createAction as T, setInitialState as U, setAuthorName as V, setModelDescription as W, setOperationDescription as X, setName as Y, setOperationErrorName as Z, addOperationError as _, handleTargetNameCollisions as a, generateId as at, baseCreateDocument as b, isValidName as c, documentModelDocumentModelModule as d, setStateSchema as et, logger as f, addOperation as g, addModule as h, generateNodesCopy as i, validateStateSchemaName as it, defaultBaseState as j, createState as k, moveNode as l, BaseDocumentStateSchema as m, copyNode as n, validateInitialState as nt, isFileNode as o, BaseDocumentHeaderSchema as p, setModelName as q, driveDocumentModelModule as r, validateModules as rt, isFolderNode as s, addFolder as t, undo as tt, updateNode as u, assertAuthPreservedOnDuplicate as v, buildSignedAction as w, baseLoadFromInput as x, baseActions as y, releaseNewVersion as z };
|
|
8127
8311
|
|
|
8128
|
-
//# sourceMappingURL=document-drive-
|
|
8312
|
+
//# sourceMappingURL=document-drive-DrBAR9as.mjs.map
|