diff --git a/package-lock.json b/package-lock.json index e18e715..f901f1e 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1190,9 +1190,9 @@ } }, "node_modules/@junobuild/config": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/@junobuild/config/-/config-0.1.5.tgz", - "integrity": "sha512-zQCM7p1fKIdd03PaSv7eJK53uD7/eKIHXuMnFMlr2ty2VAVbykp1+tEGAzJdZplQ6maVO6tKXcl0SjyY812hiQ==", + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/@junobuild/config/-/config-0.1.8.tgz", + "integrity": "sha512-25FN9nh0X4cauAQx9JlnUAbC4ZIdAoAtqBhYLBORrGXybFRT+48ber7LoXpws4BF5N8//tH4PwCuvl+aRaOWAQ==", "license": "MIT", "peerDependencies": { "zod": "^3" @@ -7069,7 +7069,7 @@ "version": "3.3.0", "license": "MIT", "dependencies": { - "@junobuild/config": "^0.1.5" + "@junobuild/config": "^0.1.8" }, "peerDependencies": { "@junobuild/config-loader": "^0.2.1" diff --git a/plugins/plugin-tools/package.json b/plugins/plugin-tools/package.json index 94f6a0a..08124db 100644 --- a/plugins/plugin-tools/package.json +++ b/plugins/plugin-tools/package.json @@ -32,10 +32,10 @@ "plugin" ], "homepage": "https://juno.build", - "dependencies": { - "@junobuild/config": "^0.1.5" - }, "peerDependencies": { "@junobuild/config-loader": "^0.2.1" + }, + "dependencies": { + "@junobuild/config": "^0.1.8" } } diff --git a/plugins/plugin-tools/src/config.spec.ts b/plugins/plugin-tools/src/config.spec.ts index c570240..9ee3b81 100644 --- a/plugins/plugin-tools/src/config.spec.ts +++ b/plugins/plugin-tools/src/config.spec.ts @@ -208,19 +208,99 @@ describe('config', () => { vi.clearAllMocks(); }); - it('returns undefined if using docker', async () => { - const id = await orbiterId({params: {container: true}, mode: MODE_DEVELOPMENT}); - expect(id).toBeUndefined(); + describe(MODE_DEVELOPMENT, () => { + it('returns undefined in dev mode with container true and no config file', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(false); + + const id = await orbiterId({params: {container: true}, mode: MODE_DEVELOPMENT}); + expect(id).toBeUndefined(); + }); + + it('returns orbiter ID from config if it exists', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ + orbiter: {ids: {development: 'orb-dev-id'}} + } as unknown as JunoConfig); + + const id = await orbiterId({params: {container: true}, mode: MODE_DEVELOPMENT}); + expect(id).toBe('orb-dev-id'); + }); + + it('returns undefined if config exists but development ID is not set', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ + orbiter: {ids: {}} + } as unknown as JunoConfig); + + const id = await orbiterId({params: {container: true}, mode: MODE_DEVELOPMENT}); + expect(id).toBeUndefined(); + }); + + it('returns undefined if config exists but only ID is set', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ + orbiter: {id: 'orb-id'} + } as unknown as JunoConfig); + + const id = await orbiterId({params: {container: true}, mode: MODE_DEVELOPMENT}); + expect(id).toBeUndefined(); + }); + + it('returns undefined if config exists but no ids', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ + orbiter: {} + } as unknown as JunoConfig); + + const id = await orbiterId({params: {container: true}, mode: MODE_DEVELOPMENT}); + expect(id).toBeUndefined(); + }); }); - it('returns orbiter ID from config', async () => { - vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); - vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ - orbiter: {id: 'orb-id'} - } as unknown as JunoConfig); + describe('no container', () => { + it('reads config and returns orbiter ID', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ + orbiter: {id: 'orb-id'} + } as unknown as JunoConfig); + + const id = await orbiterId({params: {container: false}, mode: 'production'}); + expect(id).toBe('orb-id'); + }); + + it('falls back to `orbiterId` if `id` is not present', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({ + orbiter: {orbiterId: 'fallback-id'} + } as unknown as JunoConfig); + + const id = await orbiterId({params: {}, mode: 'production'}); + expect(id).toBe('fallback-id'); + }); + + it('returns undefined if config has no orbiter key', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue({} as unknown as JunoConfig); + + const id = await orbiterId({params: {}, mode: 'production'}); + expect(id).toBeUndefined(); + }); - const id = await orbiterId({params: {}, mode: 'production'}); - expect(id).toBe('orb-id'); + it('returns undefined if config is undefined', async () => { + vi.spyOn(configLoader, 'junoConfigExist').mockResolvedValue(true); + vi.spyOn(configLoader, 'readJunoConfig').mockResolvedValue( + undefined as unknown as JunoConfig + ); + + const id = await orbiterId({params: {}, mode: 'production'}); + expect(id).toBeUndefined(); + }); }); }); diff --git a/plugins/plugin-tools/src/config.ts b/plugins/plugin-tools/src/config.ts index 4467747..de48b58 100644 --- a/plugins/plugin-tools/src/config.ts +++ b/plugins/plugin-tools/src/config.ts @@ -83,12 +83,36 @@ const containerSatelliteId = async ({mode}: ConfigArgs): Promise => { export const orbiterId = async (args: ConfigArgs): Promise => { if (useDockerContainer(args)) { - return undefined; + return await containerOrbiterId(args); } return await junoConfigOrbiterId(args); }; +const containerOrbiterId = async ({mode}: ConfigArgs): Promise => { + const exist = await junoConfigExist(); + + if (!exist) { + return undefined; + } + + const config = await readJunoConfig({mode}); + + if (config === undefined || !('orbiter' in config)) { + return undefined; + } + + const {orbiter} = config; + + if (orbiter === undefined) { + return undefined; + } + + const {ids} = orbiter; + + return ids?.[MODE_DEVELOPMENT]; +}; + const junoConfigOrbiterId = async (args: ConfigArgs): Promise => { await assertJunoConfig();