Some checks failed
Build & Deploy / 🔍 Prepare (push) Successful in 20s
Build & Deploy / 🧪 QA (push) Failing after 34s
Build & Deploy / 🏗️ Build (push) Has started running
Build & Deploy / 🚀 Deploy (push) Has been cancelled
Build & Deploy / 🧪 Smoke Test (push) Has been cancelled
Build & Deploy / ⚡ Lighthouse (push) Has been cancelled
Build & Deploy / 🔔 Notify (push) Has been cancelled
1 line
6.8 KiB
Plaintext
1 line
6.8 KiB
Plaintext
{"version":3,"sources":["../../src/utilities/isolateObjectProperty.spec.ts"],"sourcesContent":["import { describe, expect, it } from 'vitest'\n\nimport { isolateObjectProperty } from './isolateObjectProperty.js'\n\ndescribe('isolateObjectProperty', () => {\n describe('basic isolation behavior', () => {\n it('should isolate specified property from the original object', () => {\n const original = { a: 1, b: 2 }\n const proxy = isolateObjectProperty(original, 'a')\n\n proxy.a = 100\n\n expect(proxy.a).toBe(100)\n expect(original.a).toBe(1) // Original unchanged\n })\n\n it('should share non-isolated properties with the original object', () => {\n const original = { a: 1, b: 2 }\n const proxy = isolateObjectProperty(original, 'a')\n\n proxy.b = 200\n\n expect(proxy.b).toBe(200)\n expect(original.b).toBe(200) // Original also changed\n })\n\n it('should support isolating multiple properties', () => {\n const original = { a: 1, b: 2, c: 3 }\n const proxy = isolateObjectProperty(original, ['a', 'b'])\n\n proxy.a = 100\n proxy.b = 200\n\n expect(proxy.a).toBe(100)\n expect(proxy.b).toBe(200)\n expect(original.a).toBe(1)\n expect(original.b).toBe(2)\n })\n\n it('should support deleting isolated properties', () => {\n const original: Record<string, any> = { a: 1, b: 2 }\n const proxy = isolateObjectProperty(original, 'a')\n\n delete proxy.a\n\n expect('a' in proxy).toBe(false)\n expect('a' in original).toBe(true) // Original still has it\n })\n\n it('should support \"in\" operator for isolated properties', () => {\n const original: Record<string, any> = { a: 1, b: 2 }\n const proxy = isolateObjectProperty(original, 'a')\n\n expect('a' in proxy).toBe(true)\n expect('b' in proxy).toBe(true)\n\n delete proxy.a\n expect('a' in proxy).toBe(false)\n })\n })\n\n describe('private field access (Node 24+ compatibility)', () => {\n /**\n * Class with private fields to test that the proxy correctly handles\n * getters/setters that access private fields (Node 24+ compatibility).\n */\n class ObjectWithPrivateFields {\n #privateValue: string\n\n constructor(value: string) {\n this.#privateValue = value\n }\n\n get value(): string {\n return this.#privateValue\n }\n\n set value(newValue: string) {\n this.#privateValue = newValue\n }\n }\n\n it('should allow reading properties via getters that access private fields when not isolated', () => {\n const original = new ObjectWithPrivateFields('secret')\n\n expect(original.value).toBe('secret')\n })\n\n it('should allow reading properties via getters that access private fields', () => {\n const original = new ObjectWithPrivateFields('secret')\n const proxy = isolateObjectProperty(original, 'nonExistentKey' as keyof typeof original)\n\n // This would throw \"Cannot read private member\" if receiver is wrong\n expect(proxy.value).toBe('secret')\n })\n\n it('should allow writing properties via setters that access private fields', () => {\n const original = new ObjectWithPrivateFields('secret')\n const proxy = isolateObjectProperty(original, 'nonExistentKey' as keyof typeof original)\n\n // This would throw \"Cannot write private member\" if receiver is wrong\n proxy.value = 'updated'\n\n expect(proxy.value).toBe('updated')\n expect(original.value).toBe('updated')\n })\n\n it('should work with Headers-like objects (simulating Request.headers)', () => {\n // Simulate a Request-like object with headers\n class MockRequest {\n #headers: Headers\n\n constructor() {\n this.#headers = new Headers({ 'content-type': 'application/json' })\n }\n\n get headers(): Headers {\n return this.#headers\n }\n }\n\n const request = new MockRequest()\n const proxy = isolateObjectProperty(request, 'nonExistentKey' as keyof typeof request)\n\n // This simulates what happens in createLocalReq when checking req.headers\n expect(proxy.headers).toBeInstanceOf(Headers)\n expect(proxy.headers.get('content-type')).toBe('application/json')\n })\n })\n})\n"],"names":["describe","expect","it","isolateObjectProperty","original","a","b","proxy","toBe","c","ObjectWithPrivateFields","value","newValue","MockRequest","Headers","headers","request","toBeInstanceOf","get"],"mappings":"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"} |