@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.
- package/CHANGELOG.md +28 -0
- package/fesm2022/ethlete-query-ngrx-toolkit.mjs +30 -7
- package/fesm2022/ethlete-query-ngrx-toolkit.mjs.map +1 -1
- package/fesm2022/ethlete-query.mjs +112 -29
- package/fesm2022/ethlete-query.mjs.map +1 -1
- package/generators/migrate-from-ngrx-toolkit/args-assignability.js +55 -8
- package/generators/migrate-from-ngrx-toolkit/consumers.js +132 -36
- package/generators/migrate-from-ngrx-toolkit/creators.js +8 -4
- package/generators/migrate-from-ngrx-toolkit/feature.js +31 -4
- package/generators/migrate-from-ngrx-toolkit/migration.js +3 -1
- package/generators/migrate-from-ngrx-toolkit/module-resolution.js +23 -0
- package/generators/migrate-from-ngrx-toolkit/store-removal.js +64 -11
- package/generators/migrate-to-query-v3/auth-provider-scaffold.js +1 -1
- package/generators/migrate-to-query-v3/cleanup-migration.js +73 -12
- package/generators/migrate-to-query-v3/legacy-prepare-migration.js +54 -21
- package/generators/migrate-to-query-v3/legacy-query-creator-migration.js +108 -15
- package/generators/migrate-to-query-v3/migration.js +4 -1
- package/generators/migrate-to-query-v3/module-resolution.js +131 -0
- package/generators/migrate-to-query-v3/rename-symbols.js +16 -11
- package/package.json +1 -1
- package/types/ethlete-query-ngrx-toolkit.d.ts +13 -0
- package/types/ethlete-query.d.ts +23 -4
|
@@ -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
|
@@ -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. */
|
package/types/ethlete-query.d.ts
CHANGED
|
@@ -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():
|
|
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.
|
|
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 };
|