@netlify/plugin-nextjs 4.40.1 → 4.40.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.
Files changed (161) hide show
  1. package/lib/helpers/edge.js +1 -0
  2. package/lib/templates/vendor.js +20 -0
  3. package/package.json +7 -4
  4. package/src/templates/edge/next-dev.js +3 -3
  5. package/src/templates/edge/shims.js +6 -6
  6. package/src/templates/edge-shared/next-utils.ts +3 -3
  7. package/src/templates/edge-shared/utils.ts +1 -1
  8. package/src/templates/vendor/deno.land/std@0.134.0/fmt/colors.ts +536 -0
  9. package/src/templates/vendor/deno.land/std@0.134.0/testing/_diff.ts +360 -0
  10. package/src/templates/vendor/deno.land/std@0.134.0/testing/asserts.ts +866 -0
  11. package/src/templates/vendor/deno.land/std@0.175.0/_util/asserts.ts +25 -0
  12. package/src/templates/vendor/deno.land/std@0.175.0/_util/os.ts +23 -0
  13. package/src/templates/vendor/deno.land/std@0.175.0/async/abortable.ts +149 -0
  14. package/src/templates/vendor/deno.land/std@0.175.0/async/deadline.ts +30 -0
  15. package/src/templates/vendor/deno.land/std@0.175.0/async/debounce.ts +79 -0
  16. package/src/templates/vendor/deno.land/std@0.175.0/async/deferred.ts +48 -0
  17. package/src/templates/vendor/deno.land/std@0.175.0/async/delay.ts +67 -0
  18. package/src/templates/vendor/deno.land/std@0.175.0/async/mod.ts +18 -0
  19. package/src/templates/vendor/deno.land/std@0.175.0/async/mux_async_iterator.ts +97 -0
  20. package/src/templates/vendor/deno.land/std@0.175.0/async/pool.ts +95 -0
  21. package/src/templates/vendor/deno.land/std@0.175.0/async/retry.ts +81 -0
  22. package/src/templates/vendor/deno.land/std@0.175.0/async/tee.ts +100 -0
  23. package/src/templates/vendor/deno.land/std@0.175.0/bytes/index_of_needle.ts +49 -0
  24. package/src/templates/vendor/deno.land/std@0.175.0/crypto/timing_safe_equal.ts +29 -0
  25. package/src/templates/vendor/deno.land/std@0.175.0/datetime/to_imf.ts +45 -0
  26. package/src/templates/vendor/deno.land/std@0.175.0/encoding/base64.ts +144 -0
  27. package/src/templates/vendor/deno.land/std@0.175.0/encoding/base64url.ts +70 -0
  28. package/src/templates/vendor/deno.land/std@0.175.0/flags/mod.ts +785 -0
  29. package/src/templates/vendor/deno.land/std@0.175.0/fmt/colors.ts +569 -0
  30. package/src/templates/vendor/deno.land/std@0.175.0/fmt/printf.ts +939 -0
  31. package/src/templates/vendor/deno.land/std@0.175.0/http/cookie.ts +403 -0
  32. package/src/templates/vendor/deno.land/std@0.175.0/node/_core.ts +77 -0
  33. package/src/templates/vendor/deno.land/std@0.175.0/node/_events.d.ts +848 -0
  34. package/src/templates/vendor/deno.land/std@0.175.0/node/_events.mjs +1033 -0
  35. package/src/templates/vendor/deno.land/std@0.175.0/node/_global.d.ts +66 -0
  36. package/src/templates/vendor/deno.land/std@0.175.0/node/_next_tick.ts +173 -0
  37. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/exiting.ts +4 -0
  38. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/process.ts +131 -0
  39. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/stdio.mjs +7 -0
  40. package/src/templates/vendor/deno.land/std@0.175.0/node/_process/streams.mjs +146 -0
  41. package/src/templates/vendor/deno.land/std@0.175.0/node/_stream.d.ts +1488 -0
  42. package/src/templates/vendor/deno.land/std@0.175.0/node/_stream.mjs +746 -0
  43. package/src/templates/vendor/deno.land/std@0.175.0/node/_util/_util_callbackify.ts +129 -0
  44. package/src/templates/vendor/deno.land/std@0.175.0/node/_utils.ts +206 -0
  45. package/src/templates/vendor/deno.land/std@0.175.0/node/assert.ts +940 -0
  46. package/src/templates/vendor/deno.land/std@0.175.0/node/assertion_error.ts +579 -0
  47. package/src/templates/vendor/deno.land/std@0.175.0/node/async_hooks.ts +331 -0
  48. package/src/templates/vendor/deno.land/std@0.175.0/node/buffer.ts +13 -0
  49. package/src/templates/vendor/deno.land/std@0.175.0/node/events.ts +14 -0
  50. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/buffer.d.ts +2074 -0
  51. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/buffer.mjs +2607 -0
  52. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/crypto/_keys.ts +16 -0
  53. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/crypto/constants.ts +5 -0
  54. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/error_codes.ts +7 -0
  55. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/errors.ts +2867 -0
  56. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/fixed_queue.ts +123 -0
  57. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/hide_stack_frames.ts +16 -0
  58. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/net.ts +95 -0
  59. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/normalize_encoding.mjs +72 -0
  60. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/options.ts +45 -0
  61. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/primordials.mjs +30 -0
  62. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/process/per_thread.mjs +272 -0
  63. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/readline/callbacks.mjs +137 -0
  64. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/readline/utils.mjs +580 -0
  65. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/destroy.mjs +320 -0
  66. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/end-of-stream.mjs +229 -0
  67. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/streams/utils.mjs +242 -0
  68. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/comparisons.ts +669 -0
  69. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/debuglog.ts +118 -0
  70. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/inspect.mjs +2237 -0
  71. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util/types.ts +113 -0
  72. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/util.mjs +143 -0
  73. package/src/templates/vendor/deno.land/std@0.175.0/node/internal/validators.mjs +317 -0
  74. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_libuv_winerror.ts +229 -0
  75. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_listen.ts +16 -0
  76. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_node.ts +18 -0
  77. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_timingSafeEqual.ts +12 -0
  78. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_utils.ts +86 -0
  79. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/_winerror.ts +16873 -0
  80. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/ares.ts +66 -0
  81. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/async_wrap.ts +152 -0
  82. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/buffer.ts +130 -0
  83. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/cares_wrap.ts +541 -0
  84. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/config.ts +3 -0
  85. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/connection_wrap.ts +80 -0
  86. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/constants.ts +900 -0
  87. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/contextify.ts +3 -0
  88. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/credentials.ts +3 -0
  89. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/crypto.ts +14 -0
  90. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/errors.ts +3 -0
  91. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs.ts +3 -0
  92. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs_dir.ts +3 -0
  93. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/fs_event_wrap.ts +3 -0
  94. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/handle_wrap.ts +50 -0
  95. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/heap_utils.ts +3 -0
  96. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/http_parser.ts +3 -0
  97. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/icu.ts +3 -0
  98. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/inspector.ts +3 -0
  99. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/js_stream.ts +3 -0
  100. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/messaging.ts +3 -0
  101. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/mod.ts +108 -0
  102. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/module_wrap.ts +3 -0
  103. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/native_module.ts +3 -0
  104. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/natives.ts +3 -0
  105. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/node_file.ts +84 -0
  106. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/node_options.ts +39 -0
  107. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/options.ts +3 -0
  108. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/os.ts +3 -0
  109. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/performance.ts +3 -0
  110. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/pipe_wrap.ts +392 -0
  111. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/process_methods.ts +3 -0
  112. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/report.ts +3 -0
  113. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/serdes.ts +3 -0
  114. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/signal_wrap.ts +3 -0
  115. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/spawn_sync.ts +3 -0
  116. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/stream_wrap.ts +354 -0
  117. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/string_decoder.ts +15 -0
  118. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/symbols.ts +27 -0
  119. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/task_queue.ts +3 -0
  120. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tcp_wrap.ts +488 -0
  121. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/timers.ts +3 -0
  122. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tls_wrap.ts +3 -0
  123. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/trace_events.ts +3 -0
  124. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/tty_wrap.ts +3 -0
  125. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/types.ts +186 -0
  126. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/udp_wrap.ts +496 -0
  127. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/url.ts +3 -0
  128. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/util.ts +126 -0
  129. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/uv.ts +437 -0
  130. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/v8.ts +3 -0
  131. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/worker.ts +3 -0
  132. package/src/templates/vendor/deno.land/std@0.175.0/node/internal_binding/zlib.ts +3 -0
  133. package/src/templates/vendor/deno.land/std@0.175.0/node/process.ts +705 -0
  134. package/src/templates/vendor/deno.land/std@0.175.0/node/stream.ts +37 -0
  135. package/src/templates/vendor/deno.land/std@0.175.0/node/string_decoder.ts +337 -0
  136. package/src/templates/vendor/deno.land/std@0.175.0/node/util/types.ts +4 -0
  137. package/src/templates/vendor/deno.land/std@0.175.0/node/util.ts +289 -0
  138. package/src/templates/vendor/deno.land/std@0.175.0/path/_constants.ts +49 -0
  139. package/src/templates/vendor/deno.land/std@0.175.0/path/_interface.ts +30 -0
  140. package/src/templates/vendor/deno.land/std@0.175.0/path/_util.ts +194 -0
  141. package/src/templates/vendor/deno.land/std@0.175.0/path/common.ts +40 -0
  142. package/src/templates/vendor/deno.land/std@0.175.0/path/glob.ts +418 -0
  143. package/src/templates/vendor/deno.land/std@0.175.0/path/mod.ts +53 -0
  144. package/src/templates/vendor/deno.land/std@0.175.0/path/posix.ts +487 -0
  145. package/src/templates/vendor/deno.land/std@0.175.0/path/separator.ts +7 -0
  146. package/src/templates/vendor/deno.land/std@0.175.0/path/win32.ts +962 -0
  147. package/src/templates/vendor/deno.land/std@0.175.0/streams/write_all.ts +64 -0
  148. package/src/templates/vendor/deno.land/std@0.175.0/testing/_diff.ts +440 -0
  149. package/src/templates/vendor/deno.land/std@0.175.0/testing/_format.ts +23 -0
  150. package/src/templates/vendor/deno.land/std@0.175.0/testing/asserts.ts +906 -0
  151. package/src/templates/vendor/deno.land/std@0.175.0/types.d.ts +89 -0
  152. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/index.ts +133 -0
  153. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/asyncify.js +112 -0
  154. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.d.ts +88 -0
  155. package/src/templates/vendor/deno.land/x/html_rewriter@v0.1.0-pre.17/vendor/html_rewriter.js +974 -0
  156. package/src/templates/vendor/deno.land/x/path_to_regexp@v6.2.1/index.ts +621 -0
  157. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/compiled/cookie.js +13 -0
  158. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/request.js +12 -0
  159. package/src/templates/vendor/esm.sh/v91/next@12.2.5/deno/dist/server/web/spec-extension/response.js +5 -0
  160. package/src/templates/vendor/import_map.json +13 -0
  161. package/src/templates/vendor/raw.githubusercontent.com/worker-tools/resolvable-promise/master/index.ts +50 -0
@@ -0,0 +1,785 @@
1
+ // Copyright 2018-2023 the Deno authors. All rights reserved. MIT license.
2
+ /**
3
+ * Command line arguments parser based on
4
+ * [minimist](https://github.com/minimistjs/minimist).
5
+ *
6
+ * This module is browser compatible.
7
+ *
8
+ * @example
9
+ * ```ts
10
+ * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts";
11
+ *
12
+ * console.dir(parse(Deno.args));
13
+ * ```
14
+ *
15
+ * ```sh
16
+ * $ deno run https://deno.land/std/examples/flags.ts -a beep -b boop
17
+ * { _: [], a: 'beep', b: 'boop' }
18
+ * ```
19
+ *
20
+ * ```sh
21
+ * $ deno run https://deno.land/std/examples/flags.ts -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
22
+ * { _: [ 'foo', 'bar', 'baz' ],
23
+ * x: 3,
24
+ * y: 4,
25
+ * n: 5,
26
+ * a: true,
27
+ * b: true,
28
+ * c: true,
29
+ * beep: 'boop' }
30
+ * ```
31
+ *
32
+ * @module
33
+ */
34
+ import { assert } from "../_util/asserts.ts";
35
+
36
+ /** Combines recursively all intersection types and returns a new single type. */
37
+ type Id<TRecord> = TRecord extends Record<string, unknown>
38
+ ? TRecord extends infer InferredRecord
39
+ ? { [Key in keyof InferredRecord]: Id<InferredRecord[Key]> }
40
+ : never
41
+ : TRecord;
42
+
43
+ /** Converts a union type `A | B | C` into an intersection type `A & B & C`. */
44
+ type UnionToIntersection<TValue> =
45
+ (TValue extends unknown ? (args: TValue) => unknown : never) extends
46
+ (args: infer R) => unknown ? R extends Record<string, unknown> ? R : never
47
+ : never;
48
+
49
+ type BooleanType = boolean | string | undefined;
50
+ type StringType = string | undefined;
51
+ type ArgType = StringType | BooleanType;
52
+
53
+ type Collectable = string | undefined;
54
+ type Negatable = string | undefined;
55
+
56
+ type UseTypes<
57
+ TBooleans extends BooleanType,
58
+ TStrings extends StringType,
59
+ TCollectable extends Collectable,
60
+ > = undefined extends (
61
+ & (false extends TBooleans ? undefined : TBooleans)
62
+ & TCollectable
63
+ & TStrings
64
+ ) ? false
65
+ : true;
66
+
67
+ /**
68
+ * Creates a record with all available flags with the corresponding type and
69
+ * default type.
70
+ */
71
+ type Values<
72
+ TBooleans extends BooleanType,
73
+ TStrings extends StringType,
74
+ TCollectable extends Collectable,
75
+ TNegatable extends Negatable,
76
+ TDefault extends Record<string, unknown> | undefined,
77
+ TAliases extends Aliases | undefined,
78
+ > = UseTypes<TBooleans, TStrings, TCollectable> extends true ?
79
+ & Record<string, unknown>
80
+ & AddAliases<
81
+ SpreadDefaults<
82
+ & CollectValues<TStrings, string, TCollectable, TNegatable>
83
+ & RecursiveRequired<CollectValues<TBooleans, boolean, TCollectable>>
84
+ & CollectUnknownValues<
85
+ TBooleans,
86
+ TStrings,
87
+ TCollectable,
88
+ TNegatable
89
+ >,
90
+ DedotRecord<TDefault>
91
+ >,
92
+ TAliases
93
+ >
94
+ // deno-lint-ignore no-explicit-any
95
+ : Record<string, any>;
96
+
97
+ type Aliases<TArgNames = string, TAliasNames extends string = string> = Partial<
98
+ Record<Extract<TArgNames, string>, TAliasNames | ReadonlyArray<TAliasNames>>
99
+ >;
100
+
101
+ type AddAliases<
102
+ TArgs,
103
+ TAliases extends Aliases | undefined,
104
+ > = {
105
+ [TArgName in keyof TArgs as AliasNames<TArgName, TAliases>]: TArgs[TArgName];
106
+ };
107
+
108
+ type AliasNames<
109
+ TArgName,
110
+ TAliases extends Aliases | undefined,
111
+ > = TArgName extends keyof TAliases
112
+ ? string extends TAliases[TArgName] ? TArgName
113
+ : TAliases[TArgName] extends string ? TArgName | TAliases[TArgName]
114
+ : TAliases[TArgName] extends Array<string>
115
+ ? TArgName | TAliases[TArgName][number]
116
+ : TArgName
117
+ : TArgName;
118
+
119
+ /**
120
+ * Spreads all default values of Record `TDefaults` into Record `TArgs`
121
+ * and makes default values required.
122
+ *
123
+ * **Example:**
124
+ * `SpreadValues<{ foo?: boolean, bar?: number }, { foo: number }>`
125
+ *
126
+ * **Result:** `{ foo: boolean | number, bar?: number }`
127
+ */
128
+ type SpreadDefaults<TArgs, TDefaults> = TDefaults extends undefined ? TArgs
129
+ : TArgs extends Record<string, unknown> ?
130
+ & Omit<TArgs, keyof TDefaults>
131
+ & {
132
+ [Default in keyof TDefaults]: Default extends keyof TArgs
133
+ ? (TArgs[Default] & TDefaults[Default] | TDefaults[Default]) extends
134
+ Record<string, unknown>
135
+ ? NonNullable<SpreadDefaults<TArgs[Default], TDefaults[Default]>>
136
+ : TDefaults[Default] | NonNullable<TArgs[Default]>
137
+ : unknown;
138
+ }
139
+ : never;
140
+
141
+ /**
142
+ * Defines the Record for the `default` option to add
143
+ * auto-suggestion support for IDE's.
144
+ */
145
+ type Defaults<TBooleans extends BooleanType, TStrings extends StringType> = Id<
146
+ UnionToIntersection<
147
+ & Record<string, unknown>
148
+ // Dedotted auto suggestions: { foo: { bar: unknown } }
149
+ & MapTypes<TStrings, unknown>
150
+ & MapTypes<TBooleans, unknown>
151
+ // Flat auto suggestions: { "foo.bar": unknown }
152
+ & MapDefaults<TBooleans>
153
+ & MapDefaults<TStrings>
154
+ >
155
+ >;
156
+
157
+ type MapDefaults<TArgNames extends ArgType> = Partial<
158
+ Record<TArgNames extends string ? TArgNames : string, unknown>
159
+ >;
160
+
161
+ type RecursiveRequired<TRecord> = TRecord extends Record<string, unknown> ? {
162
+ [Key in keyof TRecord]-?: RecursiveRequired<TRecord[Key]>;
163
+ }
164
+ : TRecord;
165
+
166
+ /** Same as `MapTypes` but also supports collectable options. */
167
+ type CollectValues<
168
+ TArgNames extends ArgType,
169
+ TType,
170
+ TCollectable extends Collectable,
171
+ TNegatable extends Negatable = undefined,
172
+ > = UnionToIntersection<
173
+ Extract<TArgNames, TCollectable> extends string ?
174
+ & (Exclude<TArgNames, TCollectable> extends never ? Record<never, never>
175
+ : MapTypes<Exclude<TArgNames, TCollectable>, TType, TNegatable>)
176
+ & (Extract<TArgNames, TCollectable> extends never ? Record<never, never>
177
+ : RecursiveRequired<
178
+ MapTypes<Extract<TArgNames, TCollectable>, Array<TType>, TNegatable>
179
+ >)
180
+ : MapTypes<TArgNames, TType, TNegatable>
181
+ >;
182
+
183
+ /** Same as `Record` but also supports dotted and negatable options. */
184
+ type MapTypes<
185
+ TArgNames extends ArgType,
186
+ TType,
187
+ TNegatable extends Negatable = undefined,
188
+ > = undefined extends TArgNames ? Record<never, never>
189
+ : TArgNames extends `${infer Name}.${infer Rest}` ? {
190
+ [Key in Name]?: MapTypes<
191
+ Rest,
192
+ TType,
193
+ TNegatable extends `${Name}.${infer Negate}` ? Negate : undefined
194
+ >;
195
+ }
196
+ : TArgNames extends string ? Partial<
197
+ Record<TArgNames, TNegatable extends TArgNames ? TType | false : TType>
198
+ >
199
+ : Record<never, never>;
200
+
201
+ type CollectUnknownValues<
202
+ TBooleans extends BooleanType,
203
+ TStrings extends StringType,
204
+ TCollectable extends Collectable,
205
+ TNegatable extends Negatable,
206
+ > = UnionToIntersection<
207
+ TCollectable extends TBooleans & TStrings ? Record<never, never>
208
+ : DedotRecord<
209
+ // Unknown collectable & non-negatable args.
210
+ & Record<
211
+ Exclude<
212
+ Extract<Exclude<TCollectable, TNegatable>, string>,
213
+ Extract<TStrings | TBooleans, string>
214
+ >,
215
+ Array<unknown>
216
+ >
217
+ // Unknown collectable & negatable args.
218
+ & Record<
219
+ Exclude<
220
+ Extract<Extract<TCollectable, TNegatable>, string>,
221
+ Extract<TStrings | TBooleans, string>
222
+ >,
223
+ Array<unknown> | false
224
+ >
225
+ >
226
+ >;
227
+
228
+ /** Converts `{ "foo.bar.baz": unknown }` into `{ foo: { bar: { baz: unknown } } }`. */
229
+ type DedotRecord<TRecord> = Record<string, unknown> extends TRecord ? TRecord
230
+ : TRecord extends Record<string, unknown> ? UnionToIntersection<
231
+ ValueOf<
232
+ {
233
+ [Key in keyof TRecord]: Key extends string ? Dedot<Key, TRecord[Key]>
234
+ : never;
235
+ }
236
+ >
237
+ >
238
+ : TRecord;
239
+
240
+ type Dedot<TKey extends string, TValue> = TKey extends
241
+ `${infer Name}.${infer Rest}` ? { [Key in Name]: Dedot<Rest, TValue> }
242
+ : { [Key in TKey]: TValue };
243
+
244
+ type ValueOf<TValue> = TValue[keyof TValue];
245
+
246
+ /** The value returned from `parse`. */
247
+ export type Args<
248
+ // deno-lint-ignore no-explicit-any
249
+ TArgs extends Record<string, unknown> = Record<string, any>,
250
+ TDoubleDash extends boolean | undefined = undefined,
251
+ > = Id<
252
+ & TArgs
253
+ & {
254
+ /** Contains all the arguments that didn't have an option associated with
255
+ * them. */
256
+ _: Array<string | number>;
257
+ }
258
+ & (boolean extends TDoubleDash ? DoubleDash
259
+ : true extends TDoubleDash ? Required<DoubleDash>
260
+ : Record<never, never>)
261
+ >;
262
+
263
+ type DoubleDash = {
264
+ /** Contains all the arguments that appear after the double dash: "--". */
265
+ "--"?: Array<string>;
266
+ };
267
+
268
+ /** The options for the `parse` call. */
269
+ export interface ParseOptions<
270
+ TBooleans extends BooleanType = BooleanType,
271
+ TStrings extends StringType = StringType,
272
+ TCollectable extends Collectable = Collectable,
273
+ TNegatable extends Negatable = Negatable,
274
+ TDefault extends Record<string, unknown> | undefined =
275
+ | Record<string, unknown>
276
+ | undefined,
277
+ TAliases extends Aliases | undefined = Aliases | undefined,
278
+ TDoubleDash extends boolean | undefined = boolean | undefined,
279
+ > {
280
+ /**
281
+ * When `true`, populate the result `_` with everything before the `--` and
282
+ * the result `['--']` with everything after the `--`.
283
+ *
284
+ * @default {false}
285
+ *
286
+ * @example
287
+ * ```ts
288
+ * // $ deno run example.ts -- a arg1
289
+ * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts";
290
+ * console.dir(parse(Deno.args, { "--": false }));
291
+ * // output: { _: [ "a", "arg1" ] }
292
+ * console.dir(parse(Deno.args, { "--": true }));
293
+ * // output: { _: [], --: [ "a", "arg1" ] }
294
+ * ```
295
+ */
296
+ "--"?: TDoubleDash;
297
+
298
+ /**
299
+ * An object mapping string names to strings or arrays of string argument
300
+ * names to use as aliases.
301
+ */
302
+ alias?: TAliases;
303
+
304
+ /**
305
+ * A boolean, string or array of strings to always treat as booleans. If
306
+ * `true` will treat all double hyphenated arguments without equal signs as
307
+ * `boolean` (e.g. affects `--foo`, not `-f` or `--foo=bar`).
308
+ * All `boolean` arguments will be set to `false` by default.
309
+ */
310
+ boolean?: TBooleans | ReadonlyArray<Extract<TBooleans, string>>;
311
+
312
+ /** An object mapping string argument names to default values. */
313
+ default?: TDefault & Defaults<TBooleans, TStrings>;
314
+
315
+ /**
316
+ * When `true`, populate the result `_` with everything after the first
317
+ * non-option.
318
+ */
319
+ stopEarly?: boolean;
320
+
321
+ /** A string or array of strings argument names to always treat as strings. */
322
+ string?: TStrings | ReadonlyArray<Extract<TStrings, string>>;
323
+
324
+ /**
325
+ * A string or array of strings argument names to always treat as arrays.
326
+ * Collectable options can be used multiple times. All values will be
327
+ * collected into one array. If a non-collectable option is used multiple
328
+ * times, the last value is used.
329
+ * All Collectable arguments will be set to `[]` by default.
330
+ */
331
+ collect?: TCollectable | ReadonlyArray<Extract<TCollectable, string>>;
332
+
333
+ /**
334
+ * A string or array of strings argument names which can be negated
335
+ * by prefixing them with `--no-`, like `--no-config`.
336
+ */
337
+ negatable?: TNegatable | ReadonlyArray<Extract<TNegatable, string>>;
338
+
339
+ /**
340
+ * A function which is invoked with a command line parameter not defined in
341
+ * the `options` configuration object. If the function returns `false`, the
342
+ * unknown option is not added to `parsedArgs`.
343
+ */
344
+ unknown?: (arg: string, key?: string, value?: unknown) => unknown;
345
+ }
346
+
347
+ interface Flags {
348
+ bools: Record<string, boolean>;
349
+ strings: Record<string, boolean>;
350
+ collect: Record<string, boolean>;
351
+ negatable: Record<string, boolean>;
352
+ unknownFn: (arg: string, key?: string, value?: unknown) => unknown;
353
+ allBools: boolean;
354
+ }
355
+
356
+ interface NestedMapping {
357
+ [key: string]: NestedMapping | unknown;
358
+ }
359
+
360
+ const { hasOwn } = Object;
361
+
362
+ function get<TValue>(
363
+ obj: Record<string, TValue>,
364
+ key: string,
365
+ ): TValue | undefined {
366
+ if (hasOwn(obj, key)) {
367
+ return obj[key];
368
+ }
369
+ }
370
+
371
+ function getForce<TValue>(obj: Record<string, TValue>, key: string): TValue {
372
+ const v = get(obj, key);
373
+ assert(v != null);
374
+ return v;
375
+ }
376
+
377
+ function isNumber(x: unknown): boolean {
378
+ if (typeof x === "number") return true;
379
+ if (/^0x[0-9a-f]+$/i.test(String(x))) return true;
380
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(String(x));
381
+ }
382
+
383
+ function hasKey(obj: NestedMapping, keys: string[]): boolean {
384
+ let o = obj;
385
+ keys.slice(0, -1).forEach((key) => {
386
+ o = (get(o, key) ?? {}) as NestedMapping;
387
+ });
388
+
389
+ const key = keys[keys.length - 1];
390
+ return hasOwn(o, key);
391
+ }
392
+
393
+ /** Take a set of command line arguments, optionally with a set of options, and
394
+ * return an object representing the flags found in the passed arguments.
395
+ *
396
+ * By default, any arguments starting with `-` or `--` are considered boolean
397
+ * flags. If the argument name is followed by an equal sign (`=`) it is
398
+ * considered a key-value pair. Any arguments which could not be parsed are
399
+ * available in the `_` property of the returned object.
400
+ *
401
+ * By default, the flags module tries to determine the type of all arguments
402
+ * automatically and the return type of the `parse` method will have an index
403
+ * signature with `any` as value (`{ [x: string]: any }`).
404
+ *
405
+ * If the `string`, `boolean` or `collect` option is set, the return value of
406
+ * the `parse` method will be fully typed and the index signature of the return
407
+ * type will change to `{ [x: string]: unknown }`.
408
+ *
409
+ * Any arguments after `'--'` will not be parsed and will end up in `parsedArgs._`.
410
+ *
411
+ * Numeric-looking arguments will be returned as numbers unless `options.string`
412
+ * or `options.boolean` is set for that argument name.
413
+ *
414
+ * @example
415
+ * ```ts
416
+ * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts";
417
+ * const parsedArgs = parse(Deno.args);
418
+ * ```
419
+ *
420
+ * @example
421
+ * ```ts
422
+ * import { parse } from "https://deno.land/std@$STD_VERSION/flags/mod.ts";
423
+ * const parsedArgs = parse(["--foo", "--bar=baz", "./quux.txt"]);
424
+ * // parsedArgs: { foo: true, bar: "baz", _: ["./quux.txt"] }
425
+ * ```
426
+ */
427
+ export function parse<
428
+ TArgs extends Values<
429
+ TBooleans,
430
+ TStrings,
431
+ TCollectable,
432
+ TNegatable,
433
+ TDefaults,
434
+ TAliases
435
+ >,
436
+ TDoubleDash extends boolean | undefined = undefined,
437
+ TBooleans extends BooleanType = undefined,
438
+ TStrings extends StringType = undefined,
439
+ TCollectable extends Collectable = undefined,
440
+ TNegatable extends Negatable = undefined,
441
+ TDefaults extends Record<string, unknown> | undefined = undefined,
442
+ TAliases extends Aliases<TAliasArgNames, TAliasNames> | undefined = undefined,
443
+ TAliasArgNames extends string = string,
444
+ TAliasNames extends string = string,
445
+ >(
446
+ args: string[],
447
+ {
448
+ "--": doubleDash = false,
449
+ alias = {} as NonNullable<TAliases>,
450
+ boolean = false,
451
+ default: defaults = {} as TDefaults & Defaults<TBooleans, TStrings>,
452
+ stopEarly = false,
453
+ string = [],
454
+ collect = [],
455
+ negatable = [],
456
+ unknown = (i: string): unknown => i,
457
+ }: ParseOptions<
458
+ TBooleans,
459
+ TStrings,
460
+ TCollectable,
461
+ TNegatable,
462
+ TDefaults,
463
+ TAliases,
464
+ TDoubleDash
465
+ > = {},
466
+ ): Args<TArgs, TDoubleDash> {
467
+ const aliases: Record<string, string[]> = {};
468
+ const flags: Flags = {
469
+ bools: {},
470
+ strings: {},
471
+ unknownFn: unknown,
472
+ allBools: false,
473
+ collect: {},
474
+ negatable: {},
475
+ };
476
+
477
+ if (alias !== undefined) {
478
+ for (const key in alias) {
479
+ const val = getForce(alias, key);
480
+ if (typeof val === "string") {
481
+ aliases[key] = [val];
482
+ } else {
483
+ aliases[key] = val as Array<string>;
484
+ }
485
+ for (const alias of getForce(aliases, key)) {
486
+ aliases[alias] = [key].concat(aliases[key].filter((y) => alias !== y));
487
+ }
488
+ }
489
+ }
490
+
491
+ if (boolean !== undefined) {
492
+ if (typeof boolean === "boolean") {
493
+ flags.allBools = !!boolean;
494
+ } else {
495
+ const booleanArgs: ReadonlyArray<string> = typeof boolean === "string"
496
+ ? [boolean]
497
+ : boolean;
498
+
499
+ for (const key of booleanArgs.filter(Boolean)) {
500
+ flags.bools[key] = true;
501
+ const alias = get(aliases, key);
502
+ if (alias) {
503
+ for (const al of alias) {
504
+ flags.bools[al] = true;
505
+ }
506
+ }
507
+ }
508
+ }
509
+ }
510
+
511
+ if (string !== undefined) {
512
+ const stringArgs: ReadonlyArray<string> = typeof string === "string"
513
+ ? [string]
514
+ : string;
515
+
516
+ for (const key of stringArgs.filter(Boolean)) {
517
+ flags.strings[key] = true;
518
+ const alias = get(aliases, key);
519
+ if (alias) {
520
+ for (const al of alias) {
521
+ flags.strings[al] = true;
522
+ }
523
+ }
524
+ }
525
+ }
526
+
527
+ if (collect !== undefined) {
528
+ const collectArgs: ReadonlyArray<string> = typeof collect === "string"
529
+ ? [collect]
530
+ : collect;
531
+
532
+ for (const key of collectArgs.filter(Boolean)) {
533
+ flags.collect[key] = true;
534
+ const alias = get(aliases, key);
535
+ if (alias) {
536
+ for (const al of alias) {
537
+ flags.collect[al] = true;
538
+ }
539
+ }
540
+ }
541
+ }
542
+
543
+ if (negatable !== undefined) {
544
+ const negatableArgs: ReadonlyArray<string> = typeof negatable === "string"
545
+ ? [negatable]
546
+ : negatable;
547
+
548
+ for (const key of negatableArgs.filter(Boolean)) {
549
+ flags.negatable[key] = true;
550
+ const alias = get(aliases, key);
551
+ if (alias) {
552
+ for (const al of alias) {
553
+ flags.negatable[al] = true;
554
+ }
555
+ }
556
+ }
557
+ }
558
+
559
+ const argv: Args = { _: [] };
560
+
561
+ function argDefined(key: string, arg: string): boolean {
562
+ return (
563
+ (flags.allBools && /^--[^=]+$/.test(arg)) ||
564
+ get(flags.bools, key) ||
565
+ !!get(flags.strings, key) ||
566
+ !!get(aliases, key)
567
+ );
568
+ }
569
+
570
+ function setKey(
571
+ obj: NestedMapping,
572
+ name: string,
573
+ value: unknown,
574
+ collect = true,
575
+ ) {
576
+ let o = obj;
577
+ const keys = name.split(".");
578
+ keys.slice(0, -1).forEach(function (key) {
579
+ if (get(o, key) === undefined) {
580
+ o[key] = {};
581
+ }
582
+ o = get(o, key) as NestedMapping;
583
+ });
584
+
585
+ const key = keys[keys.length - 1];
586
+ const collectable = collect && !!get(flags.collect, name);
587
+
588
+ if (!collectable) {
589
+ o[key] = value;
590
+ } else if (get(o, key) === undefined) {
591
+ o[key] = [value];
592
+ } else if (Array.isArray(get(o, key))) {
593
+ (o[key] as unknown[]).push(value);
594
+ } else {
595
+ o[key] = [get(o, key), value];
596
+ }
597
+ }
598
+
599
+ function setArg(
600
+ key: string,
601
+ val: unknown,
602
+ arg: string | undefined = undefined,
603
+ collect?: boolean,
604
+ ) {
605
+ if (arg && flags.unknownFn && !argDefined(key, arg)) {
606
+ if (flags.unknownFn(arg, key, val) === false) return;
607
+ }
608
+
609
+ const value = !get(flags.strings, key) && isNumber(val) ? Number(val) : val;
610
+ setKey(argv, key, value, collect);
611
+
612
+ const alias = get(aliases, key);
613
+ if (alias) {
614
+ for (const x of alias) {
615
+ setKey(argv, x, value, collect);
616
+ }
617
+ }
618
+ }
619
+
620
+ function aliasIsBoolean(key: string): boolean {
621
+ return getForce(aliases, key).some(
622
+ (x) => typeof get(flags.bools, x) === "boolean",
623
+ );
624
+ }
625
+
626
+ let notFlags: string[] = [];
627
+
628
+ // all args after "--" are not parsed
629
+ if (args.includes("--")) {
630
+ notFlags = args.slice(args.indexOf("--") + 1);
631
+ args = args.slice(0, args.indexOf("--"));
632
+ }
633
+
634
+ for (let i = 0; i < args.length; i++) {
635
+ const arg = args[i];
636
+
637
+ if (/^--.+=/.test(arg)) {
638
+ const m = arg.match(/^--([^=]+)=(.*)$/s);
639
+ assert(m != null);
640
+ const [, key, value] = m;
641
+
642
+ if (flags.bools[key]) {
643
+ const booleanValue = value !== "false";
644
+ setArg(key, booleanValue, arg);
645
+ } else {
646
+ setArg(key, value, arg);
647
+ }
648
+ } else if (
649
+ /^--no-.+/.test(arg) && get(flags.negatable, arg.replace(/^--no-/, ""))
650
+ ) {
651
+ const m = arg.match(/^--no-(.+)/);
652
+ assert(m != null);
653
+ setArg(m[1], false, arg, false);
654
+ } else if (/^--.+/.test(arg)) {
655
+ const m = arg.match(/^--(.+)/);
656
+ assert(m != null);
657
+ const [, key] = m;
658
+ const next = args[i + 1];
659
+ if (
660
+ next !== undefined &&
661
+ !/^-/.test(next) &&
662
+ !get(flags.bools, key) &&
663
+ !flags.allBools &&
664
+ (get(aliases, key) ? !aliasIsBoolean(key) : true)
665
+ ) {
666
+ setArg(key, next, arg);
667
+ i++;
668
+ } else if (/^(true|false)$/.test(next)) {
669
+ setArg(key, next === "true", arg);
670
+ i++;
671
+ } else {
672
+ setArg(key, get(flags.strings, key) ? "" : true, arg);
673
+ }
674
+ } else if (/^-[^-]+/.test(arg)) {
675
+ const letters = arg.slice(1, -1).split("");
676
+
677
+ let broken = false;
678
+ for (let j = 0; j < letters.length; j++) {
679
+ const next = arg.slice(j + 2);
680
+
681
+ if (next === "-") {
682
+ setArg(letters[j], next, arg);
683
+ continue;
684
+ }
685
+
686
+ if (/[A-Za-z]/.test(letters[j]) && /=/.test(next)) {
687
+ setArg(letters[j], next.split(/=(.+)/)[1], arg);
688
+ broken = true;
689
+ break;
690
+ }
691
+
692
+ if (
693
+ /[A-Za-z]/.test(letters[j]) &&
694
+ /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)
695
+ ) {
696
+ setArg(letters[j], next, arg);
697
+ broken = true;
698
+ break;
699
+ }
700
+
701
+ if (letters[j + 1] && letters[j + 1].match(/\W/)) {
702
+ setArg(letters[j], arg.slice(j + 2), arg);
703
+ broken = true;
704
+ break;
705
+ } else {
706
+ setArg(letters[j], get(flags.strings, letters[j]) ? "" : true, arg);
707
+ }
708
+ }
709
+
710
+ const [key] = arg.slice(-1);
711
+ if (!broken && key !== "-") {
712
+ if (
713
+ args[i + 1] &&
714
+ !/^(-|--)[^-]/.test(args[i + 1]) &&
715
+ !get(flags.bools, key) &&
716
+ (get(aliases, key) ? !aliasIsBoolean(key) : true)
717
+ ) {
718
+ setArg(key, args[i + 1], arg);
719
+ i++;
720
+ } else if (args[i + 1] && /^(true|false)$/.test(args[i + 1])) {
721
+ setArg(key, args[i + 1] === "true", arg);
722
+ i++;
723
+ } else {
724
+ setArg(key, get(flags.strings, key) ? "" : true, arg);
725
+ }
726
+ }
727
+ } else {
728
+ if (!flags.unknownFn || flags.unknownFn(arg) !== false) {
729
+ argv._.push(flags.strings["_"] ?? !isNumber(arg) ? arg : Number(arg));
730
+ }
731
+ if (stopEarly) {
732
+ argv._.push(...args.slice(i + 1));
733
+ break;
734
+ }
735
+ }
736
+ }
737
+
738
+ for (const [key, value] of Object.entries(defaults)) {
739
+ if (!hasKey(argv, key.split("."))) {
740
+ setKey(argv, key, value);
741
+
742
+ if (aliases[key]) {
743
+ for (const x of aliases[key]) {
744
+ setKey(argv, x, value);
745
+ }
746
+ }
747
+ }
748
+ }
749
+
750
+ for (const key of Object.keys(flags.bools)) {
751
+ if (!hasKey(argv, key.split("."))) {
752
+ const value = get(flags.collect, key) ? [] : false;
753
+ setKey(
754
+ argv,
755
+ key,
756
+ value,
757
+ false,
758
+ );
759
+ }
760
+ }
761
+
762
+ for (const key of Object.keys(flags.strings)) {
763
+ if (!hasKey(argv, key.split(".")) && get(flags.collect, key)) {
764
+ setKey(
765
+ argv,
766
+ key,
767
+ [],
768
+ false,
769
+ );
770
+ }
771
+ }
772
+
773
+ if (doubleDash) {
774
+ argv["--"] = [];
775
+ for (const key of notFlags) {
776
+ argv["--"].push(key);
777
+ }
778
+ } else {
779
+ for (const key of notFlags) {
780
+ argv._.push(key);
781
+ }
782
+ }
783
+
784
+ return argv as Args<TArgs, TDoubleDash>;
785
+ }