@forge/react

11.13.0-next.0-experimental-bf21d1e11.13.0-next.1
~

Modified (4 files)

Index: package/out/hooks/__test__/usePermissions.test.js
===================================================================
--- package/out/hooks/__test__/usePermissions.test.js
+++ package/out/hooks/__test__/usePermissions.test.js
@@ -739,8 +739,33 @@
             expect(result.current.hasPermission).toBe(false);
             expect(result.current.missingPermissions?.external?.fetch?.client).toEqual(['http://example.com']);
         });
     });
+    describe('Input shape validation', () => {
+        beforeEach(() => {
+            mockGetContext.mockResolvedValue({
+                permissions: { scopes: ['read:confluence-content'] }
+            });
+        });
+        it.each([
+            [{ scopes: 'read:confluence-content' }, 'scopes should be an array, not a string'],
+            [{ external: 'https://api.example.com' }, 'external should be an object, not a string'],
+            [{ external: { fetch: ['https://api.example.com'] } }, 'external.fetch should be an object, not an array'],
+            [
+                { external: { fetch: { backend: 'https://api.zoom.com' } } },
+                'external.fetch.backend should be an array, not a string'
+            ]
+        ])('should set error for invalid input %#', async (requiredPermissions, expectedMessage) => {
+            const { result } = (0, react_hooks_1.renderHook)(() => (0, usePermissions_1.usePermissions)(requiredPermissions));
+            await (0, react_hooks_1.act)(async () => {
+                await new Promise((resolve) => setTimeout(resolve, 10));
+            });
+            expect(result.current.isLoading).toBe(false);
+            expect(result.current.hasPermission).toBe(false);
+            expect(result.current.error).toBeInstanceOf(TypeError);
+            expect(result.current.error?.message).toBe(expectedMessage);
+        });
+    });
     describe('Edge cases', () => {
         it('should handle empty required permissions', async () => {
             const mockContext = {
                 permissions: {
Index: package/package.json
===================================================================
--- package/package.json
+++ package/package.json
@@ -1,7 +1,7 @@
 {
   "name": "@forge/react",
-  "version": "11.13.0-next.0-experimental-bf21d1e",
+  "version": "11.13.0-next.1",
   "description": "Forge React reconciler",
   "author": "Atlassian",
   "license": "SEE LICENSE IN LICENSE.txt",
   "main": "out/index.js",
@@ -31,9 +31,9 @@
   "dependencies": {
     "@atlaskit/adf-schema": "^48.0.0",
     "@atlaskit/adf-utils": "^19.19.0",
     "@atlaskit/forge-react-types": "^0.62.0",
-    "@forge/bridge": "^5.13.1-next.1-experimental-bf21d1e",
+    "@forge/bridge": "^5.14.0-next.4",
     "@forge/egress": "^2.3.1",
     "@forge/i18n": "0.0.7",
     "@types/react": "^18.2.64",
     "@types/react-reconciler": "^0.28.8",
Index: package/CHANGELOG.md
===================================================================
--- package/CHANGELOG.md
+++ package/CHANGELOG.md
@@ -1,15 +1,16 @@
 # @forge/react
 
-## 11.13.0-next.0-experimental-bf21d1e
+## 11.13.0-next.1
 
 ### Minor Changes
 
-- fdb2861: Export Global Component prop types
+- 16a4b01: Updated SDK to throw type error
 
 ### Patch Changes
 
-- @forge/[email protected]
+- Updated dependencies [16a4b01]
+  - @forge/[email protected]
 
 ## 11.13.0-next.0
 
 ### Minor Changes
File too large for inline diff