@ngxs/storage-plugin 20.1.0-dev.master-8a9c22a → 20.1.0-dev.master-49efc08

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.
@@ -68,10 +68,10 @@ class ɵNgxsStoragePluginKeysManager {
68
68
  this._keysWithEngines.push({ key, engine });
69
69
  }
70
70
  }
71
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ɵNgxsStoragePluginKeysManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
72
- /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ɵNgxsStoragePluginKeysManager, providedIn: 'root' });
71
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: ɵNgxsStoragePluginKeysManager, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
72
+ /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: ɵNgxsStoragePluginKeysManager, providedIn: 'root' });
73
73
  }
74
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: ɵNgxsStoragePluginKeysManager, decorators: [{
74
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: ɵNgxsStoragePluginKeysManager, decorators: [{
75
75
  type: Injectable,
76
76
  args: [{ providedIn: 'root' }]
77
77
  }], ctorParameters: () => [] });
@@ -201,10 +201,10 @@ class NgxsStoragePlugin {
201
201
  return accumulator;
202
202
  }, {});
203
203
  }
204
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePlugin, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
205
- /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePlugin });
204
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePlugin, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
205
+ /** @nocollapse */ static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePlugin });
206
206
  }
207
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePlugin, decorators: [{
207
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePlugin, decorators: [{
208
208
  type: Injectable
209
209
  }] });
210
210
  const DOT = '.';
@@ -232,11 +232,11 @@ class NgxsStoragePluginModule {
232
232
  ]
233
233
  };
234
234
  }
235
- /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
236
- /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePluginModule });
237
- /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePluginModule });
235
+ /** @nocollapse */ static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePluginModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
236
+ /** @nocollapse */ static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePluginModule });
237
+ /** @nocollapse */ static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePluginModule });
238
238
  }
239
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.0.3", ngImport: i0, type: NgxsStoragePluginModule, decorators: [{
239
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "20.3.2", ngImport: i0, type: NgxsStoragePluginModule, decorators: [{
240
240
  type: NgModule
241
241
  }] });
242
242
  function withNgxsStoragePlugin(options) {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@ngxs/storage-plugin",
3
3
  "description": "extendable storage plugin for @ngxs/store",
4
- "version": "20.1.0-dev.master-8a9c22a",
4
+ "version": "20.1.0-dev.master-49efc08",
5
5
  "sideEffects": false,
6
6
  "peerDependencies": {
7
7
  "@angular/core": ">=20.0.0 <21.0.0",
@@ -1,12 +0,0 @@
1
- {
2
- "extends": ["@schematics/angular"],
3
- "$schema": "../node_modules/@angular-devkit/schematics/collection-schema.json",
4
- "schematics": {
5
- "keys-migration": {
6
- "factory": "./src/ng-generate/index#migrateKeys",
7
- "description": "Migrates from key to keys",
8
- "aliases": ["ngxs-keys-migration"],
9
- "schema": "./src/ng-generate/schema.json"
10
- }
11
- }
12
- }
@@ -1,125 +0,0 @@
1
- // Jest Snapshot v1, https://goo.gl/fbAQLP
2
-
3
- exports[`Storage Plugin Migration migrate empty forRoot 1`] = `
4
- "
5
- import { NgxsStoragePluginModule } from '@ngxs/storage-plugin';
6
- import { NgModule } from '@angular/core';
7
- import { BrowserModule } from '@angular/platform-browser';
8
-
9
- import { AppRoutingModule } from './app-routing.module';
10
- import { AppComponent } from './app.component';
11
-
12
- @NgModule({
13
- declarations: [
14
- AppComponent
15
- ],
16
- imports: [
17
- BrowserModule,
18
- AppRoutingModule,
19
- NgxsStoragePluginModule.forRoot({ keys: '*' })
20
- ],
21
- bootstrap: [AppComponent]
22
- })
23
- export class AppModule { }
24
- "
25
- `;
26
-
27
- exports[`Storage Plugin Migration migrate forRoot that has the "key" property with a value as a string literal 1`] = `
28
- "
29
- import { NgxsStoragePluginModule } from '@ngxs/storage-plugin';
30
- import { NgModule } from '@angular/core';
31
- import { BrowserModule } from '@angular/platform-browser';
32
-
33
- import { AppRoutingModule } from './app-routing.module';
34
- import { AppComponent } from './app.component';
35
-
36
- @NgModule({
37
- declarations: [
38
- AppComponent
39
- ],
40
- imports: [
41
- BrowserModule,
42
- AppRoutingModule,
43
- NgxsStoragePluginModule.forRoot({proa: 'valuea', prob: 'valueb', keys: ['keep this value']})
44
- ],
45
- bootstrap: [AppComponent]
46
- })
47
- export class AppModule { }
48
- "
49
- `;
50
-
51
- exports[`Storage Plugin Migration migrate forRoot that has the "key" property with values as an array literal 1`] = `
52
- "
53
- import { NgxsStoragePluginModule } from '@ngxs/storage-plugin';
54
- import { NgModule } from '@angular/core';
55
- import { BrowserModule } from '@angular/platform-browser';
56
-
57
- import { AppRoutingModule } from './app-routing.module';
58
- import { AppComponent } from './app.component';
59
-
60
- @NgModule({
61
- declarations: [
62
- AppComponent
63
- ],
64
- imports: [
65
- BrowserModule,
66
- AppRoutingModule,
67
- NgxsStoragePluginModule.forRoot({proa: 'valuea', prob: 'valueb', keys: ['keyValue', NovelsState, { key: 'novels', engine: MyEngineX } ]})
68
- ],
69
- bootstrap: [AppComponent]
70
- })
71
- export class AppModule { }
72
- "
73
- `;
74
-
75
- exports[`Storage Plugin Migration migrate forRoot that is missing the "key" property 1`] = `
76
- "
77
- import { NgxsStoragePluginModule } from '@ngxs/storage-plugin';
78
- import { NgModule } from '@angular/core';
79
- import { BrowserModule } from '@angular/platform-browser';
80
-
81
- import { AppRoutingModule } from './app-routing.module';
82
- import { AppComponent } from './app.component';
83
-
84
- @NgModule({
85
- declarations: [
86
- AppComponent
87
- ],
88
- imports: [
89
- BrowserModule,
90
- AppRoutingModule,
91
- NgxsStoragePluginModule.forRoot({proa: 'valuea', prob: 'valueb',
92
- keys: '*'
93
- })
94
- ],
95
- bootstrap: [AppComponent]
96
- })
97
- export class AppModule { }
98
- "
99
- `;
100
-
101
- exports[`Storage Plugin Migration migrate from a constant array 1`] = `
102
- "
103
- import { NgxsStoragePluginModule } from '@ngxs/storage-plugin';
104
- import { NgModule } from '@angular/core';
105
- import { BrowserModule } from '@angular/platform-browser';
106
-
107
- import { AppRoutingModule } from './app-routing.module';
108
- import { AppComponent } from './app.component';
109
-
110
- const imports = [
111
- BrowserModule,
112
- AppRoutingModule,
113
- NgxsStoragePluginModule.forRoot({proa: 'valuea', prob: 'valueb', keys: ['keep this value']})
114
- ];
115
-
116
- @NgModule({
117
- declarations: [
118
- AppComponent
119
- ],
120
- imports,
121
- bootstrap: [AppComponent]
122
- })
123
- export class AppModule { }
124
- "
125
- `;
@@ -1,90 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.migrateKeys = migrateKeys;
4
- const node_process_1 = require("node:process");
5
- const ts = require("ts-morph");
6
- const visit_files_1 = require("../utils/visit-files");
7
- function migrateEmptyForRoot(callExpression) {
8
- callExpression.addArgument(`{ keys: '*' }`);
9
- }
10
- function migrateForRootWithArgs(arg) {
11
- const objectLiteral = arg;
12
- const hasPropertyName = (name) => objectLiteral.getProperties().some(prop => {
13
- return ts.Node.isPropertyAssignment(prop) && prop.getName() === name;
14
- });
15
- const isAlreadyMigrated = hasPropertyName('keys');
16
- // If the "keys" property is already there, we should not try migrating
17
- if (isAlreadyMigrated) {
18
- return;
19
- }
20
- const hasKeyProperty = hasPropertyName('key');
21
- // Add the "keys" property if it's not there
22
- if (!hasKeyProperty) {
23
- objectLiteral.addPropertyAssignment({ name: 'keys', initializer: `'*'` });
24
- }
25
- else {
26
- // Rename the "key" property to "keys"
27
- const keyProperty = objectLiteral.getProperty('key');
28
- const propertyName = keyProperty === null || keyProperty === void 0 ? void 0 : keyProperty.getChildAtIndex(0);
29
- const propertyValue = keyProperty === null || keyProperty === void 0 ? void 0 : keyProperty.getChildAtIndex(2);
30
- propertyName === null || propertyName === void 0 ? void 0 : propertyName.replaceWithText('keys');
31
- // if the property value is a string literal, then we should wrap it in an array
32
- // We are checking the isStringLiteral to avoid wrapping a value that is already an array
33
- if (ts.Node.isStringLiteral(propertyValue)) {
34
- propertyValue === null || propertyValue === void 0 ? void 0 : propertyValue.replaceWithText(`[${propertyValue === null || propertyValue === void 0 ? void 0 : propertyValue.getText()}]`);
35
- }
36
- }
37
- }
38
- function isStoragePluginProvided(callExpression) {
39
- return (callExpression && callExpression.getText().includes('NgxsStoragePluginModule.forRoot'));
40
- }
41
- /**
42
- * We do not use the ts.Node.isCallExpression(node) because the underlying implementation
43
- * uses -> node.getKind() === typescript.SyntaxKind.CallExpression
44
- * which is an enum that can return different numbers depending on minor typescript package versions
45
- */
46
- function isCallExpression(node) {
47
- return node.getKindName() === 'CallExpression';
48
- }
49
- function migrateKeys() {
50
- return (tree, _context) => {
51
- const tsProject = new ts.Project({ useInMemoryFileSystem: true });
52
- const packageJson = tree.readJson('package.json');
53
- const storePackage = packageJson['dependencies']['@ngxs/store'];
54
- if (!storePackage) {
55
- _context.logger.error(`No @ngxs/store found`);
56
- return (0, node_process_1.exit)(1);
57
- }
58
- (0, visit_files_1.visitTsFiles)(tree, tree.root, path => {
59
- const fileContent = tree.readText(path);
60
- const sourceFile = tsProject.createSourceFile(path, fileContent);
61
- const hasStoragePluginImported = sourceFile.getImportDeclaration(importDecl => importDecl.getModuleSpecifierValue() === '@ngxs/storage-plugin');
62
- // do not try migrating if the storage plugin is not imported
63
- if (!hasStoragePluginImported) {
64
- return;
65
- }
66
- sourceFile.forEachDescendant(node => {
67
- if (isCallExpression(node) &&
68
- ts.Node.isPropertyAccessExpression(node.getExpression())) {
69
- const callExpression = node;
70
- // If the storage plugin is not provided, we should not try migrating
71
- if (!isStoragePluginProvided(callExpression)) {
72
- return;
73
- }
74
- const args = callExpression.getArguments();
75
- // If there are no arguments in the forRoot(), then add the `keys` property
76
- if (!args.length) {
77
- _context.logger.info(`Migrating empty forRoot in ${path}`);
78
- migrateEmptyForRoot(callExpression);
79
- }
80
- else if (ts.Node.isObjectLiteralExpression(args[0])) {
81
- _context.logger.info(`Migrating forRoot with args in ${path}`);
82
- migrateForRootWithArgs(args[0]);
83
- }
84
- }
85
- });
86
- tree.overwrite(path, sourceFile.getFullText());
87
- });
88
- };
89
- }
90
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../packages/storage-plugin/schematics/src/ng-generate/index.ts"],"names":[],"mappings":";;AA4DA,kCAkDC;AA9GD,+CAAoC;AACpC,+BAA+B;AAG/B,sDAAoD;AAEpD,SAAS,mBAAmB,CAAC,cAAuD;IAClF,cAAc,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC;AAC9C,CAAC;AAED,SAAS,sBAAsB,CAAC,GAAwB;IACtD,MAAM,aAAa,GAAG,GAAiC,CAAC;IAExD,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CACvC,aAAa,CAAC,aAAa,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;QACxC,OAAO,EAAE,CAAC,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,CAAC;IACvE,CAAC,CAAC,CAAC;IAEL,MAAM,iBAAiB,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAElD,uEAAuE;IACvE,IAAI,iBAAiB,EAAE,CAAC;QACtB,OAAO;IACT,CAAC;IAED,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IAE9C,4CAA4C;IAC5C,IAAI,CAAC,cAAc,EAAE,CAAC;QACpB,aAAa,CAAC,qBAAqB,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;IAC5E,CAAC;SAAM,CAAC;QACN,sCAAsC;QACtC,MAAM,WAAW,GAAG,aAAa,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QACrD,MAAM,YAAY,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,WAAW,aAAX,WAAW,uBAAX,WAAW,CAAE,eAAe,CAAC,CAAC,CAAC,CAAC;QACtD,YAAY,aAAZ,YAAY,uBAAZ,YAAY,CAAE,eAAe,CAAC,MAAM,CAAC,CAAC;QAEtC,gFAAgF;QAChF,yFAAyF;QACzF,IAAI,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,aAAc,CAAC,EAAE,CAAC;YAC5C,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,eAAe,CAAC,IAAI,aAAa,aAAb,aAAa,uBAAb,aAAa,CAAE,OAAO,EAAE,GAAG,CAAC,CAAC;QAClE,CAAC;IACH,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,cAAiC;IAChE,OAAO,CACL,cAAc,IAAI,cAAc,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC,CACvF,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,IAAa;IACrC,OAAO,IAAI,CAAC,WAAW,EAAE,KAAK,gBAAgB,CAAC;AACjD,CAAC;AAED,SAAgB,WAAW;IACzB,OAAO,CAAC,IAAU,EAAE,QAA0B,EAAE,EAAE;QAChD,MAAM,SAAS,GAAG,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,qBAAqB,EAAE,IAAI,EAAE,CAAC,CAAC;QAClE,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAQ,CAAC;QACzD,MAAM,YAAY,GAAG,WAAW,CAAC,cAAc,CAAC,CAAC,aAAa,CAAC,CAAC;QAEhE,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;YAC9C,OAAO,IAAA,mBAAI,EAAC,CAAC,CAAC,CAAC;QACjB,CAAC;QAED,IAAA,0BAAY,EAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE;YACnC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;YACxC,MAAM,UAAU,GAAG,SAAS,CAAC,gBAAgB,CAAC,IAAI,EAAE,WAAY,CAAC,CAAC;YAClE,MAAM,wBAAwB,GAAG,UAAU,CAAC,oBAAoB,CAC9D,UAAU,CAAC,EAAE,CAAC,UAAU,CAAC,uBAAuB,EAAE,KAAK,sBAAsB,CAC9E,CAAC;YAEF,6DAA6D;YAC7D,IAAI,CAAC,wBAAwB,EAAE,CAAC;gBAC9B,OAAO;YACT,CAAC;YAED,UAAU,CAAC,iBAAiB,CAAC,IAAI,CAAC,EAAE;gBAClC,IACE,gBAAgB,CAAC,IAAI,CAAC;oBACtB,EAAE,CAAC,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC,EACxD,CAAC;oBACD,MAAM,cAAc,GAAG,IAAyB,CAAC;oBAEjD,qEAAqE;oBACrE,IAAI,CAAC,uBAAuB,CAAC,cAAc,CAAC,EAAE,CAAC;wBAC7C,OAAO;oBACT,CAAC;oBAED,MAAM,IAAI,GAAG,cAAc,CAAC,YAAY,EAAE,CAAC;oBAC3C,2EAA2E;oBAC3E,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACjB,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,8BAA8B,IAAI,EAAE,CAAC,CAAC;wBAC3D,mBAAmB,CAAC,cAAc,CAAC,CAAC;oBACtC,CAAC;yBAAM,IAAI,EAAE,CAAC,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;wBACtD,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,IAAI,EAAE,CAAC,CAAC;wBAC/D,sBAAsB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;oBAClC,CAAC;gBACH,CAAC;YACH,CAAC,CAAC,CAAC;YAEH,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
@@ -1,7 +0,0 @@
1
- {
2
- "$schema": "http://json-schema.org/schema",
3
- "$id": "SchematicsNgxsStoragePlugin",
4
- "title": "Ngxs Storage Plugin Options Schema",
5
- "type": "object",
6
- "properties": {}
7
- }
@@ -1,3 +0,0 @@
1
- {
2
- "@ngxs/store": "20.1.0"
3
- }
@@ -1,23 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.visitTsFiles = visitTsFiles;
4
- function visitTsFiles(tree, dirPath = tree.root, visitor) {
5
- function visit(directory) {
6
- for (const path of directory.subfiles) {
7
- if (path.endsWith('.ts') && !path.endsWith('.d.ts')) {
8
- const entry = directory.file(path);
9
- if (entry) {
10
- visitor(entry.path);
11
- }
12
- }
13
- }
14
- for (const path of directory.subdirs) {
15
- if (path === 'node_modules') {
16
- continue;
17
- }
18
- visit(directory.dir(path));
19
- }
20
- }
21
- visit(dirPath);
22
- }
23
- //# sourceMappingURL=visit-files.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"visit-files.js","sourceRoot":"","sources":["../../../../../packages/storage-plugin/schematics/src/utils/visit-files.ts"],"names":[],"mappings":";;AAEA,oCAyBC;AAzBD,SAAgB,YAAY,CAC1B,IAAU,EACV,OAAO,GAAG,IAAI,CAAC,IAAI,EACnB,OAA+B;IAE/B,SAAS,KAAK,CAAC,SAAmB;QAChC,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,QAAQ,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACpD,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnC,IAAI,KAAK,EAAE,CAAC;oBACV,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBACtB,CAAC;YACH,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;YACrC,IAAI,IAAI,KAAK,cAAc,EAAE,CAAC;gBAC5B,SAAS;YACX,CAAC;YAED,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,KAAK,CAAC,OAAO,CAAC,CAAC;AACjB,CAAC"}