@cedarjs/testing 8.0.0-canary.3569 → 8.0.0-canary.3571

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.
@@ -1 +1 @@
1
- {"version":3,"file":"vite-plugin-cedar-vitest-api-config.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vite-plugin-cedar-vitest-api-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC,wBAAgB,0BAA0B,IAAI,MAAM,CAiCnD"}
1
+ {"version":3,"file":"vite-plugin-cedar-vitest-api-config.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vite-plugin-cedar-vitest-api-config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAA;AAIlC,wBAAgB,0BAA0B,IAAI,MAAM,CAsCnD"}
@@ -7,12 +7,17 @@ function cedarVitestApiConfigPlugin() {
7
7
  return {
8
8
  define: getEnvVarDefinitions(),
9
9
  ssr: {
10
- // `@cedarjs/tenancy` reads and writes the request context, which
11
- // the api test setup replaces with a mock. The mock only reaches
12
- // code Vite processes, so the tenancy runtime has to be bundled
13
- // rather than loaded as an external dependency, or a service under
14
- // test and its Prisma extension would see different contexts.
15
- noExternal: ["@cedarjs/testing", "@cedarjs/tenancy"]
10
+ // `@cedarjs/tenancy` and `@cedarjs/permissions/api` read and write
11
+ // the request context, which the api test setup replaces with a
12
+ // mock. The mock only reaches code Vite processes, so their
13
+ // runtimes have to be bundled rather than loaded as external
14
+ // dependencies, or a service under test and its Prisma extension
15
+ // or permission checks would see different contexts.
16
+ noExternal: [
17
+ "@cedarjs/testing",
18
+ "@cedarjs/tenancy",
19
+ "@cedarjs/permissions"
20
+ ]
16
21
  },
17
22
  resolve: {
18
23
  alias: {
@@ -1 +1 @@
1
- {"version":3,"file":"vitest-api.setup.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vitest-api.setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AA4C1D,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,eAAe,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CACjE;AAUD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,cAAc,CAAA;IAElC,IAAI,uBAAuB,EAAE,OAAO,CAAA;CACrC"}
1
+ {"version":3,"file":"vitest-api.setup.d.ts","sourceRoot":"","sources":["../../../src/api/vitest/vitest-api.setup.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAGhD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAkD1D,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,eAAe,EAAE,CAAC,WAAW,EAAE,OAAO,CAAC,WAAW,CAAC,KAAK,IAAI,CAAA;CACjE;AAiBD,OAAO,CAAC,MAAM,CAAC;IAEb,IAAI,cAAc,EAAE,cAAc,CAAA;IAElC,IAAI,uBAAuB,EAAE,OAAO,CAAA;CACrC"}
@@ -3,6 +3,11 @@ import path from "node:path";
3
3
  import { afterAll, beforeEach, it, describe, vi, beforeAll } from "vitest";
4
4
  import { getPaths, getPrismaSchemas } from "@cedarjs/project-config";
5
5
  import { defineScenario } from "@cedarjs/testing/api";
6
+ import { loadAppPermissions } from "../../permissions/loadAppPermissions.js";
7
+ import {
8
+ setMockPermissionDefinitions,
9
+ withMockPermissions
10
+ } from "../../permissions/mockPermissions.js";
6
11
  import { emptyTablesInWorkingOrder } from "./teardown.js";
7
12
  const mockContextStore = vi.hoisted(() => /* @__PURE__ */ new Map());
8
13
  const mockContext = vi.hoisted(
@@ -34,8 +39,11 @@ vi.mock("@cedarjs/context", () => {
34
39
  beforeEach(() => {
35
40
  mockContextStore.set("context", {});
36
41
  });
42
+ setMockPermissionDefinitions(await loadAppPermissions(getPaths().api.base));
37
43
  globalThis.mockCurrentUser = (currentUser) => {
38
- mockContextStore.set("context", { currentUser });
44
+ mockContextStore.set("context", {
45
+ currentUser: withMockPermissions(currentUser)
46
+ });
39
47
  };
40
48
  globalThis.defineScenario = defineScenario;
41
49
  const cedarPaths = getPaths();
@@ -0,0 +1,9 @@
1
+ import type { PermissionDefinitions } from '@cedarjs/permissions';
2
+ /**
3
+ * The `permissions` that the app's permissions package (`packages/permissions`,
4
+ * from `cedar setup permissions`) exports, as `sideBase` (the api or web
5
+ * side) imports it. `undefined` in an app without one, and in an app with
6
+ * tenancy, where permissions belong to a membership instead of the user.
7
+ */
8
+ export declare function loadAppPermissions(sideBase: string): Promise<PermissionDefinitions | undefined>;
9
+ //# sourceMappingURL=loadAppPermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loadAppPermissions.d.ts","sourceRoot":"","sources":["../../src/permissions/loadAppPermissions.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AA+DjE;;;;;GAKG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,qBAAqB,GAAG,SAAS,CAAC,CA0C5C"}
@@ -0,0 +1,62 @@
1
+ import fs from "node:fs";
2
+ import { createRequire } from "node:module";
3
+ import path from "node:path";
4
+ import { pathToFileURL } from "node:url";
5
+ import { getPaths } from "@cedarjs/project-config";
6
+ function readPackageJson(file) {
7
+ try {
8
+ const packageJson = JSON.parse(fs.readFileSync(file, "utf-8"));
9
+ return packageJson && typeof packageJson === "object" ? { ...packageJson } : void 0;
10
+ } catch {
11
+ return void 0;
12
+ }
13
+ }
14
+ function dependsOn(packageJson, name) {
15
+ return ["dependencies", "devDependencies"].some((field) => {
16
+ const deps = packageJson[field];
17
+ return !!deps && typeof deps === "object" && Object.hasOwn(deps, name);
18
+ });
19
+ }
20
+ function isPermissionDefinitions(value) {
21
+ return !!value && typeof value === "object" && "permissions" in value && Array.isArray(value.permissions) && "roles" in value && !!value.roles && typeof value.roles === "object";
22
+ }
23
+ function sourceEntry(packageJson) {
24
+ const main = packageJson.main;
25
+ if (typeof main !== "string") {
26
+ return void 0;
27
+ }
28
+ const base = path.join(
29
+ getPaths().packages,
30
+ "permissions",
31
+ main.replace(/^\.\//, "").replace(/^dist\//, "src/").replace(/\.[cm]?js$/, "")
32
+ );
33
+ return [".ts", ".mts", ".js", ".mjs"].map((ext) => base + ext).find((file) => fs.existsSync(file));
34
+ }
35
+ async function loadAppPermissions(sideBase) {
36
+ const sidePackageJsonPath = path.join(sideBase, "package.json");
37
+ const sidePackageJson = readPackageJson(sidePackageJsonPath);
38
+ const packageJson = readPackageJson(
39
+ path.join(getPaths().packages, "permissions", "package.json")
40
+ );
41
+ const name = packageJson?.name;
42
+ if (!sidePackageJson || !packageJson || typeof name !== "string" || !dependsOn(sidePackageJson, name) || dependsOn(sidePackageJson, "@cedarjs/tenancy")) {
43
+ return void 0;
44
+ }
45
+ let entry = sourceEntry(packageJson);
46
+ try {
47
+ entry ??= createRequire(sidePackageJsonPath).resolve(name);
48
+ } catch {
49
+ console.warn(
50
+ `Couldn't find ${name}, so mockCurrentUser() gives users no permissions. Build it with \`yarn cedar build\`.`
51
+ );
52
+ return void 0;
53
+ }
54
+ const permissionsModule = await import(pathToFileURL(entry).href);
55
+ if (permissionsModule && typeof permissionsModule === "object" && "permissions" in permissionsModule && isPermissionDefinitions(permissionsModule.permissions)) {
56
+ return permissionsModule.permissions;
57
+ }
58
+ return void 0;
59
+ }
60
+ export {
61
+ loadAppPermissions
62
+ };
@@ -0,0 +1,9 @@
1
+ import type { PermissionDefinitions } from '@cedarjs/permissions';
2
+ export declare function setMockPermissionDefinitions(appDefinitions: PermissionDefinitions | undefined): void;
3
+ /**
4
+ * `user` with the `permissions` the app's definitions give its `roles`, as
5
+ * `withPermissions` adds them in `getCurrentUser`. A user with permissions
6
+ * of its own keeps them.
7
+ */
8
+ export declare function withMockPermissions<User>(user: User): User;
9
+ //# sourceMappingURL=mockPermissions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mockPermissions.d.ts","sourceRoot":"","sources":["../../src/permissions/mockPermissions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAA;AAQjE,wBAAgB,4BAA4B,CAC1C,cAAc,EAAE,qBAAqB,GAAG,SAAS,QAGlD;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAwB1D"}
@@ -0,0 +1,18 @@
1
+ import { permissionsOf } from "@cedarjs/permissions";
2
+ let definitions;
3
+ function setMockPermissionDefinitions(appDefinitions) {
4
+ definitions = appDefinitions;
5
+ }
6
+ function withMockPermissions(user) {
7
+ if (!definitions || typeof user !== "object" || user === null || "permissions" in user || !("roles" in user)) {
8
+ return user;
9
+ }
10
+ const { roles } = user;
11
+ const roleList = typeof roles === "string" ? [roles] : Array.isArray(roles) ? roles.filter((role) => typeof role === "string") : [];
12
+ const permissions = permissionsOf(definitions, roleList);
13
+ return permissions.length > 0 ? { ...user, permissions } : user;
14
+ }
15
+ export {
16
+ setMockPermissionDefinitions,
17
+ withMockPermissions
18
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"mockAuth.d.ts","sourceRoot":"","sources":["../../src/web/mockAuth.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,cAAc,eAAe,CAAA;AAO7B,UAAU,KAAK;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAUD,wBAAgB,OAAO;;;;;;;;;;qBAYF,MAAM,GAAG,MAAM,EAAE;;;;;;;;;;EAYrC;AAED,eAAO,MAAM,oBAAoB;;;CAEhC,CAAA"}
1
+ {"version":3,"file":"mockAuth.d.ts","sourceRoot":"","sources":["../../src/web/mockAuth.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AAIzB,cAAc,eAAe,CAAA;AAQ7B,UAAU,KAAK;IACb,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;CAC1B;AAWD,wBAAgB,OAAO;;;;;;;;;;qBAYF,MAAM,GAAG,MAAM,EAAE;;;;;;;;;;EAerC;AAED,eAAO,MAAM,oBAAoB;;;CAEhC,CAAA"}
@@ -1,6 +1,7 @@
1
1
  import React from "react";
2
2
  export * from "@cedarjs/auth";
3
3
  import { HasPermissionContext } from "@cedarjs/auth";
4
+ import { currentUserHasPermission } from "@cedarjs/auth/currentUserHasPermission";
4
5
  import { currentUserHasRole } from "@cedarjs/auth/currentUserHasRole";
5
6
  import { mockedUserMeta } from "./mockRequests.js";
6
7
  const AuthProvider = ({ children }) => {
@@ -22,7 +23,7 @@ function useAuth() {
22
23
  getToken: async () => null,
23
24
  getCurrentUser: async () => mockedUserMeta.currentUser,
24
25
  hasRole: (roles) => currentUserHasRole(mockedUserMeta.currentUser, roles),
25
- hasPermission: scopedHasPermission ?? (() => false),
26
+ hasPermission: scopedHasPermission ?? ((permission) => currentUserHasPermission(mockedUserMeta.currentUser, permission)),
26
27
  reauthenticate: async () => {
27
28
  },
28
29
  forgotPassword: async () => {
@@ -68,7 +68,11 @@ export declare const mockGraphQLMutation: <Query extends Record<string, unknown>
68
68
  export declare const mockedUserMeta: {
69
69
  currentUser: CurrentUser;
70
70
  };
71
- /** A mocked user only needs the fields the test uses */
71
+ /**
72
+ * A mocked user only needs the fields the test uses. In an app with
73
+ * permissions (`cedar setup permissions`), a user with `roles` gets the
74
+ * `permissions` the app's definitions give them, as `getCurrentUser` does.
75
+ */
72
76
  export declare const mockCurrentUser: (user: Partial<CurrentUser>) => void;
73
77
  export declare const mockedRouteParamsMeta: {
74
78
  params: Record<string, string>;
@@ -1 +1 @@
1
- {"version":3,"file":"mockRequests.d.ts","sourceRoot":"","sources":["../../src/web/mockRequests.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"mockRequests.d.ts","sourceRoot":"","sources":["../../src/web/mockRequests.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACxD,OAAO,KAAK,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,aAAa,CAAA;AAExE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAWhD,UAAU,mBAAmB;IAC3B,GAAG,CAAC,GAAG,QAAQ,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;IAC7B,aAAa,IAAI,IAAI,CAAA;CACtB;AACD,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAAE,IAAI,IAAI,IAAI,CAAA;CAAE,CAAA;AAChE,KAAK,kBAAkB,GAAG,mBAAmB,GAAG;IAC9C,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,IAAI,CAAA;IAC9C,KAAK,IAAI,IAAI,CAAA;CACd,CAAA;AAmBD,KAAK,YAAY,CAAC,MAAM,IAAI,MAAM,SAAS,UAAU,GACjD,qBAAqB,GACrB,OAAO,CAAC,aAAa,CAAC,CAAA;AAC1B,eAAO,MAAM,QAAQ,GAAU,MAAM,SAAS,MAAM,GAAG,UAAU,EAC/D,QAAQ,MAAM,EACd,UAAU,YAAY,CAAC,MAAM,CAAC,qDA4B/B,CAAA;AAED,eAAO,MAAM,oBAAoB,YAMhC,CAAA;AAED,eAAO,MAAM,WAAW,YAsBvB,CAAA;AAED,eAAO,MAAM,eAAe,GAAI,SAAS,cAAc,SAQtD,CAAA;AAED;;;;GAIG;AACH,MAAM,WAAW,kBAAkB;IACjC,qEAAqE;IACrE,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,6DAA6D;IAC7D,KAAK,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,4CAA4C;IAC5C,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,GAAG,IAAI,CAAA;IAClD,oEAAoE;IACpE,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAChE,4BAA4B;IAC5B,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACzC,yDAAyD;IACzD,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACrD,0DAA0D;IAC1D,KAAK,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAAA;IAC9C,6EAA6E;IAC7E,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAA;IACzC,wDAAwD;IACxD,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,GAAG,GAAG,OAAO,EAAE,IAAI,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAA;CAC5E;AAED;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IACjC,0CAA0C;IAC1C,OAAO,EAAE,OAAO,CAAA;IAChB,wCAAwC;IACxC,KAAK,EAAE,MAAM,CAAA;IACb,aAAa,EAAE,MAAM,CAAA;IACrB,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC9B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,GAAG,EAAE,GAAG,CAAA;IACR,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,MAAM,MAAM,YAAY,CACtB,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,IAClC,CACF,SAAS,EAAE,cAAc,EACzB,EACE,GAAG,EACH,GAAG,GACJ,EAAE;IACD,GAAG,EAAE,kBAAkB,CAAA;IACvB,GAAG,EAAE,kBAAkB,CAAA;CACxB,KACE,KAAK,GAAG,IAAI,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAAA;AAEzC,KAAK,gBAAgB,GAAG,MAAM,GAAG,cAAc,CAAA;AAwH/C,eAAO,MAAM,gBAAgB,GAC3B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEpC,WAAW,MAAM,EACjB,MAAM,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,KAAK,EACjD,mBAAmB,gBAAgB,qFAGpC,CAAA;AAED,eAAO,MAAM,mBAAmB,GAC9B,KAAK,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/D,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAEpC,WAAW,MAAM,EACjB,MAAM,YAAY,CAAC,KAAK,EAAE,cAAc,CAAC,GAAG,KAAK,EACjD,mBAAmB,gBAAgB,qFAGpC,CAAA;AAED,eAAO,MAAM,cAAc,EAAE;IAAE,WAAW,EAAE,WAAW,CAAA;CAEtD,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,MAAM,OAAO,CAAC,WAAW,CAAC,SAWzD,CAAA;AAED,eAAO,MAAM,qBAAqB,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAEnE,CAAA;AAED;;;;;;;;;GASG;AACH,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAE7D,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { bypass, delay, graphql, HttpResponse } from "msw";
2
+ import { withMockPermissions } from "../permissions/mockPermissions.js";
2
3
  let REQUEST_HANDLER_QUEUE = [];
3
4
  let SERVER_INSTANCE;
4
5
  const MSW_NODE_SPECIFIER = "msw/node";
@@ -148,11 +149,12 @@ const mockedUserMeta = {
148
149
  currentUser: null
149
150
  };
150
151
  const mockCurrentUser = (user) => {
151
- mockedUserMeta.currentUser = user;
152
+ const currentUser = withMockPermissions(user);
153
+ mockedUserMeta.currentUser = currentUser;
152
154
  mockGraphQLQuery("__CEDAR__AUTH_GET_CURRENT_USER", () => {
153
155
  return {
154
156
  cedar: {
155
- currentUser: user
157
+ currentUser
156
158
  }
157
159
  };
158
160
  });
@@ -3,6 +3,8 @@ import path from "node:path";
3
3
  import { pathToFileURL } from "node:url";
4
4
  import { afterAll, afterEach, beforeAll } from "vitest";
5
5
  import { getPaths } from "@cedarjs/project-config";
6
+ import { loadAppPermissions } from "../../permissions/loadAppPermissions.js";
7
+ import { setMockPermissionDefinitions } from "../../permissions/mockPermissions.js";
6
8
  import { findCellMocks } from "../findCellMocks.js";
7
9
  import {
8
10
  closeServer,
@@ -11,6 +13,7 @@ import {
11
13
  startMSW
12
14
  } from "../mockRequests.js";
13
15
  let clearOrgClients;
16
+ setMockPermissionDefinitions(await loadAppPermissions(getPaths().web.base));
14
17
  beforeAll(async () => {
15
18
  clearOrgClients = await importClearOrgClients();
16
19
  const cellMocks = findCellMocks(getPaths().web.src);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cedarjs/testing",
3
- "version": "8.0.0-canary.3569",
3
+ "version": "8.0.0-canary.3571",
4
4
  "description": "Tools, wrappers and configuration for testing a Cedar project.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -54,9 +54,10 @@
54
54
  "test:watch": "vitest watch"
55
55
  },
56
56
  "dependencies": {
57
- "@cedarjs/context": "8.0.0-canary.3569",
58
- "@cedarjs/graphql-server": "8.0.0-canary.3569",
59
- "@cedarjs/project-config": "8.0.0-canary.3569",
57
+ "@cedarjs/context": "8.0.0-canary.3571",
58
+ "@cedarjs/graphql-server": "8.0.0-canary.3571",
59
+ "@cedarjs/permissions": "8.0.0-canary.3571",
60
+ "@cedarjs/project-config": "8.0.0-canary.3571",
60
61
  "@prisma/internals": "7.10.1",
61
62
  "@testing-library/dom": "10.4.2",
62
63
  "@testing-library/jest-dom": "6.9.1",
@@ -74,19 +75,19 @@
74
75
  },
75
76
  "devDependencies": {
76
77
  "@arethetypeswrong/cli": "0.18.5",
77
- "@cedarjs/auth": "8.0.0-canary.3569",
78
- "@cedarjs/framework-tools": "8.0.0-canary.3569",
79
- "@cedarjs/router": "8.0.0-canary.3569",
80
- "@cedarjs/web": "8.0.0-canary.3569",
78
+ "@cedarjs/auth": "8.0.0-canary.3571",
79
+ "@cedarjs/framework-tools": "8.0.0-canary.3571",
80
+ "@cedarjs/router": "8.0.0-canary.3571",
81
+ "@cedarjs/web": "8.0.0-canary.3571",
81
82
  "concurrently": "9.2.5",
82
83
  "publint": "0.3.25",
83
84
  "typescript": "5.9.3",
84
85
  "vitest": "4.1.12"
85
86
  },
86
87
  "peerDependencies": {
87
- "@cedarjs/auth": "8.0.0-canary.3569",
88
- "@cedarjs/router": "8.0.0-canary.3569",
89
- "@cedarjs/web": "8.0.0-canary.3569",
88
+ "@cedarjs/auth": "8.0.0-canary.3571",
89
+ "@cedarjs/router": "8.0.0-canary.3571",
90
+ "@cedarjs/web": "8.0.0-canary.3571",
90
91
  "vitest": "4.1.12"
91
92
  },
92
93
  "peerDependenciesMeta": {