UNPKG

@apollo-orbit/angular

Version:

A fully-featured GraphQL client for Angular with modular state management.

60 lines 10.5 kB
import { ENVIRONMENT_INITIALIZER, inject, makeEnvironmentProviders } from '@angular/core'; import { Apollo } from './apollo'; import { APOLLO_CLIENT_FACTORY, apolloClientFactory } from './clientFactory'; import { APOLLO_INSTANCE_FACTORY, APOLLO_MULTI_ROOT, APOLLO_PROVIDED } from './tokens'; export const APOLLO_ORBIT_PROVIDERS = [ [ { provide: Apollo, useFactory: () => apolloFactory(null) }, // guard { provide: APOLLO_PROVIDED, useValue: true }, { provide: APOLLO_INSTANCE_FACTORY, useFactory: apolloInstanceFactory }, { provide: APOLLO_CLIENT_FACTORY, useValue: apolloClientFactory } ] ]; export function withApolloOptions(options) { return { kind: 'APOLLO_ORBIT_OPTIONS', providers: getApolloInstanceProviders(Apollo, options) }; } export function provideApolloOrbit(...features) { return makeEnvironmentProviders([ ...APOLLO_ORBIT_PROVIDERS, features.map(({ providers }) => providers), { provide: ENVIRONMENT_INITIALIZER, multi: true, useFactory: () => apolloOrbitRootGuard } ]); } export function provideApolloInstance(token, options) { return makeEnvironmentProviders(getApolloInstanceProviders(token, options)); } function getApolloInstanceProviders(token, options) { return [ typeof options === 'function' ? { provide: token, useFactory: () => apolloFactory(options()) } : { provide: token, useFactory: () => apolloFactory(options) } ]; } function apolloInstanceFactory() { return (_clientId, client, defaultOptions) => new Apollo(client, defaultOptions); } function apolloFactory(options) { if (!options) throw new Error('withApolloOptions feature must be passed to provideApolloOrbit() before injecting Apollo'); const { id = 'default', cache, defaultOptions, ...rest } = options; const createClient = inject(APOLLO_CLIENT_FACTORY); const client = createClient({ cache, defaultOptions, ...rest }); return inject(APOLLO_INSTANCE_FACTORY)(id, client, defaultOptions); } function apolloOrbitRootGuard() { const isProvided = inject(APOLLO_PROVIDED, { optional: true, skipSelf: true }); const multiRoot = inject(APOLLO_MULTI_ROOT, { optional: true }); if (isProvided && multiRoot !== true) { throw new Error('provideApolloOrbit() has been called more than once. Consider calling provideStates() instead. Otherwise, you may provide APOLLO_MULTI_ROOT token.'); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vY29yZS9zcmMvcHJvdmlkZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSx1QkFBdUIsRUFBd0IsTUFBTSxFQUFrQix3QkFBd0IsRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFFaEosT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUUscUJBQXFCLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUU3RSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsaUJBQWlCLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBUXZGLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFvQjtJQUNyRDtRQUNFLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsUUFBUTtRQUNwRSxFQUFFLE9BQU8sRUFBRSxlQUFlLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRTtRQUM1QyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxVQUFVLEVBQUUscUJBQXFCLEVBQUU7UUFDdkUsRUFBRSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsUUFBUSxFQUFFLG1CQUFtQixFQUFFO0tBQ2xFO0NBQ0YsQ0FBQztBQUlGLE1BQU0sVUFBVSxpQkFBaUIsQ0FBQyxPQUE4QztJQUM5RSxPQUFPO1FBQ0wsSUFBSSxFQUFFLHNCQUFzQjtRQUM1QixTQUFTLEVBQUUsMEJBQTBCLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQztLQUN2RCxDQUFDO0FBQ0osQ0FBQztBQUVELE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxHQUFHLFFBQW1DO0lBQ3ZFLE9BQU8sd0JBQXdCLENBQUM7UUFDOUIsR0FBRyxzQkFBc0I7UUFDekIsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsU0FBUyxFQUFFLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQztRQUMxQyxFQUFFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxLQUFLLEVBQUUsSUFBSSxFQUFFLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxvQkFBb0IsRUFBRTtLQUMxRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLHFCQUFxQixDQUFDLEtBQTZDLEVBQUUsT0FBOEM7SUFDakksT0FBTyx3QkFBd0IsQ0FBQywwQkFBMEIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUywwQkFBMEIsQ0FBQyxLQUFrRCxFQUFFLE9BQW1EO0lBQ3pJLE9BQU87UUFDTCxPQUFPLE9BQU8sS0FBSyxVQUFVO1lBQzNCLENBQUMsQ0FBQztnQkFDQSxPQUFPLEVBQUUsS0FBSztnQkFDZCxVQUFVLEVBQUUsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLE9BQU8sRUFBRSxDQUFDO2FBQzNDO1lBQ0QsQ0FBQyxDQUFDO2dCQUNBLE9BQU8sRUFBRSxLQUFLO2dCQUNkLFVBQVUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDO2FBQ3pDO0tBQ0osQ0FBQztBQUNKLENBQUM7QUFFRCxTQUFTLHFCQUFxQjtJQUM1QixPQUFPLENBQUMsU0FBaUIsRUFBRSxNQUF5QixFQUFFLGNBQStCLEVBQVUsRUFBRSxDQUFDLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxjQUFjLENBQUMsQ0FBQztBQUN2SSxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsT0FBNkI7SUFDbEQsSUFBSSxDQUFDLE9BQU87UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLDBGQUEwRixDQUFDLENBQUM7SUFDMUgsTUFBTSxFQUFFLEVBQUUsR0FBRyxTQUFTLEVBQUUsS0FBSyxFQUFFLGNBQWMsRUFBRSxHQUFHLElBQUksRUFBRSxHQUFHLE9BQU8sQ0FBQztJQUNuRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztJQUNuRCxNQUFNLE1BQU0sR0FBRyxZQUFZLENBQUMsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLEdBQUcsSUFBSSxFQUFFLENBQUMsQ0FBQztJQUNoRSxPQUFPLE1BQU0sQ0FBQyx1QkFBdUIsQ0FBQyxDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFDckUsQ0FBQztBQUVELFNBQVMsb0JBQW9CO0lBQzNCLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBVSxlQUFlLEVBQUUsRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBVSxpQkFBaUIsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQ3pFLElBQUksVUFBVSxJQUFJLFNBQVMsS0FBSyxJQUFJLEVBQUUsQ0FBQztRQUNyQyxNQUFNLElBQUksS0FBSyxDQUFDLG9KQUFvSixDQUFDLENBQUM7SUFDeEssQ0FBQztBQUNILENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgRW52aXJvbm1lbnRQcm92aWRlcnMsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycywgUHJvdmlkZXIsIFR5cGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcclxuaW1wb3J0IHsgQXBvbGxvQ2xpZW50IH0gZnJvbSAnQGFwb2xsby9jbGllbnQvY29yZSc7XHJcbmltcG9ydCB7IEFwb2xsbyB9IGZyb20gJy4vYXBvbGxvJztcclxuaW1wb3J0IHsgQVBPTExPX0NMSUVOVF9GQUNUT1JZLCBhcG9sbG9DbGllbnRGYWN0b3J5IH0gZnJvbSAnLi9jbGllbnRGYWN0b3J5JztcclxuaW1wb3J0IHsgQXBvbGxvSW5zdGFuY2VGYWN0b3J5IH0gZnJvbSAnLi9pbnN0YW5jZUZhY3RvcnknO1xyXG5pbXBvcnQgeyBBUE9MTE9fSU5TVEFOQ0VfRkFDVE9SWSwgQVBPTExPX01VTFRJX1JPT1QsIEFQT0xMT19QUk9WSURFRCB9IGZyb20gJy4vdG9rZW5zJztcclxuaW1wb3J0IHsgQXBvbGxvT3B0aW9ucywgRGVmYXVsdE9wdGlvbnMgfSBmcm9tICcuL3R5cGVzJztcclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQXBvbGxvT3JiaXRGZWF0dXJlIHtcclxuICBraW5kOiBgQVBPTExPX09SQklUXyR7c3RyaW5nfWA7XHJcbiAgcHJvdmlkZXJzOiBBcnJheTxQcm92aWRlcj47XHJcbn1cclxuXHJcbmV4cG9ydCBjb25zdCBBUE9MTE9fT1JCSVRfUFJPVklERVJTOiBBcnJheTxQcm92aWRlcj4gPSBbXHJcbiAgW1xyXG4gICAgeyBwcm92aWRlOiBBcG9sbG8sIHVzZUZhY3Rvcnk6ICgpID0+IGFwb2xsb0ZhY3RvcnkobnVsbCkgfSwgLy8gZ3VhcmRcclxuICAgIHsgcHJvdmlkZTogQVBPTExPX1BST1ZJREVELCB1c2VWYWx1ZTogdHJ1ZSB9LFxyXG4gICAgeyBwcm92aWRlOiBBUE9MTE9fSU5TVEFOQ0VfRkFDVE9SWSwgdXNlRmFjdG9yeTogYXBvbGxvSW5zdGFuY2VGYWN0b3J5IH0sXHJcbiAgICB7IHByb3ZpZGU6IEFQT0xMT19DTElFTlRfRkFDVE9SWSwgdXNlVmFsdWU6IGFwb2xsb0NsaWVudEZhY3RvcnkgfVxyXG4gIF1cclxuXTtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQXBvbGxvT3B0aW9ucyhvcHRpb25zOiBBcG9sbG9PcHRpb25zKTogQXBvbGxvT3JiaXRGZWF0dXJlO1xyXG5leHBvcnQgZnVuY3Rpb24gd2l0aEFwb2xsb09wdGlvbnMob3B0aW9uc0ZhY3Rvcnk6ICgpID0+IEFwb2xsb09wdGlvbnMpOiBBcG9sbG9PcmJpdEZlYXR1cmU7XHJcbmV4cG9ydCBmdW5jdGlvbiB3aXRoQXBvbGxvT3B0aW9ucyhvcHRpb25zOiBBcG9sbG9PcHRpb25zIHwgKCgpID0+IEFwb2xsb09wdGlvbnMpKTogQXBvbGxvT3JiaXRGZWF0dXJlIHtcclxuICByZXR1cm4ge1xyXG4gICAga2luZDogJ0FQT0xMT19PUkJJVF9PUFRJT05TJyxcclxuICAgIHByb3ZpZGVyczogZ2V0QXBvbGxvSW5zdGFuY2VQcm92aWRlcnMoQXBvbGxvLCBvcHRpb25zKVxyXG4gIH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlQXBvbGxvT3JiaXQoLi4uZmVhdHVyZXM6IEFycmF5PEFwb2xsb09yYml0RmVhdHVyZT4pOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXHJcbiAgICAuLi5BUE9MTE9fT1JCSVRfUFJPVklERVJTLFxyXG4gICAgZmVhdHVyZXMubWFwKCh7IHByb3ZpZGVycyB9KSA9PiBwcm92aWRlcnMpLFxyXG4gICAgeyBwcm92aWRlOiBFTlZJUk9OTUVOVF9JTklUSUFMSVpFUiwgbXVsdGk6IHRydWUsIHVzZUZhY3Rvcnk6ICgpID0+IGFwb2xsb09yYml0Um9vdEd1YXJkIH1cclxuICBdKTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVBcG9sbG9JbnN0YW5jZSh0b2tlbjogVHlwZTx1bmtub3duPiB8IEluamVjdGlvblRva2VuPEFwb2xsbz4sIG9wdGlvbnM6IEFwb2xsb09wdGlvbnMgfCAoKCkgPT4gQXBvbGxvT3B0aW9ucykpOiBFbnZpcm9ubWVudFByb3ZpZGVycyB7XHJcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhnZXRBcG9sbG9JbnN0YW5jZVByb3ZpZGVycyh0b2tlbiwgb3B0aW9ucykpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBnZXRBcG9sbG9JbnN0YW5jZVByb3ZpZGVycyh0b2tlbjogVHlwZTx1bmtub3duPiB8IEluamVjdGlvblRva2VuPEFwb2xsbzxhbnk+Piwgb3B0aW9uczogQXBvbGxvT3B0aW9uczxhbnk+IHwgKCgpID0+IEFwb2xsb09wdGlvbnMpKTogQXJyYXk8UHJvdmlkZXI+IHtcclxuICByZXR1cm4gW1xyXG4gICAgdHlwZW9mIG9wdGlvbnMgPT09ICdmdW5jdGlvbidcclxuICAgICAgPyB7XHJcbiAgICAgICAgcHJvdmlkZTogdG9rZW4sXHJcbiAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gYXBvbGxvRmFjdG9yeShvcHRpb25zKCkpXHJcbiAgICAgIH1cclxuICAgICAgOiB7XHJcbiAgICAgICAgcHJvdmlkZTogdG9rZW4sXHJcbiAgICAgICAgdXNlRmFjdG9yeTogKCkgPT4gYXBvbGxvRmFjdG9yeShvcHRpb25zKVxyXG4gICAgICB9XHJcbiAgXTtcclxufVxyXG5cclxuZnVuY3Rpb24gYXBvbGxvSW5zdGFuY2VGYWN0b3J5KCk6IEFwb2xsb0luc3RhbmNlRmFjdG9yeSB7XHJcbiAgcmV0dXJuIChfY2xpZW50SWQ6IHN0cmluZywgY2xpZW50OiBBcG9sbG9DbGllbnQ8YW55PiwgZGVmYXVsdE9wdGlvbnM/OiBEZWZhdWx0T3B0aW9ucyk6IEFwb2xsbyA9PiBuZXcgQXBvbGxvKGNsaWVudCwgZGVmYXVsdE9wdGlvbnMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcG9sbG9GYWN0b3J5KG9wdGlvbnM6IEFwb2xsb09wdGlvbnMgfCBudWxsKTogQXBvbGxvIHtcclxuICBpZiAoIW9wdGlvbnMpIHRocm93IG5ldyBFcnJvcignd2l0aEFwb2xsb09wdGlvbnMgZmVhdHVyZSBtdXN0IGJlIHBhc3NlZCB0byBwcm92aWRlQXBvbGxvT3JiaXQoKSBiZWZvcmUgaW5qZWN0aW5nIEFwb2xsbycpO1xyXG4gIGNvbnN0IHsgaWQgPSAnZGVmYXVsdCcsIGNhY2hlLCBkZWZhdWx0T3B0aW9ucywgLi4ucmVzdCB9ID0gb3B0aW9ucztcclxuICBjb25zdCBjcmVhdGVDbGllbnQgPSBpbmplY3QoQVBPTExPX0NMSUVOVF9GQUNUT1JZKTtcclxuICBjb25zdCBjbGllbnQgPSBjcmVhdGVDbGllbnQoeyBjYWNoZSwgZGVmYXVsdE9wdGlvbnMsIC4uLnJlc3QgfSk7XHJcbiAgcmV0dXJuIGluamVjdChBUE9MTE9fSU5TVEFOQ0VfRkFDVE9SWSkoaWQsIGNsaWVudCwgZGVmYXVsdE9wdGlvbnMpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhcG9sbG9PcmJpdFJvb3RHdWFyZCgpOiB2b2lkIHtcclxuICBjb25zdCBpc1Byb3ZpZGVkID0gaW5qZWN0PGJvb2xlYW4+KEFQT0xMT19QUk9WSURFRCwgeyBvcHRpb25hbDogdHJ1ZSwgc2tpcFNlbGY6IHRydWUgfSk7XHJcbiAgY29uc3QgbXVsdGlSb290ID0gaW5qZWN0PGJvb2xlYW4+KEFQT0xMT19NVUxUSV9ST09ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xyXG4gIGlmIChpc1Byb3ZpZGVkICYmIG11bHRpUm9vdCAhPT0gdHJ1ZSkge1xyXG4gICAgdGhyb3cgbmV3IEVycm9yKCdwcm92aWRlQXBvbGxvT3JiaXQoKSBoYXMgYmVlbiBjYWxsZWQgbW9yZSB0aGFuIG9uY2UuIENvbnNpZGVyIGNhbGxpbmcgcHJvdmlkZVN0YXRlcygpIGluc3RlYWQuIE90aGVyd2lzZSwgeW91IG1heSBwcm92aWRlIEFQT0xMT19NVUxUSV9ST09UIHRva2VuLicpO1xyXG4gIH1cclxufVxyXG4iXX0=