@ethlete/query 6.0.0-next.62 → 6.0.0-next.63

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.
@@ -0,0 +1,131 @@
1
+ import { joinPathFragments, readJson, visitNotIgnoredFiles } from '@nx/devkit';
2
+ import { dirname } from 'node:path';
3
+ import { createModuleGraph } from './module-graph.js';
4
+ const PROJECT_TSCONFIGS = ['tsconfig.lib.json', 'tsconfig.app.json', 'tsconfig.spec.json'];
5
+ const LEGACY_RESOLUTIONS = new Set(['node', 'node10']);
6
+ const MODULE_SPECIFIER = /(?:\bfrom\s*|\bimport\s*\(?\s*)['"]([^'"]+)['"]/g;
7
+ const projectRootOf = (tree, filePath) => {
8
+ let dir = dirname(filePath);
9
+ while (dir !== '.' && dir !== '/' && dir !== '') {
10
+ if (tree.exists(joinPathFragments(dir, 'project.json')))
11
+ return dir;
12
+ dir = dirname(dir);
13
+ }
14
+ return null;
15
+ };
16
+ const effectiveModuleResolution = (tree, configPath, seen = new Set()) => {
17
+ if (seen.has(configPath) || !tree.exists(configPath))
18
+ return null;
19
+ seen.add(configPath);
20
+ const config = readJson(tree, configPath);
21
+ const own = config.compilerOptions?.moduleResolution;
22
+ if (own)
23
+ return own.toLowerCase();
24
+ const parents = config.extends === undefined ? [] : [config.extends].flat();
25
+ for (const parent of [...parents].reverse()) {
26
+ if (!parent.startsWith('.'))
27
+ continue;
28
+ const resolved = effectiveModuleResolution(tree, joinPathFragments(dirname(configPath), parent.endsWith('.json') ? parent : `${parent}.json`), seen);
29
+ if (resolved)
30
+ return resolved;
31
+ }
32
+ return null;
33
+ };
34
+ const collectAliasEdges = (tree, graph) => {
35
+ const edges = new Map();
36
+ visitNotIgnoredFiles(tree, '', (filePath) => {
37
+ if (!filePath.endsWith('.ts') || filePath.includes('node_modules/'))
38
+ return;
39
+ const fromRoot = projectRootOf(tree, filePath);
40
+ if (!fromRoot)
41
+ return;
42
+ for (const [, specifier] of (tree.read(filePath, 'utf-8') ?? '').matchAll(MODULE_SPECIFIER)) {
43
+ if (!specifier || specifier.startsWith('.') || !graph.isWorkspaceSpecifier(specifier))
44
+ continue;
45
+ const target = graph.resolveFile(filePath, specifier);
46
+ const targetRoot = target ? projectRootOf(tree, target) : null;
47
+ if (!targetRoot || targetRoot === fromRoot)
48
+ continue;
49
+ const list = edges.get(fromRoot) ?? [];
50
+ if (!list.some((edge) => edge.alias === specifier))
51
+ list.push({ alias: specifier, targetRoot });
52
+ edges.set(fromRoot, list);
53
+ }
54
+ });
55
+ edges.forEach((list) => list.sort((a, b) => a.alias.localeCompare(b.alias)));
56
+ return edges;
57
+ };
58
+ const projectsReaching = (tree, graph, importingRoots) => {
59
+ const reached = new Map([...importingRoots].map((root) => [root, null]));
60
+ const edges = collectAliasEdges(tree, graph);
61
+ const roots = [...edges.keys()].sort();
62
+ let grew = true;
63
+ while (grew) {
64
+ grew = false;
65
+ for (const root of roots) {
66
+ if (reached.has(root))
67
+ continue;
68
+ const edge = edges.get(root).find(({ targetRoot }) => reached.has(targetRoot));
69
+ if (!edge)
70
+ continue;
71
+ reached.set(root, edge.alias);
72
+ grew = true;
73
+ }
74
+ }
75
+ return reached;
76
+ };
77
+ /**
78
+ * Lists every project tsconfig that resolves modules with `node` / `node10` while the project imports a specifier
79
+ * `matches` accepts, directly or through a workspace path alias. That resolution ignores the `exports` map, so a
80
+ * package subpath like `@ethlete/query/testing` does not resolve.
81
+ */
82
+ export const findLegacyModuleResolutions = (tree, graph, files, matches) => {
83
+ const directSpecifiers = new Map();
84
+ for (const filePath of files) {
85
+ if (!filePath.endsWith('.ts'))
86
+ continue;
87
+ const root = projectRootOf(tree, filePath);
88
+ if (!root || directSpecifiers.has(root))
89
+ continue;
90
+ const specifier = Array.from((tree.read(filePath, 'utf-8') ?? '').matchAll(MODULE_SPECIFIER), ([, s]) => s).find((s) => s !== undefined && matches(s));
91
+ if (specifier)
92
+ directSpecifiers.set(root, specifier);
93
+ }
94
+ if (!directSpecifiers.size)
95
+ return [];
96
+ const reached = projectsReaching(tree, graph, new Set(directSpecifiers.keys()));
97
+ const findings = [];
98
+ for (const root of [...reached.keys()].sort()) {
99
+ const alias = reached.get(root) ?? null;
100
+ for (const name of PROJECT_TSCONFIGS) {
101
+ const configPath = joinPathFragments(root, name);
102
+ const resolution = effectiveModuleResolution(tree, configPath);
103
+ if (!resolution || !LEGACY_RESOLUTIONS.has(resolution))
104
+ continue;
105
+ findings.push({ configPath, resolution, specifier: directSpecifiers.get(root) ?? null, alias });
106
+ }
107
+ }
108
+ return findings;
109
+ };
110
+ const ETHLETE_SUBPATH = /^@ethlete\/[^/]+\/./;
111
+ /**
112
+ * Records a follow-up for every node-resolving project tsconfig whose project imports an `@ethlete/*` subpath
113
+ * (`@ethlete/query/testing`, `@ethlete/query-devtools/lazy`, ...), directly or through a workspace path alias.
114
+ * Runs after the rewrites, so it also sees the subpaths the migration itself adds.
115
+ */
116
+ export const reportLegacyModuleResolution = (tree, scope, report) => {
117
+ const files = [];
118
+ scope.visit(tree, (filePath) => files.push(filePath));
119
+ for (const { configPath, resolution, specifier, alias } of findLegacyModuleResolutions(tree, createModuleGraph(tree), files, (candidate) => ETHLETE_SUBPATH.test(candidate))) {
120
+ report.addFollowUp({
121
+ title: 'Project resolves modules with `node`, which cannot find `@ethlete/*` subpaths',
122
+ summary: alias
123
+ ? `${configPath} resolves modules with \`${resolution}\` and reaches an \`@ethlete/*\` subpath through \`${alias}\`.`
124
+ : `${configPath} resolves modules with \`${resolution}\` and imports \`${specifier}\`.`,
125
+ action: '`moduleResolution: node` (`node10`) ignores the `exports` map of the `@ethlete/*` packages, so subpath imports like `@ethlete/query-devtools/lazy` do not resolve - also when they sit in another project this one imports through a path alias. Set `moduleResolution` to `bundler` (or `node16` / `nodenext`) in the listed tsconfig or the base config it inherits it from.',
126
+ locations: [{ filePath: configPath }],
127
+ source: 'module-resolution',
128
+ });
129
+ }
130
+ };
131
+ //# sourceMappingURL=module-resolution.js.map
@@ -174,16 +174,7 @@ export const renameImportedReferences = (content, renames) => {
174
174
  });
175
175
  return { content: result, shadowed };
176
176
  };
177
- /**
178
- * Drops named imports whose local name no longer appears anywhere else in the file.
179
- *
180
- * The migration rewrites away the constructs that needed `def`, `AnyLegacyQueryCreator` and friends;
181
- * leaving the imports behind turns every touched file into a lint error, and `formatFiles` runs in
182
- * the same generator invocation so they land that way. Identifiers inside template strings count as
183
- * usage too - a component referenced only from an inline template must not be pruned.
184
- */
185
- export const pruneUnusedNamedImports = (content) => {
186
- const sourceFile = createSourceFile(content);
177
+ const collectUsedNames = (sourceFile) => {
187
178
  const used = new Set();
188
179
  const addWordsFrom = (text) => {
189
180
  for (const word of text.match(/[A-Za-z_$][\w$]*/g) ?? []) {
@@ -204,6 +195,20 @@ export const pruneUnusedNamedImports = (content) => {
204
195
  ts.forEachChild(node, visit);
205
196
  };
206
197
  visit(sourceFile);
198
+ return used;
199
+ };
200
+ export const findUsedNames = (content) => collectUsedNames(createSourceFile(content));
201
+ /**
202
+ * Drops named imports whose local name no longer appears anywhere else in the file.
203
+ *
204
+ * The migration rewrites away the constructs that needed `def`, `AnyLegacyQueryCreator` and friends;
205
+ * leaving the imports behind turns every touched file into a lint error, and `formatFiles` runs in
206
+ * the same generator invocation so they land that way. Identifiers inside template strings count as
207
+ * usage too - a component referenced only from an inline template must not be pruned.
208
+ */
209
+ export const pruneUnusedNamedImports = (content, candidates) => {
210
+ const sourceFile = createSourceFile(content);
211
+ const used = collectUsedNames(sourceFile);
207
212
  const replacements = [];
208
213
  for (const node of sourceFile.statements) {
209
214
  if (!ts.isImportDeclaration(node) ||
@@ -212,7 +217,7 @@ export const pruneUnusedNamedImports = (content) => {
212
217
  !ts.isNamedImports(node.importClause.namedBindings)) {
213
218
  continue;
214
219
  }
215
- const kept = node.importClause.namedBindings.elements.filter((element) => used.has(element.name.text));
220
+ const kept = node.importClause.namedBindings.elements.filter((element) => used.has(element.name.text) || (candidates && !candidates.has(element.name.text)));
216
221
  if (kept.length === node.importClause.namedBindings.elements.length)
217
222
  continue;
218
223
  const nextImport = printImportDeclaration(node, sourceFile, kept.map((element) => element.getText(sourceFile)));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ethlete/query",
3
- "version": "6.0.0-next.62",
3
+ "version": "6.0.0-next.63",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "https://github.com/ethlete-io/ethdk",
@@ -124,6 +124,19 @@ export declare const toolkitSelect: <TCreator extends AnyQueryCreator>(creator:
124
124
  * ```
125
125
  */
126
126
  export declare const toolkitCall: <TCreator extends AnyQueryCreator>(creator: TCreator, args: ActionCallArgs<TCreator>, options?: ToolkitCallOptions) => MappedEntityState<TCreator>;
127
+ type SuccessResponseOf<TCreator> = TCreator extends AnyQueryCreator ? ResponseType<QueryArgsOf<TCreator>> : never;
128
+ /**
129
+ * Emits the response every time a `toolkitCall` handle of one of the creators succeeds - the
130
+ * `facade.on(action.success)` of `@tomtomb/ngrx-toolkit`. Only handles of the same environment injector count.
131
+ *
132
+ * @example
133
+ * ```ts
134
+ * toolkitOnSuccess([postAcceptClaim, postDeclineClaim])
135
+ * .pipe(takeUntilDestroyed())
136
+ * .subscribe(() => this.reloadRoster());
137
+ * ```
138
+ */
139
+ export declare const toolkitOnSuccess: <const TCreators extends AnyQueryCreator | readonly AnyQueryCreator[]>(creators: TCreators, options?: ToolkitCallOptions) => Observable<SuccessResponseOf<TCreators extends readonly AnyQueryCreator[] ? TCreators[number] : TCreators>>;
127
140
  /** Emits `true` while any of the given loading streams is `true`. Nullish entries are skipped. */
128
141
  export declare const joinLoading: (observables: (Observable<boolean | null> | null | undefined)[]) => Observable<boolean>;
129
142
  /** Emits every non-null error of the given error streams, or `null` when there is none. Nullish entries are skipped. */
@@ -774,7 +774,7 @@ export declare const recordExecutionArgs: <TArgs extends QueryArgs>(state: Query
774
774
  * less than 100 ms after the previous one. Executions with different args (a search term typed fast,
775
775
  * a slider bound to `withArgs`) never count against each other.
776
776
  */
777
- export declare const circularQueryDependencyChecker: () => {
777
+ export declare const circularQueryDependencyChecker: (route: unknown) => {
778
778
  check: (args: RequestArgs<QueryArgs> | null | undefined) => void;
779
779
  };
780
780
  /**
@@ -3669,7 +3669,7 @@ export declare const gqlDataPropertyMissingInResponse: () => RuntimeError<600>;
3669
3669
  export declare const gqlErrorsInResponse: (errors: unknown[]) => HttpErrorResponse;
3670
3670
  export declare const tokensNotAvailableInsideAuthAndExec: () => RuntimeError<700>;
3671
3671
  export declare const invalidStateInsideSecureExecuteFactory: () => RuntimeError<701>;
3672
- export declare const circularQueryDependency: () => RuntimeError<800>;
3672
+ export declare const circularQueryDependency: (route: unknown) => RuntimeError<800>;
3673
3673
  export declare const queryExecutedAfterDestroyMessage: (route: unknown) => string;
3674
3674
  export declare const queryExecutedWhileParkedMessage: (route: unknown) => string;
3675
3675
  export declare const legacyPrepareWithoutInjectionContext: (creatorName: string | undefined, method?: "prepare" | "createSubject" | "createSignal") => RuntimeError<950>;
@@ -6136,7 +6136,21 @@ type QueryDevtoolsOptions = {
6136
6136
  * never clicks a devtools element by accident. Defaults to `false`.
6137
6137
  */
6138
6138
  showInAutomation?: boolean;
6139
+ /**
6140
+ * Mounts the devtools UI for you, so no `<et-query-devtools-lazy>` is needed in a template. Pass the
6141
+ * lazy entry point as a dynamic import; it loads once the application has rendered, and not at all
6142
+ * when a devtools UI is already on the page.
6143
+ *
6144
+ * @example
6145
+ * ```ts
6146
+ * provideQueryDevtools({ ui: () => import('@ethlete/query-devtools/lazy') })
6147
+ * ```
6148
+ */
6149
+ ui?: QueryDevtoolsUiLoader;
6139
6150
  };
6151
+ type QueryDevtoolsUiLoader = () => Promise<{
6152
+ mountQueryDevtools: (injector: EnvironmentInjector) => unknown;
6153
+ }>;
6140
6154
  /**
6141
6155
  * Undoes the latch `provideQueryDevtools()` sets, so a later spec in the same worker sees the devtools
6142
6156
  * disabled again. For specs only.
@@ -7407,6 +7421,8 @@ export declare class LegacyQuery<Response, Arguments extends BaseArguments | und
7407
7421
  private _errorAtExecute;
7408
7422
  private _ownLoadSettled;
7409
7423
  private _wasAborted;
7424
+ private _mockState;
7425
+ private _mockSubscription;
7410
7426
  state$: Observable<V2QueryState<Data>>;
7411
7427
  constructor(newQuery: TNewQuery, _arguments: RequestArgs<QueryArgsOf<TNewQuery>>, entity?: QueryEntityConfig<Store, Data, Response, Arguments, Id> | undefined,
7412
7428
  /**
@@ -7425,7 +7441,8 @@ export declare class LegacyQuery<Response, Arguments extends BaseArguments | und
7425
7441
  _canBeCached?: boolean);
7426
7442
  /** The full URL of the request the underlying query is bound to, `null` before the first execution. */
7427
7443
  get url(): string | null;
7428
- get rawState(): V2QueryState<ResponseType<QueryArgsOf<TNewQuery>>>;
7444
+ get rawState(): Loading | Failure | import("@ethlete/query").Cancelled | Prepared | Success<ResponseType<QueryArgsOf<TNewQuery>>>;
7445
+ private syncEntity;
7429
7446
  /**
7430
7447
  * `abort()` resets the underlying query, so it holds no execution state - the shape of a query that has
7431
7448
  * never run. The abort flag is the only thing that tells the two apart.
@@ -7445,9 +7462,11 @@ export declare class LegacyQuery<Response, Arguments extends BaseArguments | und
7445
7462
  get store(): null;
7446
7463
  get canBeCached(): boolean;
7447
7464
  get _isInMockMode(): boolean;
7465
+ private get mockConfig();
7448
7466
  destroy(): void;
7449
7467
  execute(options?: ExecuteQueryOptions): this;
7450
7468
  abort(): this;
7469
+ private startMock;
7451
7470
  poll(config: PollConfig): this;
7452
7471
  stopPolling(): this;
7453
7472
  pausePolling(): this;
@@ -9983,5 +10002,5 @@ export type WebSocketClientResult<TMessageData extends SocketMessageView = Socke
9983
10002
  export type AnyWebSocketClient<TMessageData extends SocketMessageView = SocketMessageView> = WebSocketClientResult<TMessageData>;
9984
10003
  export declare const createWebSocketClient: <TMessageData extends SocketMessageView = SocketMessageView>(options: CreateWebSocketClientConfigOptions) => WebSocketClientResult<TMessageData>;
9985
10004
  /** The version of `@ethlete/query` this build was cut from. */
9986
- export declare const QUERY_VERSION = "6.0.0-next.62";
10005
+ export declare const QUERY_VERSION = "6.0.0-next.63";
9987
10006
  export { type BearerAuthSessionAdoption, type BuildQueryStringConfig, type GqlDataWithErrors, type GqlEnvelope, type GqlError, type PathParams, type QueryDevtoolsApiEnv, type QueryDevtoolsApiEnvSwitch, type QueryDevtoolsAppInfo, type QueryDevtoolsAuthAccount, type QueryDevtoolsAuthField, type QueryDevtoolsFeatureDescriber, type QueryDevtoolsFeatureDetail, type QueryDevtoolsOptions, type QueryDevtoolsSchemaLoader, type QueryDevtoolsSchemaLoaders, type QueryParams, type DescribableFeature as ɵDescribableFeature, EMPTY_QUERY_DEVTOOLS_FAULT as ɵEMPTY_QUERY_DEVTOOLS_FAULT, type JsonPath as ɵJsonPath, MAX_QUERY_BATCH_TOMBSTONES as ɵMAX_QUERY_BATCH_TOMBSTONES, MAX_QUERY_BATCH_TOMBSTONE_BUCKETS as ɵMAX_QUERY_BATCH_TOMBSTONE_BUCKETS, MAX_QUERY_DEVTOOLS_TOMBSTONES as ɵMAX_QUERY_DEVTOOLS_TOMBSTONES, type OverrideOp as ɵOverrideOp, QUERY_DEVTOOLS_FAULT_STATUSES as ɵQUERY_DEVTOOLS_FAULT_STATUSES, QUERY_DEVTOOLS_TOKEN_TTL_LIMIT as ɵQUERY_DEVTOOLS_TOKEN_TTL_LIMIT, type QueryDevtoolsAbout as ɵQueryDevtoolsAbout, type QueryDevtoolsAuthAccountView as ɵQueryDevtoolsAuthAccountView, type QueryDevtoolsAuthLocalAccount as ɵQueryDevtoolsAuthLocalAccount, type QueryDevtoolsAuthProviderHandle as ɵQueryDevtoolsAuthProviderHandle, type QueryDevtoolsAuthProviderRegistration as ɵQueryDevtoolsAuthProviderRegistration, type QueryDevtoolsAuthQuery as ɵQueryDevtoolsAuthQuery, type QueryDevtoolsAuthSeed as ɵQueryDevtoolsAuthSeed, type QueryDevtoolsAuthSession as ɵQueryDevtoolsAuthSession, type QueryDevtoolsEntry as ɵQueryDevtoolsEntry, type QueryDevtoolsEntryKind as ɵQueryDevtoolsEntryKind, type QueryDevtoolsEntryMeta as ɵQueryDevtoolsEntryMeta, type QueryDevtoolsFault as ɵQueryDevtoolsFault, type QueryDevtoolsFaultTarget as ɵQueryDevtoolsFaultTarget, type QueryDevtoolsFeature as ɵQueryDevtoolsFeature, type QueryDevtoolsFormField as ɵQueryDevtoolsFormField, type QueryDevtoolsFormHandle as ɵQueryDevtoolsFormHandle, type QueryDevtoolsFormLinksHandle as ɵQueryDevtoolsFormLinksHandle, type QueryDevtoolsFormLinksRecorder as ɵQueryDevtoolsFormLinksRecorder, type QueryDevtoolsMock as ɵQueryDevtoolsMock, type QueryDevtoolsMockTarget as ɵQueryDevtoolsMockTarget, type QueryDevtoolsOverrideEntry as ɵQueryDevtoolsOverrideEntry, type QueryDevtoolsOverrideTransfer as ɵQueryDevtoolsOverrideTransfer, type QueryDevtoolsOverrideTransferParse as ɵQueryDevtoolsOverrideTransferParse, type QueryDevtoolsOverridesHandle as ɵQueryDevtoolsOverridesHandle, type QueryDevtoolsOverridesRecorder as ɵQueryDevtoolsOverridesRecorder, type QueryDevtoolsPayload as ɵQueryDevtoolsPayload, type QueryDevtoolsRegistrar as ɵQueryDevtoolsRegistrar, type QueryDevtoolsRegistration as ɵQueryDevtoolsRegistration, type QueryDevtoolsResolvedFault as ɵQueryDevtoolsResolvedFault, type QueryDevtoolsResolvedMock as ɵQueryDevtoolsResolvedMock, type QueryDevtoolsRoutePart as ɵQueryDevtoolsRoutePart, type QueryDevtoolsRun as ɵQueryDevtoolsRun, type QueryDevtoolsRunError as ɵQueryDevtoolsRunError, type QueryDevtoolsRunStatus as ɵQueryDevtoolsRunStatus, type QueryDevtoolsSchemaComponents as ɵQueryDevtoolsSchemaComponents, type QueryDevtoolsSchemaRoute as ɵQueryDevtoolsSchemaRoute, type QueryDevtoolsSchemaSeed as ɵQueryDevtoolsSchemaSeed, type QueryDevtoolsSchemaState as ɵQueryDevtoolsSchemaState, type QueryDevtoolsSeedStyle as ɵQueryDevtoolsSeedStyle, type QueryDevtoolsSettings as ɵQueryDevtoolsSettings, type QueryDevtoolsStats as ɵQueryDevtoolsStats, type QueryDevtoolsStatsHandle as ɵQueryDevtoolsStatsHandle, type QueryDevtoolsStatsRecorder as ɵQueryDevtoolsStatsRecorder, type QueryDevtoolsStorageScope as ɵQueryDevtoolsStorageScope, type RestoredQueryDevtoolsOverrides as ɵRestoredQueryDevtoolsOverrides, addQueryDevtoolsAuthAccount as ɵaddQueryDevtoolsAuthAccount, applyQueryDevtoolsOverrides as ɵapplyQueryDevtoolsOverrides, applyQueryDevtoolsTokenTtl as ɵapplyQueryDevtoolsTokenTtl, armAllQueryDevtoolsMocks as ɵarmAllQueryDevtoolsMocks, armQueryDevtoolsMock as ɵarmQueryDevtoolsMock, armQueryDevtoolsOverrideTransfer as ɵarmQueryDevtoolsOverrideTransfer, canOverrideQueryDevtoolsTokenTtl as ɵcanOverrideQueryDevtoolsTokenTtl, clearQueryDevtoolsArmedMocks as ɵclearQueryDevtoolsArmedMocks, clearQueryDevtoolsAuthCredentials as ɵclearQueryDevtoolsAuthCredentials, clearQueryDevtoolsAuthSessions as ɵclearQueryDevtoolsAuthSessions, clearQueryDevtoolsFaults as ɵclearQueryDevtoolsFaults, clearQueryDevtoolsMockStore as ɵclearQueryDevtoolsMockStore, clearQueryDevtoolsOverrideStore as ɵclearQueryDevtoolsOverrideStore, clearQueryDevtoolsStore as ɵclearQueryDevtoolsStore, clearQueryDevtoolsTombstones as ɵclearQueryDevtoolsTombstones, clearRestoredQueryDevtoolsOverrides as ɵclearRestoredQueryDevtoolsOverrides, collectLeafPaths as ɵcollectLeafPaths, collectQueryDevtoolsSchemaComponents as ɵcollectQueryDevtoolsSchemaComponents, countUnresolvedQueryDevtoolsOverrides as ɵcountUnresolvedQueryDevtoolsOverrides, createQueryDevtoolsOverrides as ɵcreateQueryDevtoolsOverrides, deleteQueryDevtoolsMock as ɵdeleteQueryDevtoolsMock, detectPaginationShape as ɵdetectPaginationShape, forgetQueryDevtoolsAuthSession as ɵforgetQueryDevtoolsAuthSession, forgetQueryDevtoolsAuthSessionsFor as ɵforgetQueryDevtoolsAuthSessionsFor, generateQueryDevtoolsNumberPreset as ɵgenerateQueryDevtoolsNumberPreset, generateQueryDevtoolsSampleNumber as ɵgenerateQueryDevtoolsSampleNumber, generateQueryDevtoolsStringPreset as ɵgenerateQueryDevtoolsStringPreset, hasQueryDevtoolsOverridesAtPath as ɵhasQueryDevtoolsOverridesAtPath, isDateShapedLeaf as ɵisDateShapedLeaf, isQueryDevtoolsEnabled as ɵisQueryDevtoolsEnabled, isQueryDevtoolsFaultArmed as ɵisQueryDevtoolsFaultArmed, isQueryDevtoolsHiddenInAutomation as ɵisQueryDevtoolsHiddenInAutomation, isQueryDevtoolsRepositoryLive as ɵisQueryDevtoolsRepositoryLive, loadQueryDevtoolsSchema as ɵloadQueryDevtoolsSchema, loginQueryDevtoolsAuthAccount as ɵloginQueryDevtoolsAuthAccount, logoutQueryDevtoolsAuthSession as ɵlogoutQueryDevtoolsAuthSession, matchesQueryDevtoolsMockPattern as ɵmatchesQueryDevtoolsMockPattern, matchesQueryDevtoolsMockQuery as ɵmatchesQueryDevtoolsMockQuery, measureQueryDevtoolsPayload as ɵmeasureQueryDevtoolsPayload, parseQueryDevtoolsOverrideTransfer as ɵparseQueryDevtoolsOverrideTransfer, queryDevtoolsAbout as ɵqueryDevtoolsAbout, queryDevtoolsAllowsLocalAuthSessions as ɵqueryDevtoolsAllowsLocalAuthSessions, queryDevtoolsApiEnvIds as ɵqueryDevtoolsApiEnvIds, queryDevtoolsApiEnvIsProduction as ɵqueryDevtoolsApiEnvIsProduction, queryDevtoolsApiEnvScope as ɵqueryDevtoolsApiEnvScope, queryDevtoolsApiEnvValues as ɵqueryDevtoolsApiEnvValues, queryDevtoolsApiEnvs as ɵqueryDevtoolsApiEnvs, queryDevtoolsArmedMocks as ɵqueryDevtoolsArmedMocks, queryDevtoolsArmedMocksRestored as ɵqueryDevtoolsArmedMocksRestored, queryDevtoolsAuthAccountsFor as ɵqueryDevtoolsAuthAccountsFor, queryDevtoolsAuthActive as ɵqueryDevtoolsAuthActive, queryDevtoolsAuthFieldsFor as ɵqueryDevtoolsAuthFieldsFor, queryDevtoolsAuthOtherScopeCount as ɵqueryDevtoolsAuthOtherScopeCount, queryDevtoolsAuthSessions as ɵqueryDevtoolsAuthSessions, queryDevtoolsAuthSessionsFor as ɵqueryDevtoolsAuthSessionsFor, queryDevtoolsAuthTabLocal as ɵqueryDevtoolsAuthTabLocal, queryDevtoolsEntries as ɵqueryDevtoolsEntries, queryDevtoolsFaults as ɵqueryDevtoolsFaults, queryDevtoolsFaultsRestored as ɵqueryDevtoolsFaultsRestored, queryDevtoolsMockId as ɵqueryDevtoolsMockId, queryDevtoolsMocks as ɵqueryDevtoolsMocks, queryDevtoolsOverridePersistence as ɵqueryDevtoolsOverridePersistence, queryDevtoolsRequestPath as ɵqueryDevtoolsRequestPath, queryDevtoolsResponseHistory as ɵqueryDevtoolsResponseHistory, queryDevtoolsRestoredOverridesScope as ɵqueryDevtoolsRestoredOverridesScope, queryDevtoolsSchemaNames as ɵqueryDevtoolsSchemaNames, queryDevtoolsSchemaRoutes as ɵqueryDevtoolsSchemaRoutes, queryDevtoolsSchemaState as ɵqueryDevtoolsSchemaState, queryDevtoolsSettings as ɵqueryDevtoolsSettings, queryDevtoolsStorage as ɵqueryDevtoolsStorage, queryDevtoolsTokenTtls as ɵqueryDevtoolsTokenTtls, readQueryDevtoolsStore as ɵreadQueryDevtoolsStore, registerEthleteVersion as ɵregisterEthleteVersion, removeQueryDevtoolsAuthAccount as ɵremoveQueryDevtoolsAuthAccount, renameQueryDevtoolsAuthSession as ɵrenameQueryDevtoolsAuthSession, restoredQueryDevtoolsOverrides as ɵrestoredQueryDevtoolsOverrides, saveQueryDevtoolsMock as ɵsaveQueryDevtoolsMock, seedQueryDevtoolsSchemaBody as ɵseedQueryDevtoolsSchemaBody, seedQueryDevtoolsSchemaRoute as ɵseedQueryDevtoolsSchemaRoute, serializeQueryDevtoolsOverrideTransfer as ɵserializeQueryDevtoolsOverrideTransfer, setQueryDevtoolsApiEnv as ɵsetQueryDevtoolsApiEnv, setQueryDevtoolsAppInfo as ɵsetQueryDevtoolsAppInfo, setQueryDevtoolsArmedMocksScope as ɵsetQueryDevtoolsArmedMocksScope, setQueryDevtoolsAuthCredentials as ɵsetQueryDevtoolsAuthCredentials, setQueryDevtoolsAuthTabLocal as ɵsetQueryDevtoolsAuthTabLocal, setQueryDevtoolsFault as ɵsetQueryDevtoolsFault, setQueryDevtoolsFaultsScope as ɵsetQueryDevtoolsFaultsScope, setQueryDevtoolsOverridePersistence as ɵsetQueryDevtoolsOverridePersistence, setQueryDevtoolsOverridesScope as ɵsetQueryDevtoolsOverridesScope, setQueryDevtoolsSettings as ɵsetQueryDevtoolsSettings, smartDuplicateArrayItem as ɵsmartDuplicateArrayItem, snapshotQueryDevtoolsHandle as ɵsnapshotQueryDevtoolsHandle, stringifyQueryRouteParts as ɵstringifyQueryRouteParts, sumQueryDevtoolsStats as ɵsumQueryDevtoolsStats, switchQueryDevtoolsAuthSession as ɵswitchQueryDevtoolsAuthSession, tombstoneOf as ɵtombstoneOf, writeQueryDevtoolsStore as ɵwriteQueryDevtoolsStore };