@dereekb/dbx-components-mcp 13.12.0 → 13.12.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.
Files changed (2) hide show
  1. package/dbx-components-mcp.js +102 -17
  2. package/package.json +11 -11
@@ -5,7 +5,7 @@ const require = __createRequire(import.meta.url);
5
5
  // packages/dbx-components-mcp/package.json
6
6
  var package_default = {
7
7
  name: "@dereekb/dbx-components-mcp",
8
- version: "13.12.0",
8
+ version: "13.12.2",
9
9
  type: "module",
10
10
  bin: {
11
11
  "dbx-components-mcp": "dbx-components-mcp.js"
@@ -20,20 +20,20 @@ var package_default = {
20
20
  "@angular/core": "21.2.11",
21
21
  "@angular/forms": "21.2.11",
22
22
  "@angular/material": "^21.2.9",
23
- "@dereekb/dbx-cli": "13.12.0",
24
- "@dereekb/dbx-core": "13.12.0",
25
- "@dereekb/dbx-firebase": "13.12.0",
26
- "@dereekb/dbx-form": "13.12.0",
27
- "@dereekb/dbx-web": "13.12.0",
28
- "@dereekb/firebase": "13.12.0",
29
- "@dereekb/firebase-server": "13.12.0",
30
- "@dereekb/rxjs": "13.12.0",
31
- "@dereekb/util": "13.12.0",
23
+ "@dereekb/dbx-cli": "13.12.2",
24
+ "@dereekb/dbx-core": "13.12.2",
25
+ "@dereekb/dbx-firebase": "13.12.2",
26
+ "@dereekb/dbx-form": "13.12.2",
27
+ "@dereekb/dbx-web": "13.12.2",
28
+ "@dereekb/firebase": "13.12.2",
29
+ "@dereekb/firebase-server": "13.12.2",
30
+ "@dereekb/rxjs": "13.12.2",
31
+ "@dereekb/util": "13.12.2",
32
32
  "@uirouter/angular": "21.0.0",
33
33
  rxjs: "^7.8.2"
34
34
  },
35
35
  devDependencies: {
36
- "@dereekb/model": "13.12.0"
36
+ "@dereekb/model": "13.12.2"
37
37
  }
38
38
  };
39
39
 
@@ -7039,6 +7039,8 @@ var AUTH_ROLE_CLAIMS_SERVICE_FN = "authRoleClaimsService";
7039
7039
  function extractAuthEntries(input) {
7040
7040
  const { project, knownRoles } = input;
7041
7041
  const warnings = [];
7042
+ const localRoleConsts = collectLocalRoleConsts(project);
7043
+ const mergedKnownRoles = mergeKnownRoles(knownRoles, localRoleConsts.scalars);
7042
7044
  const taggedAppDecls = collectTaggedAppDecls(project, warnings);
7043
7045
  const serviceMappings = collectServiceMappings(project, warnings, taggedAppDecls);
7044
7046
  const apps = [];
@@ -7052,7 +7054,8 @@ function extractAuthEntries(input) {
7052
7054
  interfaceName: tagged.interfaceName,
7053
7055
  filePath: tagged.filePath,
7054
7056
  service: serviceForApp,
7055
- knownRoles,
7057
+ knownRoles: mergedKnownRoles,
7058
+ localArrayRoles: localRoleConsts.arrays,
7056
7059
  warnings
7057
7060
  });
7058
7061
  for (const claim of ownClaims) claims.push(claim);
@@ -7243,6 +7246,11 @@ function readRoleAtom(node) {
7243
7246
  result = { text: node.getLiteralText(), resolvable: true };
7244
7247
  } else if (Node11.isIdentifier(node)) {
7245
7248
  result = { text: node.getText(), resolvable: false };
7249
+ } else if (Node11.isSpreadElement(node)) {
7250
+ const inner = node.getExpression();
7251
+ if (Node11.isIdentifier(inner)) {
7252
+ result = { text: inner.getText(), resolvable: false };
7253
+ }
7246
7254
  }
7247
7255
  return result;
7248
7256
  }
@@ -7298,7 +7306,7 @@ function collectPropertySignaturesFromTypeNode(typeNode, sink) {
7298
7306
  }
7299
7307
  }
7300
7308
  function buildClaimFromProperty(input) {
7301
- const { property, app, interfaceName, filePath, service, knownRoles, warnings } = input;
7309
+ const { property, app, interfaceName, filePath, service, knownRoles, localArrayRoles, warnings } = input;
7302
7310
  const tagState = readPropertyTagState(property.getJsDocs());
7303
7311
  let result;
7304
7312
  if (tagState.hasMarker) {
@@ -7310,7 +7318,7 @@ function buildClaimFromProperty(input) {
7310
7318
  if (parsed === void 0) {
7311
7319
  warnings.push({ kind: "claim-missing-mapping", app, key, filePath, line });
7312
7320
  }
7313
- const mapping = parsed === void 0 ? { roles: [], inverse: false, customEncodeDecode: false } : resolveMappingRoles({ mapping: parsed.mapping, unresolvedRoleConsts: parsed.unresolvedRoleConsts, knownRoles, app, key, filePath, line, warnings });
7321
+ const mapping = parsed === void 0 ? { roles: [], inverse: false, customEncodeDecode: false } : resolveMappingRoles({ mapping: parsed.mapping, unresolvedRoleConsts: parsed.unresolvedRoleConsts, knownRoles, localArrayRoles, app, key, filePath, line, warnings });
7314
7322
  result = {
7315
7323
  key,
7316
7324
  type: typeText,
@@ -7326,20 +7334,97 @@ function buildClaimFromProperty(input) {
7326
7334
  return result;
7327
7335
  }
7328
7336
  function resolveMappingRoles(input) {
7329
- const { mapping, knownRoles, app, key, filePath, line, warnings } = input;
7337
+ const { mapping, knownRoles, localArrayRoles, app, key, filePath, line, warnings } = input;
7330
7338
  const resolved = [];
7331
7339
  for (const role of mapping.roles) {
7332
7340
  if (knownRoles.has(role)) {
7333
7341
  resolved.push(knownRoles.get(role));
7334
7342
  } else if (input.unresolvedRoleConsts.includes(role)) {
7335
- warnings.push({ kind: "unresolved-role-const", app, key, constName: role, filePath, line });
7336
- resolved.push(role);
7343
+ const aggregate = resolveRoleConstByName(role, { knownRoles, localArrayRoles, seen: /* @__PURE__ */ new Set() });
7344
+ if (aggregate.unresolved.length === 0) {
7345
+ for (const aggregateRole of aggregate.roles) resolved.push(aggregateRole);
7346
+ } else {
7347
+ warnings.push({ kind: "unresolved-role-const", app, key, constName: role, filePath, line });
7348
+ resolved.push(role);
7349
+ }
7337
7350
  } else {
7338
7351
  resolved.push(role);
7339
7352
  }
7340
7353
  }
7341
7354
  return { ...mapping, roles: resolved };
7342
7355
  }
7356
+ function collectLocalRoleConsts(project) {
7357
+ const scalars = /* @__PURE__ */ new Map();
7358
+ const arrays = /* @__PURE__ */ new Map();
7359
+ for (const sourceFile of project.getSourceFiles()) {
7360
+ for (const stmt of sourceFile.getVariableStatements()) {
7361
+ if (!stmt.isExported()) continue;
7362
+ for (const decl of stmt.getDeclarations()) {
7363
+ const initializer = decl.getInitializer();
7364
+ const name = decl.getName();
7365
+ if (initializer === void 0) continue;
7366
+ if (Node11.isStringLiteral(initializer) || Node11.isNoSubstitutionTemplateLiteral(initializer)) {
7367
+ if (!scalars.has(name)) scalars.set(name, initializer.getLiteralText());
7368
+ } else if (Node11.isArrayLiteralExpression(initializer) && !arrays.has(name)) arrays.set(name, initializer);
7369
+ }
7370
+ }
7371
+ }
7372
+ return { scalars, arrays };
7373
+ }
7374
+ function mergeKnownRoles(builtins, localScalars) {
7375
+ const out = /* @__PURE__ */ new Map();
7376
+ for (const [name, role] of localScalars) out.set(name, role);
7377
+ for (const [name, role] of builtins) out.set(name, role);
7378
+ return out;
7379
+ }
7380
+ var EMPTY_ROLE_CONST_RESOLUTION = { roles: [], unresolved: [] };
7381
+ function resolveRoleConstByName(name, ctx) {
7382
+ let result;
7383
+ const scalar = ctx.knownRoles.get(name);
7384
+ if (scalar !== void 0) {
7385
+ result = { roles: [scalar], unresolved: [] };
7386
+ } else {
7387
+ const arrayExpr = ctx.localArrayRoles.get(name);
7388
+ if (arrayExpr === void 0) {
7389
+ result = { roles: [], unresolved: [name] };
7390
+ } else if (ctx.seen.has(name)) {
7391
+ result = EMPTY_ROLE_CONST_RESOLUTION;
7392
+ } else {
7393
+ const nextSeen = new Set(ctx.seen);
7394
+ nextSeen.add(name);
7395
+ result = resolveRoleArrayLiteral(arrayExpr, { ...ctx, seen: nextSeen });
7396
+ }
7397
+ }
7398
+ return result;
7399
+ }
7400
+ function resolveRoleArrayLiteral(arrayExpr, ctx) {
7401
+ const roles = [];
7402
+ const unresolved = [];
7403
+ for (const element of arrayExpr.getElements()) {
7404
+ const elementResult = resolveRoleArrayElement(element, ctx);
7405
+ for (const role of elementResult.roles) roles.push(role);
7406
+ for (const name of elementResult.unresolved) unresolved.push(name);
7407
+ }
7408
+ return { roles, unresolved };
7409
+ }
7410
+ function resolveRoleArrayElement(element, ctx) {
7411
+ let result = EMPTY_ROLE_CONST_RESOLUTION;
7412
+ if (Node11.isStringLiteral(element) || Node11.isNoSubstitutionTemplateLiteral(element)) {
7413
+ result = { roles: [element.getLiteralText()], unresolved: [] };
7414
+ } else if (Node11.isIdentifier(element)) {
7415
+ result = resolveRoleConstByName(element.getText(), ctx);
7416
+ } else if (Node11.isSpreadElement(element)) {
7417
+ const inner = element.getExpression();
7418
+ if (Node11.isIdentifier(inner)) {
7419
+ result = resolveRoleConstByName(inner.getText(), ctx);
7420
+ } else if (Node11.isArrayLiteralExpression(inner)) {
7421
+ result = resolveRoleArrayLiteral(inner, ctx);
7422
+ } else {
7423
+ result = { roles: [], unresolved: [inner.getText()] };
7424
+ }
7425
+ }
7426
+ return result;
7427
+ }
7343
7428
  function readPropertyTagState(jsDocs) {
7344
7429
  const summaries = [];
7345
7430
  const tags = [];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dereekb/dbx-components-mcp",
3
- "version": "13.12.0",
3
+ "version": "13.12.2",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "dbx-components-mcp": "dbx-components-mcp.js"
@@ -15,19 +15,19 @@
15
15
  "@angular/core": "21.2.11",
16
16
  "@angular/forms": "21.2.11",
17
17
  "@angular/material": "^21.2.9",
18
- "@dereekb/dbx-cli": "13.12.0",
19
- "@dereekb/dbx-core": "13.12.0",
20
- "@dereekb/dbx-firebase": "13.12.0",
21
- "@dereekb/dbx-form": "13.12.0",
22
- "@dereekb/dbx-web": "13.12.0",
23
- "@dereekb/firebase": "13.12.0",
24
- "@dereekb/firebase-server": "13.12.0",
25
- "@dereekb/rxjs": "13.12.0",
26
- "@dereekb/util": "13.12.0",
18
+ "@dereekb/dbx-cli": "13.12.2",
19
+ "@dereekb/dbx-core": "13.12.2",
20
+ "@dereekb/dbx-firebase": "13.12.2",
21
+ "@dereekb/dbx-form": "13.12.2",
22
+ "@dereekb/dbx-web": "13.12.2",
23
+ "@dereekb/firebase": "13.12.2",
24
+ "@dereekb/firebase-server": "13.12.2",
25
+ "@dereekb/rxjs": "13.12.2",
26
+ "@dereekb/util": "13.12.2",
27
27
  "@uirouter/angular": "21.0.0",
28
28
  "rxjs": "^7.8.2"
29
29
  },
30
30
  "devDependencies": {
31
- "@dereekb/model": "13.12.0"
31
+ "@dereekb/model": "13.12.2"
32
32
  }
33
33
  }