@paraswap/dex-lib 2.16.1 → 2.16.2-balancer-v2-buy.2
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/build/abi/uniswap-v3/UniswapV3Pool.abi.json +363 -67
- package/build/abi/uniswap-v3/UniswapV3Quoter.abi.json +119 -23
- package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
- package/build/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
- package/build/config.js +6 -6
- package/build/dex/balancer-v2/balancer-v2.d.ts +9 -14
- package/build/dex/balancer-v2/balancer-v2.js +19 -16
- package/build/dex/balancer-v2/balancer-v2.js.map +1 -1
- package/build/dex/balancer-v2/config.d.ts +2 -7
- package/build/dex/balancer-v2/config.js +20 -30
- package/build/dex/balancer-v2/config.js.map +1 -1
- package/build/dex/balancer-v2/pools/balancer-v2-pool.d.ts +24 -0
- package/build/dex/balancer-v2/pools/balancer-v2-pool.js +102 -0
- package/build/dex/balancer-v2/pools/balancer-v2-pool.js.map +1 -0
- package/build/dex/balancer-v2/pools/linear/LinearMath.d.ts +19 -0
- package/build/dex/balancer-v2/pools/linear/LinearMath.js +179 -0
- package/build/dex/balancer-v2/pools/linear/LinearMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/linear/LinearPool.d.ts +50 -0
- package/build/dex/balancer-v2/pools/linear/LinearPool.js +458 -0
- package/build/dex/balancer-v2/pools/linear/LinearPool.js.map +1 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.d.ts +10 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js +314 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStableMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.d.ts +50 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js +367 -0
- package/build/dex/balancer-v2/pools/phantom-stable/PhantomStablePool.js.map +1 -0
- package/build/dex/balancer-v2/pools/stable/StableMath.d.ts +7 -0
- package/build/dex/balancer-v2/pools/stable/StableMath.js +111 -0
- package/build/dex/balancer-v2/pools/stable/StableMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/stable/StablePool.d.ts +30 -0
- package/build/dex/balancer-v2/pools/stable/StablePool.js +129 -0
- package/build/dex/balancer-v2/pools/stable/StablePool.js.map +1 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedMath.d.ts +6 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedMath.js +61 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedMath.js.map +1 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedPool.d.ts +30 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedPool.js +112 -0
- package/build/dex/balancer-v2/pools/weighted/WeightedPool.js.map +1 -0
- package/build/dex/index.js +4 -0
- package/build/dex/index.js.map +1 -1
- package/build/dex/maverick-v1/config.js +1 -1
- package/build/dex/maverick-v1/config.js.map +1 -1
- package/build/dex/quickswap/config.js +8 -0
- package/build/dex/quickswap/config.js.map +1 -1
- package/build/dex/quickswap/spiritswap-v3.d.ts +6 -0
- package/build/dex/quickswap/spiritswap-v3.js +19 -0
- package/build/dex/quickswap/spiritswap-v3.js.map +1 -0
- package/build/dex/uniswap-v3/config.js +42 -0
- package/build/dex/uniswap-v3/config.js.map +1 -1
- package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.d.ts +12 -0
- package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js +23 -0
- package/build/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.js.map +1 -0
- package/build/dex/uniswap-v3/types.d.ts +3 -0
- package/build/dex/uniswap-v3/types.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3-pool.d.ts +2 -1
- package/build/dex/uniswap-v3/uniswap-v3-pool.js +3 -2
- package/build/dex/uniswap-v3/uniswap-v3-pool.js.map +1 -1
- package/build/dex/uniswap-v3/uniswap-v3.js +6 -3
- package/build/dex/uniswap-v3/uniswap-v3.js.map +1 -1
- package/package.json +1 -1
- package/src/abi/uniswap-v3/UniswapV3Pool.abi.json +363 -67
- package/src/abi/uniswap-v3/UniswapV3Quoter.abi.json +119 -23
- package/src/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3QuoterV2.abi.json +285 -0
- package/src/abi/uniswap-v3/pancakeswap-v3/PancakeswapV3Router.abi.json +583 -0
- package/src/config.ts +6 -6
- package/src/dex/balancer-v2/balancer-v2-e2e.test.ts +99 -160
- package/src/dex/balancer-v2/balancer-v2.ts +41 -29
- package/src/dex/balancer-v2/config.ts +23 -35
- package/src/dex/balancer-v2/pools/balancer-v2-pool.ts +273 -0
- package/src/dex/balancer-v2/{LinearMath.ts → pools/linear/LinearMath.ts} +1 -1
- package/src/dex/balancer-v2/{LinearPool.ts → pools/linear/LinearPool.ts} +210 -5
- package/src/dex/balancer-v2/{StableMath.ts → pools/phantom-stable/PhantomStableMath.ts} +101 -21
- package/src/dex/balancer-v2/{PhantomStablePool.ts → pools/phantom-stable/PhantomStablePool.ts} +165 -11
- package/src/dex/balancer-v2/pools/stable/StableMath.ts +204 -0
- package/src/dex/balancer-v2/pools/stable/StablePool.ts +221 -0
- package/src/dex/balancer-v2/pools/weighted/WeightedMath.ts +84 -0
- package/src/dex/balancer-v2/pools/weighted/WeightedPool.ts +189 -0
- package/src/dex/index.ts +4 -0
- package/src/dex/maverick-v1/config.ts +1 -1
- package/src/dex/quickswap/config.ts +9 -0
- package/src/dex/quickswap/quickswap-e2e.test.ts +94 -0
- package/src/dex/quickswap/spiritswap-v3.ts +19 -0
- package/src/dex/uniswap-v3/config.ts +50 -0
- package/src/dex/uniswap-v3/forks/pancakeswap-v3/pancakeswap-v3.ts +28 -0
- package/src/dex/uniswap-v3/types.ts +3 -0
- package/src/dex/uniswap-v3/uniswap-v3-e2e.test.ts +156 -0
- package/src/dex/uniswap-v3/uniswap-v3-pool.ts +3 -2
- package/src/dex/uniswap-v3/uniswap-v3.ts +7 -3
- package/tests/constants-e2e.ts +11 -6
- package/.idea/runConfigurations.xml +0 -10
- package/src/dex/balancer-v2/balancer-v2-pool.ts +0 -744
|
@@ -203,3 +203,159 @@ describe('UniswapV3 E2E', () => {
|
|
|
203
203
|
);
|
|
204
204
|
});
|
|
205
205
|
});
|
|
206
|
+
|
|
207
|
+
describe('PancakeswapV3 E2E', () => {
|
|
208
|
+
const dexKey = 'PancakeswapV3';
|
|
209
|
+
|
|
210
|
+
describe('PancakeswapV3 MAINNET', () => {
|
|
211
|
+
const network = Network.MAINNET;
|
|
212
|
+
const tokens = Tokens[network];
|
|
213
|
+
const holders = Holders[network];
|
|
214
|
+
const provider = new StaticJsonRpcProvider(
|
|
215
|
+
generateConfig(network).privateHttpProvider,
|
|
216
|
+
network,
|
|
217
|
+
);
|
|
218
|
+
|
|
219
|
+
const tokenASymbol: string = 'USDT';
|
|
220
|
+
const tokenBSymbol: string = 'USDC';
|
|
221
|
+
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
222
|
+
|
|
223
|
+
const tokenAAmount: string = '100000000';
|
|
224
|
+
const tokenBAmount: string = '100000000';
|
|
225
|
+
const nativeTokenAmount = '1000000000000000000';
|
|
226
|
+
|
|
227
|
+
const sideToContractMethods = new Map([
|
|
228
|
+
[
|
|
229
|
+
SwapSide.SELL,
|
|
230
|
+
[
|
|
231
|
+
ContractMethod.simpleSwap,
|
|
232
|
+
ContractMethod.multiSwap,
|
|
233
|
+
ContractMethod.megaSwap,
|
|
234
|
+
],
|
|
235
|
+
],
|
|
236
|
+
[SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
|
|
237
|
+
]);
|
|
238
|
+
|
|
239
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
240
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
241
|
+
describe(`${contractMethod}`, () => {
|
|
242
|
+
it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
243
|
+
await testE2E(
|
|
244
|
+
tokens[nativeTokenSymbol],
|
|
245
|
+
tokens[tokenASymbol],
|
|
246
|
+
holders[nativeTokenSymbol],
|
|
247
|
+
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
248
|
+
side,
|
|
249
|
+
dexKey,
|
|
250
|
+
contractMethod,
|
|
251
|
+
network,
|
|
252
|
+
provider,
|
|
253
|
+
);
|
|
254
|
+
});
|
|
255
|
+
it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
256
|
+
await testE2E(
|
|
257
|
+
tokens[tokenASymbol],
|
|
258
|
+
tokens[nativeTokenSymbol],
|
|
259
|
+
holders[tokenASymbol],
|
|
260
|
+
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
261
|
+
side,
|
|
262
|
+
dexKey,
|
|
263
|
+
contractMethod,
|
|
264
|
+
network,
|
|
265
|
+
provider,
|
|
266
|
+
);
|
|
267
|
+
});
|
|
268
|
+
it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
269
|
+
await testE2E(
|
|
270
|
+
tokens[tokenASymbol],
|
|
271
|
+
tokens[tokenBSymbol],
|
|
272
|
+
holders[tokenASymbol],
|
|
273
|
+
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
274
|
+
side,
|
|
275
|
+
dexKey,
|
|
276
|
+
contractMethod,
|
|
277
|
+
network,
|
|
278
|
+
provider,
|
|
279
|
+
);
|
|
280
|
+
});
|
|
281
|
+
});
|
|
282
|
+
}),
|
|
283
|
+
);
|
|
284
|
+
});
|
|
285
|
+
|
|
286
|
+
describe('PancakeswapV3 BSC', () => {
|
|
287
|
+
const network = Network.BSC;
|
|
288
|
+
const tokens = Tokens[network];
|
|
289
|
+
const holders = Holders[network];
|
|
290
|
+
const provider = new StaticJsonRpcProvider(
|
|
291
|
+
generateConfig(network).privateHttpProvider,
|
|
292
|
+
network,
|
|
293
|
+
);
|
|
294
|
+
|
|
295
|
+
const tokenASymbol: string = 'BUSD';
|
|
296
|
+
const tokenBSymbol: string = 'WBNB';
|
|
297
|
+
const nativeTokenSymbol = NativeTokenSymbols[network];
|
|
298
|
+
|
|
299
|
+
const tokenAAmount: string = '100000000000000000000';
|
|
300
|
+
const tokenBAmount: string = '1000000000000000000';
|
|
301
|
+
const nativeTokenAmount = '1000000000000000000';
|
|
302
|
+
|
|
303
|
+
const sideToContractMethods = new Map([
|
|
304
|
+
[
|
|
305
|
+
SwapSide.SELL,
|
|
306
|
+
[
|
|
307
|
+
ContractMethod.simpleSwap,
|
|
308
|
+
ContractMethod.multiSwap,
|
|
309
|
+
ContractMethod.megaSwap,
|
|
310
|
+
],
|
|
311
|
+
],
|
|
312
|
+
[SwapSide.BUY, [ContractMethod.simpleBuy, ContractMethod.buy]],
|
|
313
|
+
]);
|
|
314
|
+
|
|
315
|
+
sideToContractMethods.forEach((contractMethods, side) =>
|
|
316
|
+
contractMethods.forEach((contractMethod: ContractMethod) => {
|
|
317
|
+
describe(`${contractMethod}`, () => {
|
|
318
|
+
it(`${network} ${side} ${contractMethod} ${nativeTokenSymbol} -> ${tokenASymbol}`, async () => {
|
|
319
|
+
await testE2E(
|
|
320
|
+
tokens[nativeTokenSymbol],
|
|
321
|
+
tokens[tokenASymbol],
|
|
322
|
+
holders[nativeTokenSymbol],
|
|
323
|
+
side === SwapSide.SELL ? nativeTokenAmount : tokenAAmount,
|
|
324
|
+
side,
|
|
325
|
+
dexKey,
|
|
326
|
+
contractMethod,
|
|
327
|
+
network,
|
|
328
|
+
provider,
|
|
329
|
+
);
|
|
330
|
+
});
|
|
331
|
+
it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${nativeTokenSymbol}`, async () => {
|
|
332
|
+
await testE2E(
|
|
333
|
+
tokens[tokenASymbol],
|
|
334
|
+
tokens[nativeTokenSymbol],
|
|
335
|
+
holders[tokenASymbol],
|
|
336
|
+
side === SwapSide.SELL ? tokenAAmount : nativeTokenAmount,
|
|
337
|
+
side,
|
|
338
|
+
dexKey,
|
|
339
|
+
contractMethod,
|
|
340
|
+
network,
|
|
341
|
+
provider,
|
|
342
|
+
);
|
|
343
|
+
});
|
|
344
|
+
it(`${network} ${side} ${contractMethod} ${tokenASymbol} -> ${tokenBSymbol}`, async () => {
|
|
345
|
+
await testE2E(
|
|
346
|
+
tokens[tokenASymbol],
|
|
347
|
+
tokens[tokenBSymbol],
|
|
348
|
+
holders[tokenASymbol],
|
|
349
|
+
side === SwapSide.SELL ? tokenAAmount : tokenBAmount,
|
|
350
|
+
side,
|
|
351
|
+
dexKey,
|
|
352
|
+
contractMethod,
|
|
353
|
+
network,
|
|
354
|
+
provider,
|
|
355
|
+
);
|
|
356
|
+
});
|
|
357
|
+
});
|
|
358
|
+
}),
|
|
359
|
+
);
|
|
360
|
+
});
|
|
361
|
+
});
|
|
@@ -68,7 +68,8 @@ export class UniswapV3EventPool extends StatefulEventSubscriber<PoolState> {
|
|
|
68
68
|
token1: Address,
|
|
69
69
|
logger: Logger,
|
|
70
70
|
mapKey: string = '',
|
|
71
|
-
readonly poolInitCodeHash
|
|
71
|
+
readonly poolInitCodeHash: string,
|
|
72
|
+
readonly poolDeployer?: string,
|
|
72
73
|
) {
|
|
73
74
|
super(
|
|
74
75
|
parentName,
|
|
@@ -538,7 +539,7 @@ export class UniswapV3EventPool extends StatefulEventSubscriber<PoolState> {
|
|
|
538
539
|
);
|
|
539
540
|
|
|
540
541
|
return ethers.utils.getCreate2Address(
|
|
541
|
-
this.factoryAddress,
|
|
542
|
+
this.poolDeployer ? this.poolDeployer : this.factoryAddress,
|
|
542
543
|
encodedKey,
|
|
543
544
|
this.poolInitCodeHash,
|
|
544
545
|
);
|
|
@@ -43,7 +43,6 @@ import UniswapV3StateMulticallABI from '../../abi/uniswap-v3/UniswapV3StateMulti
|
|
|
43
43
|
import {
|
|
44
44
|
UNISWAPV3_EFFICIENCY_FACTOR,
|
|
45
45
|
UNISWAPV3_FUNCTION_CALL_GAS_COST,
|
|
46
|
-
UNISWAPV3_SUBGRAPH_URL,
|
|
47
46
|
UNISWAPV3_TICK_GAS_COST,
|
|
48
47
|
} from './constants';
|
|
49
48
|
import { DeepReadonly } from 'ts-essentials';
|
|
@@ -80,7 +79,7 @@ export class UniswapV3
|
|
|
80
79
|
intervalTask?: NodeJS.Timeout;
|
|
81
80
|
|
|
82
81
|
public static dexKeysWithNetwork: { key: string; networks: Network[] }[] =
|
|
83
|
-
getDexKeysWithNetwork(UniswapV3Config);
|
|
82
|
+
getDexKeysWithNetwork(_.pick(UniswapV3Config, ['UniswapV3']));
|
|
84
83
|
|
|
85
84
|
logger: Logger;
|
|
86
85
|
|
|
@@ -213,6 +212,8 @@ export class UniswapV3
|
|
|
213
212
|
token1,
|
|
214
213
|
this.logger,
|
|
215
214
|
this.cacheStateKey,
|
|
215
|
+
this.config.initHash,
|
|
216
|
+
this.config.deployer,
|
|
216
217
|
);
|
|
217
218
|
|
|
218
219
|
try {
|
|
@@ -880,6 +881,9 @@ export class UniswapV3
|
|
|
880
881
|
stateMulticall: this.config.stateMulticall.toLowerCase(),
|
|
881
882
|
chunksCount: this.config.chunksCount,
|
|
882
883
|
uniswapMulticall: this.config.uniswapMulticall,
|
|
884
|
+
deployer: this.config.deployer?.toLowerCase(),
|
|
885
|
+
initHash: this.config.initHash,
|
|
886
|
+
subgraphURL: this.config.subgraphURL,
|
|
883
887
|
};
|
|
884
888
|
return newConfig;
|
|
885
889
|
}
|
|
@@ -943,7 +947,7 @@ export class UniswapV3
|
|
|
943
947
|
) {
|
|
944
948
|
try {
|
|
945
949
|
const res = await this.dexHelper.httpRequest.post(
|
|
946
|
-
|
|
950
|
+
this.config.subgraphURL,
|
|
947
951
|
{ query, variables },
|
|
948
952
|
undefined,
|
|
949
953
|
{ timeout: timeout },
|
package/tests/constants-e2e.ts
CHANGED
|
@@ -67,6 +67,10 @@ export const Tokens: {
|
|
|
67
67
|
addBalance: balanceOfFn,
|
|
68
68
|
addAllowance: allowanceFn,
|
|
69
69
|
},
|
|
70
|
+
PSP: {
|
|
71
|
+
address: '0xcafe001067cdef266afb7eb5a286dcfd277f3de5',
|
|
72
|
+
decimals: 18,
|
|
73
|
+
},
|
|
70
74
|
SETH: {
|
|
71
75
|
address: '0x5e74C9036fb86BD7eCdcb084a0673EFc32eA31cb',
|
|
72
76
|
decimals: 18,
|
|
@@ -812,12 +816,12 @@ export const Holders: {
|
|
|
812
816
|
} = {
|
|
813
817
|
[Network.MAINNET]: {
|
|
814
818
|
ETH: '0x176F3DAb24a159341c0509bB36B833E7fdd0a132',
|
|
815
|
-
USDC: '
|
|
816
|
-
WBTC: '
|
|
819
|
+
USDC: '0x7713974908Be4BEd47172370115e8b1219F4A5f0',
|
|
820
|
+
WBTC: '0x1Cb17a66DC606a52785f69F08F4256526aBd4943',
|
|
817
821
|
BADGER: '0x34e2741a3f8483dbe5231f61c005110ff4b9f50a',
|
|
818
822
|
STETH: '0x9bdb521a97e95177bf252c253e256a60c3e14447',
|
|
819
823
|
wstETH: '0x6cE0F913F035ec6195bC3cE885aec4C66E485BC4',
|
|
820
|
-
WETH: '
|
|
824
|
+
WETH: '0x2fEb1512183545f48f6b9C5b4EbfCaF49CfCa6F3',
|
|
821
825
|
USDT: '0x5754284f345afc66a98fbb0a0afe71e0f007b949',
|
|
822
826
|
XAUT: '0xc4e161e8d8a4bc4ac762ab33a28bbac5474203d7',
|
|
823
827
|
CVX: '0x0aCA67Fa70B142A3b9bF2eD89A81B40ff85dACdC',
|
|
@@ -864,7 +868,8 @@ export const Holders: {
|
|
|
864
868
|
SHIBA: '0x73af3bcf944a6559933396c1577b257e2054d935',
|
|
865
869
|
aEthUSDC: '0x3178490d60B5cceaA5a79FD4D9050C7405Bab80c',
|
|
866
870
|
aEthWETH: '0x645C4c0c95C1Aa6EF25d12f4a25038cA9b0C6Cc7',
|
|
867
|
-
dUSDC: '
|
|
871
|
+
dUSDC: '0x2FC2F705110A7F46Ce85F701d7217EF1018f01A3',
|
|
872
|
+
PSP: '0xE5E5440a1CE69C5cf67BFFA74d185e57c31b43E5',
|
|
868
873
|
},
|
|
869
874
|
[Network.ROPSTEN]: {
|
|
870
875
|
ETH: '0x43262A12d8610AA70C15DbaeAC321d51613c9071',
|
|
@@ -904,7 +909,7 @@ export const Holders: {
|
|
|
904
909
|
[Network.FANTOM]: {
|
|
905
910
|
DAI: '0x370f4b2dcf75c94d8d4450b493661a9c6170d0b5',
|
|
906
911
|
FTM: '0x431e81E5dfB5A24541b5Ff8762bDEF3f32F96354',
|
|
907
|
-
WFTM: '
|
|
912
|
+
WFTM: '0x3e923747ca2675e096d812c3b24846ac39aed645',
|
|
908
913
|
USDC: '0xe48793b1533b351ae184e1c3119d0955dde7b330',
|
|
909
914
|
FUSDT: '0x9ade1c17d25246c405604344f89E8F23F8c1c632',
|
|
910
915
|
POPS: '0x4b78b52e7de4d8b7d367297cb8a87c1875a9d591',
|
|
@@ -913,7 +918,7 @@ export const Holders: {
|
|
|
913
918
|
MIM: '0xbcab7d083cf6a01e0dda9ed7f8a02b47d125e682',
|
|
914
919
|
FRAX: '0x4423ac71f53ca92e2f2be5917a9c2468e7412f4a',
|
|
915
920
|
nETH: '0x16b658270ac50c0063940ed287c401b3df7ccf70',
|
|
916
|
-
WETH: '
|
|
921
|
+
WETH: '0x7b7b957c284c2c227c980d6e2f804311947b84d0',
|
|
917
922
|
SPIRIT: '0x0d0707963952f2fba59dd06f2b425ace40b492fe',
|
|
918
923
|
wBOMB: '0x28aa4f9ffe21365473b64c161b566c3cdead0108',
|
|
919
924
|
TOR: '0x70de4b5ed310fd93da3c0bae824fb99cb4d44dd8',
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
-
<project version="4">
|
|
3
|
-
<component name="RunConfigurationProducerService">
|
|
4
|
-
<option name="ignoredProducers">
|
|
5
|
-
<set>
|
|
6
|
-
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
|
7
|
-
</set>
|
|
8
|
-
</option>
|
|
9
|
-
</component>
|
|
10
|
-
</project>
|