webpack 5.78.0 → 5.80.0

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.

Potentially problematic release.


This version of webpack might be problematic. Click here for more details.

Files changed (35) hide show
  1. package/README.md +3 -0
  2. package/lib/CompatibilityPlugin.js +27 -10
  3. package/lib/Compiler.js +7 -4
  4. package/lib/DefinePlugin.js +18 -6
  5. package/lib/LibManifestPlugin.js +2 -1
  6. package/lib/NormalModuleFactory.js +11 -1
  7. package/lib/NormalModuleReplacementPlugin.js +1 -1
  8. package/lib/WarnCaseSensitiveModulesPlugin.js +12 -0
  9. package/lib/asset/AssetGenerator.js +11 -3
  10. package/lib/css/CssLoadingRuntimeModule.js +1 -1
  11. package/lib/css/CssParser.js +113 -18
  12. package/lib/css/walkCssTokens.js +134 -74
  13. package/lib/dependencies/CssUrlDependency.js +30 -18
  14. package/lib/dependencies/HarmonyImportDependencyParserPlugin.js +4 -0
  15. package/lib/dependencies/HarmonyImportSpecifierDependency.js +28 -3
  16. package/lib/dependencies/ImportMetaPlugin.js +56 -26
  17. package/lib/dependencies/ImportParserPlugin.js +17 -1
  18. package/lib/ids/OccurrenceModuleIdsPlugin.js +1 -1
  19. package/lib/index.js +5 -0
  20. package/lib/javascript/JavascriptParser.js +99 -1
  21. package/lib/schemes/DataUriPlugin.js +12 -3
  22. package/lib/stats/DefaultStatsFactoryPlugin.js +98 -25
  23. package/lib/stats/DefaultStatsPresetPlugin.js +9 -0
  24. package/lib/stats/DefaultStatsPrinterPlugin.js +18 -0
  25. package/lib/util/hash/md4.js +2 -2
  26. package/lib/util/hash/xxhash64.js +1 -1
  27. package/lib/webpack.js +1 -1
  28. package/package.json +54 -51
  29. package/schemas/WebpackOptions.check.js +1 -1
  30. package/schemas/WebpackOptions.json +8 -0
  31. package/schemas/plugins/ProgressPlugin.check.js +1 -1
  32. package/schemas/plugins/SourceMapDevToolPlugin.check.js +1 -1
  33. package/schemas/plugins/container/ModuleFederationPlugin.check.js +1 -1
  34. package/schemas/plugins/sharing/SharePlugin.check.js +1 -1
  35. package/types.d.ts +195 -139
package/types.d.ts CHANGED
@@ -82,7 +82,11 @@ import {
82
82
  WithStatement,
83
83
  YieldExpression
84
84
  } from "estree";
85
- import { ServerOptions as ServerOptionsImport } from "http";
85
+ import {
86
+ IncomingMessage,
87
+ ServerOptions as ServerOptionsImport,
88
+ ServerResponse
89
+ } from "http";
86
90
  import { ListenOptions, Server } from "net";
87
91
  import { validate as validateFunction } from "schema-utils";
88
92
  import { default as ValidationError } from "schema-utils/declarations/ValidationError";
@@ -3825,32 +3829,32 @@ declare interface ExposesObject {
3825
3829
  }
3826
3830
  type Expression =
3827
3831
  | UnaryExpression
3828
- | ThisExpression
3829
3832
  | ArrayExpression
3830
- | ObjectExpression
3831
- | FunctionExpression
3832
3833
  | ArrowFunctionExpression
3833
- | YieldExpression
3834
+ | AssignmentExpression
3835
+ | AwaitExpression
3836
+ | BinaryExpression
3837
+ | SimpleCallExpression
3838
+ | NewExpression
3839
+ | ChainExpression
3840
+ | ClassExpression
3841
+ | ConditionalExpression
3842
+ | FunctionExpression
3843
+ | Identifier
3844
+ | ImportExpression
3834
3845
  | SimpleLiteral
3835
3846
  | RegExpLiteral
3836
3847
  | BigIntLiteral
3837
- | UpdateExpression
3838
- | BinaryExpression
3839
- | AssignmentExpression
3840
3848
  | LogicalExpression
3841
3849
  | MemberExpression
3842
- | ConditionalExpression
3843
- | SimpleCallExpression
3844
- | NewExpression
3850
+ | MetaProperty
3851
+ | ObjectExpression
3845
3852
  | SequenceExpression
3846
- | TemplateLiteral
3847
3853
  | TaggedTemplateExpression
3848
- | ClassExpression
3849
- | MetaProperty
3850
- | Identifier
3851
- | AwaitExpression
3852
- | ImportExpression
3853
- | ChainExpression;
3854
+ | TemplateLiteral
3855
+ | ThisExpression
3856
+ | UpdateExpression
3857
+ | YieldExpression;
3854
3858
  declare interface ExpressionExpressionInfo {
3855
3859
  type: "expression";
3856
3860
  rootInfo: string | VariableInfo;
@@ -4187,17 +4191,31 @@ declare interface FileSystem {
4187
4191
  arg2: FileSystemCallback<string | Buffer>
4188
4192
  ): void;
4189
4193
  };
4190
- readdir: {
4191
- (
4192
- arg0: string,
4193
- arg1: FileSystemCallback<(string | Buffer)[] | FileSystemDirent[]>
4194
- ): void;
4195
- (
4196
- arg0: string,
4197
- arg1: object,
4198
- arg2: FileSystemCallback<(string | Buffer)[] | FileSystemDirent[]>
4199
- ): void;
4200
- };
4194
+ readdir: (
4195
+ arg0: string,
4196
+ arg1?:
4197
+ | null
4198
+ | "ascii"
4199
+ | "utf8"
4200
+ | "utf16le"
4201
+ | "ucs2"
4202
+ | "latin1"
4203
+ | "binary"
4204
+ | ((
4205
+ arg0?: null | NodeJS.ErrnoException,
4206
+ arg1?: any[] | (string | Buffer)[]
4207
+ ) => void)
4208
+ | ReaddirOptions
4209
+ | "utf-8"
4210
+ | "ucs-2"
4211
+ | "base64"
4212
+ | "hex"
4213
+ | "buffer",
4214
+ arg2?: (
4215
+ arg0?: null | NodeJS.ErrnoException,
4216
+ arg1?: any[] | (string | Buffer)[]
4217
+ ) => void
4218
+ ) => void;
4201
4219
  readJson?: {
4202
4220
  (arg0: string, arg1: FileSystemCallback<object>): void;
4203
4221
  (arg0: string, arg1: object, arg2: FileSystemCallback<object>): void;
@@ -4230,11 +4248,6 @@ declare interface FileSystem {
4230
4248
  declare interface FileSystemCallback<T> {
4231
4249
  (err?: null | (PossibleFileSystemError & Error), result?: T): any;
4232
4250
  }
4233
- declare interface FileSystemDirent {
4234
- name: string | Buffer;
4235
- isDirectory: () => boolean;
4236
- isFile: () => boolean;
4237
- }
4238
4251
  declare abstract class FileSystemInfo {
4239
4252
  fs: InputFileSystem;
4240
4253
  logger?: WebpackLogger;
@@ -4586,7 +4599,7 @@ declare interface HashedModuleIdsPluginOptions {
4586
4599
  /**
4587
4600
  * The encoding to use when generating the hash, defaults to 'base64'. All encodings from Node.JS' hash.digest are supported.
4588
4601
  */
4589
- hashDigest?: "latin1" | "hex" | "base64";
4602
+ hashDigest?: "latin1" | "base64" | "hex";
4590
4603
 
4591
4604
  /**
4592
4605
  * The prefix length of the hash digest to use, defaults to 4.
@@ -4946,13 +4959,13 @@ declare class JavascriptParser extends Parser {
4946
4959
  >;
4947
4960
  evaluateIdentifier: HookMap<
4948
4961
  SyncBailHook<
4949
- [ThisExpression | MemberExpression | MetaProperty | Identifier],
4962
+ [Identifier | MemberExpression | MetaProperty | ThisExpression],
4950
4963
  undefined | null | BasicEvaluatedExpression
4951
4964
  >
4952
4965
  >;
4953
4966
  evaluateDefinedIdentifier: HookMap<
4954
4967
  SyncBailHook<
4955
- [ThisExpression | MemberExpression | Identifier],
4968
+ [Identifier | MemberExpression | ThisExpression],
4956
4969
  undefined | null | BasicEvaluatedExpression
4957
4970
  >
4958
4971
  >;
@@ -4976,32 +4989,32 @@ declare class JavascriptParser extends Parser {
4976
4989
  [
4977
4990
  (
4978
4991
  | UnaryExpression
4979
- | ThisExpression
4980
4992
  | ArrayExpression
4981
- | ObjectExpression
4982
- | FunctionExpression
4983
4993
  | ArrowFunctionExpression
4984
- | YieldExpression
4994
+ | AssignmentExpression
4995
+ | AwaitExpression
4996
+ | BinaryExpression
4997
+ | SimpleCallExpression
4998
+ | NewExpression
4999
+ | ChainExpression
5000
+ | ClassExpression
5001
+ | ConditionalExpression
5002
+ | FunctionExpression
5003
+ | Identifier
5004
+ | ImportExpression
4985
5005
  | SimpleLiteral
4986
5006
  | RegExpLiteral
4987
5007
  | BigIntLiteral
4988
- | UpdateExpression
4989
- | BinaryExpression
4990
- | AssignmentExpression
4991
5008
  | LogicalExpression
4992
5009
  | MemberExpression
4993
- | ConditionalExpression
4994
- | SimpleCallExpression
4995
- | NewExpression
5010
+ | MetaProperty
5011
+ | ObjectExpression
4996
5012
  | SequenceExpression
4997
- | TemplateLiteral
4998
5013
  | TaggedTemplateExpression
4999
- | ClassExpression
5000
- | MetaProperty
5001
- | Identifier
5002
- | AwaitExpression
5003
- | ImportExpression
5004
- | ChainExpression
5014
+ | TemplateLiteral
5015
+ | ThisExpression
5016
+ | UpdateExpression
5017
+ | YieldExpression
5005
5018
  | FunctionDeclaration
5006
5019
  | VariableDeclaration
5007
5020
  | ClassDeclaration
@@ -5223,32 +5236,32 @@ declare class JavascriptParser extends Parser {
5223
5236
  semicolons: any;
5224
5237
  statementPath: (
5225
5238
  | UnaryExpression
5226
- | ThisExpression
5227
5239
  | ArrayExpression
5228
- | ObjectExpression
5229
- | FunctionExpression
5230
5240
  | ArrowFunctionExpression
5231
- | YieldExpression
5241
+ | AssignmentExpression
5242
+ | AwaitExpression
5243
+ | BinaryExpression
5244
+ | SimpleCallExpression
5245
+ | NewExpression
5246
+ | ChainExpression
5247
+ | ClassExpression
5248
+ | ConditionalExpression
5249
+ | FunctionExpression
5250
+ | Identifier
5251
+ | ImportExpression
5232
5252
  | SimpleLiteral
5233
5253
  | RegExpLiteral
5234
5254
  | BigIntLiteral
5235
- | UpdateExpression
5236
- | BinaryExpression
5237
- | AssignmentExpression
5238
5255
  | LogicalExpression
5239
5256
  | MemberExpression
5240
- | ConditionalExpression
5241
- | SimpleCallExpression
5242
- | NewExpression
5257
+ | MetaProperty
5258
+ | ObjectExpression
5243
5259
  | SequenceExpression
5244
- | TemplateLiteral
5245
5260
  | TaggedTemplateExpression
5246
- | ClassExpression
5247
- | MetaProperty
5248
- | Identifier
5249
- | AwaitExpression
5250
- | ImportExpression
5251
- | ChainExpression
5261
+ | TemplateLiteral
5262
+ | ThisExpression
5263
+ | UpdateExpression
5264
+ | YieldExpression
5252
5265
  | FunctionDeclaration
5253
5266
  | VariableDeclaration
5254
5267
  | ClassDeclaration
@@ -5273,7 +5286,11 @@ declare class JavascriptParser extends Parser {
5273
5286
  | ForOfStatement
5274
5287
  )[];
5275
5288
  prevStatement: any;
5289
+ destructuringAssignmentProperties: WeakMap<Expression, Set<string>>;
5276
5290
  currentTagData: any;
5291
+ destructuringAssignmentPropertiesFor(
5292
+ node: Expression
5293
+ ): undefined | Set<string>;
5277
5294
  getRenameIdentifier(expr?: any): undefined | string | VariableInfoInterface;
5278
5295
  walkClass(classy: ClassExpression | ClassDeclaration): void;
5279
5296
  preWalkStatements(statements?: any): void;
@@ -5317,6 +5334,8 @@ declare class JavascriptParser extends Parser {
5317
5334
  walkForOfStatement(statement?: any): void;
5318
5335
  preWalkFunctionDeclaration(statement?: any): void;
5319
5336
  walkFunctionDeclaration(statement?: any): void;
5337
+ blockPreWalkExpressionStatement(statement?: any): void;
5338
+ preWalkAssignmentExpression(expression?: any): void;
5320
5339
  blockPreWalkImportDeclaration(statement?: any): void;
5321
5340
  enterDeclaration(declaration?: any, onIdent?: any): void;
5322
5341
  blockPreWalkExportNamedDeclaration(statement?: any): void;
@@ -5326,6 +5345,7 @@ declare class JavascriptParser extends Parser {
5326
5345
  blockPreWalkExportAllDeclaration(statement?: any): void;
5327
5346
  preWalkVariableDeclaration(statement?: any): void;
5328
5347
  blockPreWalkVariableDeclaration(statement?: any): void;
5348
+ preWalkVariableDeclarator(declarator?: any): void;
5329
5349
  walkVariableDeclaration(statement?: any): void;
5330
5350
  blockPreWalkClassDeclaration(statement?: any): void;
5331
5351
  walkClassDeclaration(statement?: any): void;
@@ -5430,32 +5450,32 @@ declare class JavascriptParser extends Parser {
5430
5450
  | undefined
5431
5451
  | null
5432
5452
  | UnaryExpression
5433
- | ThisExpression
5434
5453
  | ArrayExpression
5435
- | ObjectExpression
5436
- | FunctionExpression
5437
5454
  | ArrowFunctionExpression
5438
- | YieldExpression
5455
+ | AssignmentExpression
5456
+ | AwaitExpression
5457
+ | BinaryExpression
5458
+ | SimpleCallExpression
5459
+ | NewExpression
5460
+ | ChainExpression
5461
+ | ClassExpression
5462
+ | ConditionalExpression
5463
+ | FunctionExpression
5464
+ | Identifier
5465
+ | ImportExpression
5439
5466
  | SimpleLiteral
5440
5467
  | RegExpLiteral
5441
5468
  | BigIntLiteral
5442
- | UpdateExpression
5443
- | BinaryExpression
5444
- | AssignmentExpression
5445
5469
  | LogicalExpression
5446
5470
  | MemberExpression
5447
- | ConditionalExpression
5448
- | SimpleCallExpression
5449
- | NewExpression
5471
+ | MetaProperty
5472
+ | ObjectExpression
5450
5473
  | SequenceExpression
5451
- | TemplateLiteral
5452
5474
  | TaggedTemplateExpression
5453
- | ClassExpression
5454
- | MetaProperty
5455
- | Identifier
5456
- | AwaitExpression
5457
- | ImportExpression
5458
- | ChainExpression
5475
+ | TemplateLiteral
5476
+ | ThisExpression
5477
+ | UpdateExpression
5478
+ | YieldExpression
5459
5479
  | FunctionDeclaration
5460
5480
  | VariableDeclaration
5461
5481
  | ClassDeclaration
@@ -5481,32 +5501,32 @@ declare class JavascriptParser extends Parser {
5481
5501
  members: string[];
5482
5502
  object:
5483
5503
  | UnaryExpression
5484
- | ThisExpression
5485
5504
  | ArrayExpression
5486
- | ObjectExpression
5487
- | FunctionExpression
5488
5505
  | ArrowFunctionExpression
5489
- | YieldExpression
5506
+ | AssignmentExpression
5507
+ | AwaitExpression
5508
+ | BinaryExpression
5509
+ | SimpleCallExpression
5510
+ | NewExpression
5511
+ | ChainExpression
5512
+ | ClassExpression
5513
+ | ConditionalExpression
5514
+ | FunctionExpression
5515
+ | Identifier
5516
+ | ImportExpression
5490
5517
  | SimpleLiteral
5491
5518
  | RegExpLiteral
5492
5519
  | BigIntLiteral
5493
- | UpdateExpression
5494
- | BinaryExpression
5495
- | AssignmentExpression
5496
5520
  | LogicalExpression
5497
5521
  | MemberExpression
5498
- | ConditionalExpression
5499
- | SimpleCallExpression
5500
- | NewExpression
5522
+ | MetaProperty
5523
+ | ObjectExpression
5501
5524
  | SequenceExpression
5502
- | TemplateLiteral
5503
5525
  | TaggedTemplateExpression
5504
- | ClassExpression
5505
- | MetaProperty
5506
- | Identifier
5507
- | AwaitExpression
5508
- | ImportExpression
5509
- | ChainExpression
5526
+ | TemplateLiteral
5527
+ | ThisExpression
5528
+ | UpdateExpression
5529
+ | YieldExpression
5510
5530
  | Super;
5511
5531
  membersOptionals: boolean[];
5512
5532
  };
@@ -6133,7 +6153,10 @@ declare interface LazyCompilationDefaultBackendOptions {
6133
6153
  /**
6134
6154
  * Specifies how to create the server handling the EventSource requests.
6135
6155
  */
6136
- server?: ServerOptionsImport | ServerOptionsHttps | (() => typeof Server);
6156
+ server?:
6157
+ | ServerOptionsImport<typeof IncomingMessage>
6158
+ | ServerOptionsHttps<typeof IncomingMessage, typeof ServerResponse>
6159
+ | (() => typeof Server);
6137
6160
  }
6138
6161
 
6139
6162
  /**
@@ -6575,6 +6598,7 @@ declare interface LoaderRunnerLoaderContext<OptionsType> {
6575
6598
  data?: object;
6576
6599
  pitchExecuted: boolean;
6577
6600
  normalExecuted: boolean;
6601
+ type?: "module" | "commonjs";
6578
6602
  }[];
6579
6603
 
6580
6604
  /**
@@ -7546,32 +7570,32 @@ declare class NodeEnvironmentPlugin {
7546
7570
  }
7547
7571
  type NodeEstreeIndex =
7548
7572
  | UnaryExpression
7549
- | ThisExpression
7550
7573
  | ArrayExpression
7551
- | ObjectExpression
7552
- | FunctionExpression
7553
7574
  | ArrowFunctionExpression
7554
- | YieldExpression
7575
+ | AssignmentExpression
7576
+ | AwaitExpression
7577
+ | BinaryExpression
7578
+ | SimpleCallExpression
7579
+ | NewExpression
7580
+ | ChainExpression
7581
+ | ClassExpression
7582
+ | ConditionalExpression
7583
+ | FunctionExpression
7584
+ | Identifier
7585
+ | ImportExpression
7555
7586
  | SimpleLiteral
7556
7587
  | RegExpLiteral
7557
7588
  | BigIntLiteral
7558
- | UpdateExpression
7559
- | BinaryExpression
7560
- | AssignmentExpression
7561
7589
  | LogicalExpression
7562
7590
  | MemberExpression
7563
- | ConditionalExpression
7564
- | SimpleCallExpression
7565
- | NewExpression
7591
+ | MetaProperty
7592
+ | ObjectExpression
7566
7593
  | SequenceExpression
7567
- | TemplateLiteral
7568
7594
  | TaggedTemplateExpression
7569
- | ClassExpression
7570
- | MetaProperty
7571
- | Identifier
7572
- | AwaitExpression
7573
- | ImportExpression
7574
- | ChainExpression
7595
+ | TemplateLiteral
7596
+ | ThisExpression
7597
+ | UpdateExpression
7598
+ | YieldExpression
7575
7599
  | FunctionDeclaration
7576
7600
  | VariableDeclaration
7577
7601
  | ClassDeclaration
@@ -7603,22 +7627,22 @@ type NodeEstreeIndex =
7603
7627
  | PropertyDefinition
7604
7628
  | VariableDeclarator
7605
7629
  | Program
7606
- | SwitchCase
7607
- | CatchClause
7608
- | Property
7609
7630
  | AssignmentProperty
7610
- | Super
7611
- | TemplateElement
7612
- | SpreadElement
7613
- | ObjectPattern
7614
- | ArrayPattern
7615
- | RestElement
7616
- | AssignmentPattern
7631
+ | Property
7632
+ | CatchClause
7617
7633
  | ClassBody
7618
7634
  | ImportSpecifier
7619
7635
  | ImportDefaultSpecifier
7620
7636
  | ImportNamespaceSpecifier
7621
- | ExportSpecifier;
7637
+ | ExportSpecifier
7638
+ | ObjectPattern
7639
+ | ArrayPattern
7640
+ | RestElement
7641
+ | AssignmentPattern
7642
+ | SpreadElement
7643
+ | Super
7644
+ | SwitchCase
7645
+ | TemplateElement;
7622
7646
 
7623
7647
  /**
7624
7648
  * Options object for node compatibility features.
@@ -7912,10 +7936,10 @@ declare class NormalModuleReplacementPlugin {
7912
7936
  */
7913
7937
  constructor(
7914
7938
  resourceRegExp: RegExp,
7915
- newResource: string | ((arg0?: any) => void)
7939
+ newResource: string | ((arg0: ResolveData) => void)
7916
7940
  );
7917
7941
  resourceRegExp: RegExp;
7918
- newResource: string | ((arg0?: any) => void);
7942
+ newResource: string | ((arg0: ResolveData) => void);
7919
7943
 
7920
7944
  /**
7921
7945
  * Apply the plugin
@@ -9396,6 +9420,22 @@ declare class ReadFileCompileWasmPlugin {
9396
9420
  */
9397
9421
  apply(compiler: Compiler): void;
9398
9422
  }
9423
+ declare interface ReaddirOptions {
9424
+ encoding?:
9425
+ | null
9426
+ | "ascii"
9427
+ | "utf8"
9428
+ | "utf16le"
9429
+ | "ucs2"
9430
+ | "latin1"
9431
+ | "binary"
9432
+ | "utf-8"
9433
+ | "ucs-2"
9434
+ | "base64"
9435
+ | "hex"
9436
+ | "buffer";
9437
+ withFileTypes?: boolean;
9438
+ }
9399
9439
  declare class RealContentHashPlugin {
9400
9440
  constructor(__0: { hashFunction: any; hashDigest: any });
9401
9441
 
@@ -10888,9 +10928,10 @@ declare abstract class Serializer {
10888
10928
  serialize(obj?: any, context?: any): any;
10889
10929
  deserialize(value?: any, context?: any): any;
10890
10930
  }
10891
- type ServerOptionsHttps = SecureContextOptions &
10892
- TlsOptions &
10893
- ServerOptionsImport;
10931
+ type ServerOptionsHttps<
10932
+ Request extends typeof IncomingMessage = typeof IncomingMessage,
10933
+ Response extends typeof ServerResponse = typeof ServerResponse
10934
+ > = SecureContextOptions & TlsOptions & ServerOptionsImport<Request, Response>;
10894
10935
  declare class SharePlugin {
10895
10936
  constructor(options: SharePluginOptions);
10896
10937
 
@@ -11576,6 +11617,11 @@ declare interface StatsOptions {
11576
11617
  */
11577
11618
  errorsCount?: boolean;
11578
11619
 
11620
+ /**
11621
+ * Space to display errors (value is in number of lines).
11622
+ */
11623
+ errorsSpace?: number;
11624
+
11579
11625
  /**
11580
11626
  * Please use excludeModules instead.
11581
11627
  */
@@ -11836,6 +11882,11 @@ declare interface StatsOptions {
11836
11882
  | RegExp
11837
11883
  | WarningFilterItemTypes[]
11838
11884
  | ((warning: StatsError, value: string) => boolean);
11885
+
11886
+ /**
11887
+ * Space to display warnings (value is in number of lines).
11888
+ */
11889
+ warningsSpace?: number;
11839
11890
  }
11840
11891
  declare abstract class StatsPrinter {
11841
11892
  hooks: Readonly<{
@@ -13182,6 +13233,11 @@ declare namespace exports {
13182
13233
  Entry,
13183
13234
  EntryNormalized,
13184
13235
  EntryObject,
13236
+ ExternalItemFunctionData,
13237
+ ExternalItemObjectKnown,
13238
+ ExternalItemObjectUnknown,
13239
+ ExternalItemValue,
13240
+ Externals,
13185
13241
  FileCacheOptions,
13186
13242
  LibraryOptions,
13187
13243
  ModuleOptions,