inferred-types 1.0.0 → 1.1.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.
@@ -1,3 +1,4 @@
1
+
1
2
  //#region src/dictionary/MapTo.ts
2
3
  /**
3
4
  * utility function to take a fully-qualified _user_ config
@@ -212,5 +213,19 @@ let ExifSaturation = /* @__PURE__ */ function(ExifSaturation$1) {
212
213
  }({});
213
214
 
214
215
  //#endregion
215
- export { DEFAULT_MANY_TO_ONE_MAPPING, DEFAULT_ONE_TO_MANY_MAPPING, DEFAULT_ONE_TO_ONE_MAPPING, ExifCompression, ExifContrast, ExifEmbedPolicy, ExifFlashValues, ExifGainControl, ExifLightSource, ExifPreviewColorSpace, ExifSaturation, ExifSceneCaptureType, ExifSharpness, ExifSubjectDistance, MapCardinality };
216
- //# sourceMappingURL=index.mjs.map
216
+ exports.DEFAULT_MANY_TO_ONE_MAPPING = DEFAULT_MANY_TO_ONE_MAPPING;
217
+ exports.DEFAULT_ONE_TO_MANY_MAPPING = DEFAULT_ONE_TO_MANY_MAPPING;
218
+ exports.DEFAULT_ONE_TO_ONE_MAPPING = DEFAULT_ONE_TO_ONE_MAPPING;
219
+ exports.ExifCompression = ExifCompression;
220
+ exports.ExifContrast = ExifContrast;
221
+ exports.ExifEmbedPolicy = ExifEmbedPolicy;
222
+ exports.ExifFlashValues = ExifFlashValues;
223
+ exports.ExifGainControl = ExifGainControl;
224
+ exports.ExifLightSource = ExifLightSource;
225
+ exports.ExifPreviewColorSpace = ExifPreviewColorSpace;
226
+ exports.ExifSaturation = ExifSaturation;
227
+ exports.ExifSceneCaptureType = ExifSceneCaptureType;
228
+ exports.ExifSharpness = ExifSharpness;
229
+ exports.ExifSubjectDistance = ExifSubjectDistance;
230
+ exports.MapCardinality = MapCardinality;
231
+ //# sourceMappingURL=index.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["config: MapConfig<IR, D, OR>"],"sources":["../src/dictionary/MapTo.ts","../src/literals/VueRef.ts","../src/runtime-types/Dict.ts","../src/string-literals/character-sets/images/Exif.ts"],"sourcesContent":["import type {\n Dictionary,\n MergeObjects,\n OptRequired,\n} from \"inferred-types/types\";\n\n/**\n * utility function to take a fully-qualified _user_ config\n * and make it into a FinalizedMapConfig\n */\nfunction toFinalizedConfig<\n IR extends OptRequired,\n D extends MapCardinalityIllustrated,\n OR extends OptRequired,\n>(config: MapConfig<IR, D, OR>): FinalizedMapConfig<IR, D, OR> {\n return { ...config, finalized: true } as FinalizedMapConfig<IR, D, OR>;\n}\n\nexport const DEFAULT_ONE_TO_MANY_MAPPING = toFinalizedConfig({\n input: \"req\",\n output: \"opt\",\n cardinality: \"I -> O[]\",\n});\n\nexport const DEFAULT_ONE_TO_ONE_MAPPING = toFinalizedConfig({\n input: \"req\",\n output: \"req\",\n cardinality: \"I -> O\",\n});\n\nexport const DEFAULT_MANY_TO_ONE_MAPPING = toFinalizedConfig({\n input: \"req\",\n output: \"req\",\n cardinality: \"I[] -> O\",\n});\n\n/**\n * The _default_ One-to-Many mapping that the mapTo() utility provides\n */\nexport type DefaultOneToManyMapping = typeof DEFAULT_ONE_TO_MANY_MAPPING;\n\n/**\n * The _default_ One-to-One mapping that the mapTo() utility provides\n */\nexport type DefaultOneToOneMapping = typeof DEFAULT_ONE_TO_ONE_MAPPING;\n\n/**\n * The _default_ Many-to-One mapping that the mapTo() utility provides\n */\nexport type DefaultManyToOneMapping = typeof DEFAULT_MANY_TO_ONE_MAPPING;\n\n/**\n * Expresses relationship between inputs/outputs:\n */\nexport enum MapCardinality {\n /** every input results in 0:M outputs */\n OneToMany = \"I -> O[]\",\n /** every input results in 0:1 outputs */\n OneToOne = \"I -> O\",\n /** every input is an array of type I and reduced to a single O */\n ManyToOne = \"I[] -> O\",\n}\n\nexport type MapCardinalityIllustrated = `${string | number}`;\n\n/**\n * The _user_ configuration of a **mapTo** mapper function\n * which will be finalized by merging it with the appropriate\n * default mapping type.\n */\nexport interface MapConfig<\n IR extends OptRequired | undefined = undefined,\n D extends MapCardinalityIllustrated | undefined = undefined,\n OR extends OptRequired | undefined = undefined,\n> {\n input?: IR;\n output?: OR;\n cardinality?: D;\n /**\n * Whether calls to the final `MapFn` will be logged to stderr\n * for debugging purposes. Defaults to false; if you specify\n * a _string_ for a value that will be sent to stderr along\n * with other debugging info.\n */\n debug?: boolean | string;\n}\n\n/**\n * A finalized configuration of a **mapTo** mapper functions cardinality\n * relationships between _inputs_ and _outputs_.\n *\n * Note: _this configuration does _not_ yet include the actual mapping\n * configuration between the input and output._\n */\nexport type FinalizedMapConfig<\n IR extends OptRequired = MapIR<DefaultOneToManyMapping & string>,\n D extends MapCardinalityIllustrated = MapCard<DefaultOneToManyMapping>,\n OR extends OptRequired = MapOR<DefaultOneToManyMapping>,\n> = Required<Omit<MapConfig<IR, D, OR>, \"debug\">> & { finalized: true; debug: boolean | string };\n\n/**\n * User configuration exposed by a config function which specifies the\n * cardinality already (e.g., `oneToMany()`, `manyToOne()`)\n */\ninterface MapCardinalityConfig<\n IR extends OptRequired | undefined,\n OR extends OptRequired | undefined,\n> {\n /** whether we the input can _optionally_ be an `undefined` value or not */\n input?: IR;\n /** whether we the output can _optionally_ be an `undefined` value or not */\n output?: OR;\n /**\n * Whether calls to the final `MapFn` will be logged to stderr\n * for debugging purposes. Defaults to false; if you set to a string\n * value than this will be echoed out with stderr.\n */\n debug?: boolean | string;\n}\n\n/**\n * **ConfiguredMap**\n *\n * A partial application of the mapTo() utility which has expressed the\n * configuration of the _inputs_ and _outputs_ and provides a `.map()`\n * method which allows the user configure the specifics of the mapping.\n */\nexport interface ConfiguredMap<\n C extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> {\n map: <I, O>(map: MapTo<I, O, C>) => MapperOld<I, O, C>;\n input: MapIR<C>;\n cardinality: MapCard<C>;\n output: MapOR<C>;\n debug: boolean | string;\n}\n\n/**\n * Extracts the IR, Cardinality, and OR generics from a FinalizedMapConfig\n */\nexport type DecomposeMapConfig<\n M extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = M extends MapConfig<infer IR, infer D, infer OR>\n ? IR extends OptRequired | undefined\n ? D extends MapCardinalityIllustrated | undefined\n ? OR extends OptRequired | undefined\n ? [IR, D, OR]\n : never\n : never\n : never\n : M extends FinalizedMapConfig<infer IR, infer D, infer OR>\n ? IR extends OptRequired\n ? D extends MapCardinalityIllustrated\n ? OR extends OptRequired\n ? [IR, D, OR]\n : never\n : never\n : never\n : never;\n\n/** extracts IR from a `FinalizedMapConfig` */\nexport type MapIR<\n T extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = DecomposeMapConfig<T>[0];\n\n/**\n * extracts the MapCardinality from a `FinalizedMapConfig`\n */\nexport type MapCard<\n T extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = DecomposeMapConfig<T>[1];\n\n/** extracts OR from a `FinalizedMapConfig` */\nexport type MapOR<\n T extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = DecomposeMapConfig<T>[2];\n\n/**\n * Merges the types of a userland configuration with a default configuration\n */\nexport type AsFinalizedConfig<\n U extends MapConfig<\n OptRequired | undefined,\n MapCardinalityIllustrated | undefined,\n OptRequired | undefined\n >,\n D extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = MergeObjects<U & Dictionary, D> extends FinalizedMapConfig<infer IR, infer C, infer OR>\n ? FinalizedMapConfig<IR, C, OR>\n : never;\n\nexport interface MapperApi {\n /**\n * Provides opportunity to configure _input_, _output_, and _cardinality_\n * prior to providing a mapping function.\n *\n * Note: _the defaults for configuration are defined by the_ `DEFAULT_ONE_TO_MANY_MAPPING`\n * _constant made available as a symbol from this library._\n */\n config: <\n C extends MapConfig<\n OptRequired, //\n MapCardinalityIllustrated,\n OptRequired\n >,\n >(\n config: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultOneToManyMapping\n >\n >;\n\n /**\n * Provides a nice 1:1 ratio between the input and output.\n *\n * By default the input and output are considered to be _required_\n * properties but this can be changed with the options hash provided.\n * ```ts\n * const mapper = mapTo.oneToOne().map(...);\n * // add in ability to filter out some inputs\n * const mapAndFilter = mapTo.oneToOne({ output: \"opt\" })\n * ```\n */\n oneToOne: <C extends MapCardinalityConfig<OptRequired, OptRequired>>(\n config?: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultOneToOneMapping\n >\n >;\n\n /**\n * **manyToOne** _mapping_\n *\n * Provides a configuration where multiple inputs `I[]` will be mapped to a\n * single output `O`.\n *\n * Choosing this configuration will, by default, set both input and output\n * to be \"required\" but you can change this default if you so choose.\n */\n manyToOne: <\n C extends MapCardinalityConfig<\n OptRequired | undefined, //\n OptRequired | undefined\n >,\n >(\n config?: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultManyToOneMapping\n >\n >;\n\n oneToMany: <\n C extends MapCardinalityConfig<\n OptRequired | undefined, //\n OptRequired | undefined\n >,\n >(\n config?: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultOneToManyMapping\n >\n >;\n}\n\nexport type MapInput<\n I,\n IR extends OptRequired,\n C extends MapCardinalityIllustrated,\n> = C extends MapCardinality.OneToMany | \"I -> O[]\"\n ? IR extends \"opt\"\n ? I | undefined\n : I\n : C extends MapCardinality.OneToOne | \"I -> O\"\n ? IR extends \"opt\"\n ? I | undefined\n : I\n : C extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? IR extends \"opt\"\n ? I[] | undefined\n : I[]\n : never;\n\nexport type MapOutput<\n O,\n OR extends OptRequired,\n C extends MapCardinalityIllustrated,\n> = C extends MapCardinality.OneToMany | \"I -> O[]\"\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : C extends MapCardinality.OneToOne | \"I -> O\"\n ? OR extends \"opt\"\n ? O | null\n : O\n : C extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? OR extends \"opt\"\n ? O | null\n : O\n : never;\n\n/**\n * **MapTo<I, O>**\n *\n * A mapping function between an input type `I` and output type `O`. Defaults to using\n * the _default_ OneToMany mapping config.\n *\n * **Note:** this type is designed to guide the userland mapping; refer\n * to `MapFn` if you want the type output by the `mapFn()` utility.\n */\nexport type MapTo<\n I,\n O,\n C extends FinalizedMapConfig<\n OptRequired,\n MapCardinalityIllustrated,\n OptRequired\n > = DefaultOneToManyMapping,\n> = MapIR<C> extends \"opt\"\n ? (source?: MapInput<I, MapIR<C>, MapCard<C>>) => MapOutput<O, MapOR<C>, MapCard<C>>\n : (source: MapInput<I, MapIR<C>, MapCard<C>>) => MapOutput<O, MapOR<C>, MapCard<C>>;\n\nexport type MapFnOutput<\n I,\n O,\n S,\n OR extends OptRequired,\n C extends MapCardinalityIllustrated,\n> = C extends \"I -> O[]\" | MapCardinality.OneToMany\n ? S extends I[]\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : OR extends \"opt\"\n ? O[] | null\n : O[]\n : C extends MapCardinality.OneToOne | \"I -> O\"\n ? S extends I[]\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : OR extends \"opt\"\n ? O | null\n : O\n : C extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? S extends I[][]\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : OR extends \"opt\"\n ? O | null\n : O\n : never;\n\nexport type MapFnInput<I, IR extends OptRequired, D extends MapCardinalityIllustrated> = D extends\n | \"I -> O[]\"\n | MapCardinality.OneToMany\n ? IR extends \"opt\"\n ? I | I[] | undefined\n : I | I[]\n : D extends MapCardinality.OneToOne | \"I -> O\"\n ? IR extends \"opt\"\n ? I | I[] | undefined\n : I | I[]\n : D extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? IR extends \"opt\"\n ? I[] | I[][] | undefined\n : I[] | I[][]\n : never;\n\n/**\n * The mapping function provided by the `mapFn()` utility. This _fn_\n * is intended to be used in two ways:\n *\n * 1. Iterative:\n * ```ts\n * const m = mapTo<I,O>(i => [ ... ]);\n * // maps inputs to outputs\n * const out = inputs.map(m);\n * ```\n * 2. Block:\n * ```ts\n * // maps inputs to outputs (filtering or splitting where appr.)\n * const out2 = m(inputs);\n * ```\n */\nexport type MapFn<\n I,\n O,\n C extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = MapIR<C> extends \"opt\"\n ? <S extends MapFnInput<I, MapIR<C>, MapCard<C>>>(\n source?: S\n ) => MapFnOutput<I, O, S, MapOR<C>, MapCard<C>>\n : <S extends MapFnInput<I, MapIR<C>, MapCard<C>>>(\n source: S\n ) => MapFnOutput<I, O, S, MapOR<C>, MapCard<C>>;\n\n/**\n * **Mapper**\n *\n * A fully configured _mapper_ stemming from the **mapTo()** utility. It is both a mapping\n * function and a dictionary which describes the mapper's properties.\n * ```ts\n * const m = mapTo.oneToOne().map( ... );\n * const mapped = m(inputs);\n * const mappedOver = inputs.map(m);\n * ```\n *\n * Note: the root of a `Mapper` is the mapper function but\n * this is combined with a dictionary of settings and types\n * which you can use. For instance, look at the `fnSignature`\n * property to get the _type_ signature of the map function.\n */\nexport type MapperOld<\n I = unknown,\n O = unknown,\n C extends FinalizedMapConfig<\n OptRequired,\n MapCardinalityIllustrated,\n OptRequired\n > = FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = {\n input: MapIR<C>;\n output: MapOR<C>;\n cardinality: MapCard<C>;\n debug: boolean | string;\n inputType: I;\n outputType: O;\n /**\n * Provides the _type_ information for mapper function.\n *\n * Note: _this is just a **type**_ not the actual function which positioned\n * at the root of the Mapper type\n */\n fnSignature: MapFn<I, O, C>;\n} & MapFn<I, O, C>;\n\n/**\n * **MapInputFrom**\n *\n * Type utility which extracts the `I` type from a fully configured `Mapper`\n */\nexport type MapInputFrom<T extends MapperOld> = T extends MapperOld<infer I> ? I : never;\n\n/**\n * **MapOutputFrom**\n *\n * Type utility which extracts the output [`O`] type from a fully configured `Mapper`\n */\n\nexport type MapOutputFrom<T extends MapperOld> = T extends MapperOld<any, infer O> ? O : never;\n\n/**\n * **MapCardinalityFrom**\n *\n * Type utility which extracts _cardinality_ of a `Mapper`'s inputs to outputs\n */\n\nexport type MapCardinalityFrom<T extends MapperOld> = T extends MapperOld<any, any, infer C>\n ? C extends FinalizedMapConfig<OptRequired, infer Cardinality, OptRequired>\n ? Cardinality\n : never\n : never;\n","const Ref = Symbol(\"VueRef\");\n\n/**\n * **VueRef**`<T>`\n *\n * Intended to be the same type as VueJS's `Ref<T>` but without the need\n * to include any of the VueJS framework in deps.\n *\n * **Notes:**\n *\n * - a real `Ref<T>` has both the `value` property and a _private_ symbol\n * exposed to the runtime as a type (but the type is intentionally not exported).\n * - whenever using this type, please use it with `IsRef()`,`isRef()` utils\n *\n * **Related:**\n *\n * - `IsRef<T>`, `isRef()`, `VueComputedRef<T>`\n */\nexport interface VueRef<T = any> {\n [Ref]: \"VueRef\";\n value: T;\n}\n","import type { Constant } from \"inferred-types/constants\";\nimport type {\n AfterFirst,\n Contains,\n Dictionary,\n EmptyObject,\n ExpandDictionary,\n First,\n MakeKeysOptional,\n RemoveMarked,\n Widen,\n} from \"inferred-types/types\";\n\nconst s = Symbol(\"Dict\");\n\n/**\n * **Dict**`<T, ID>`\n *\n * A nominal replacement for Javascript object's with precisely\n * the same functionality but with a hashed type which allows\n * use of `let` instead of `const` for object definitions due\n * to the type not being able to be reassigned.\n */\nexport type Dict<T extends Dictionary = EmptyObject, ID extends string = string> = {\n [s]: ID;\n} & T;\n\nexport type OptDictProps<\n T extends readonly string[],\n> = RemoveMarked<{\n [K in keyof T]: T[K] extends `opt:${infer Prop}`\n ? Prop extends string\n ? Prop\n : Constant<\"Marked\">\n : Constant<\"Marked\">\n}>;\n\nexport type NarrowDictProps<\n T extends readonly string[],\n> = [] extends T\n ? T\n : RemoveMarked<{\n [K in keyof T]: T[K] extends `opt:${string}`\n ? Constant<\"Marked\">\n : T[K]\n }>;\n\nexport type CreateDictShape<\n TObj extends Dictionary,\n TKeys extends readonly (string & keyof TObj)[],\n TNarrow extends readonly string[],\n TOpt extends readonly string[],\n TResult extends Dictionary = EmptyObject,\n> = [] extends TKeys\n ? OptDictProps<TKeys> extends readonly string[]\n ? MakeKeysOptional<\n ExpandDictionary<TResult>,\n TOpt\n >\n\n : never\n : CreateDictShape<\n TObj,\n AfterFirst<TKeys>,\n TNarrow,\n TOpt,\n TResult & Record<\n First<TKeys>,\n Contains<TNarrow, First<TKeys>> extends true\n ? TObj[First<TKeys>]\n : Widen<TObj[First<TKeys>]>\n >\n >;\n\nexport type CreateDictHash<\n TValues extends readonly unknown[],\n TNarrowProps extends readonly string[],\n TOpt extends readonly string[],\n> = `${TValues[\"length\"]}${TNarrowProps[\"length\"]}${TOpt[\"length\"]}`;\n","import type { EmptyObject } from \"inferred-types/types\";\n\nexport enum ExifCompression {\n Uncompressed = 1,\n CCITT = 2,\n T4Group3Fax = 3,\n T6Group3Fax = 4,\n LZW = 5,\n JpgOldStyle = 6,\n Jpg = 7,\n AdobeDeflate = 8,\n JBigBw = 9,\n JBigColor = 10,\n JpegAlt = 99,\n Kodak262 = 262,\n Next = 32766,\n SonyRawCompressed = 32767,\n PackedRaw = 32769,\n SamsungSrwCompressed = 32770,\n CCIRLEW = 32771,\n SamsungSrwCompressed2 = 32772,\n Packbits = 32773,\n Thunderscan = 32809,\n KodakKdcCompressed = 32867,\n IT8CTPAD = 32895,\n IT8LW = 32896,\n IT8MP = 32897,\n IT8BL = 32898,\n PixarFilm = 32908,\n PixarLog = 32909,\n Deflate = 32946,\n DCS = 32947,\n AperioJpeg2000YCbCr = 33003,\n AperioJpeg2000RGB = 33005,\n JBig = 34661,\n SGILog = 34676,\n SGILog24 = 34677,\n Jpeg2000 = 34712,\n NikonNEFCompressed = 34713,\n JBig2TiffFx = 34715,\n MicrosoftBinaryLevelCodec = 34718,\n MicrosoftProgressiveTransformCodec = 34719,\n MicrosoftVector = 34720,\n ESRCLerc = 34887,\n LossyJpeg = 34892,\n LZMA2 = 34925,\n Zstd = 34926,\n WepP = 34927,\n PNG = 34933,\n JpegXR = 34934,\n KodakDCRCompressed = 65000,\n PentaxPEFCompressed = 65535,\n}\n\nexport enum ExifLightSource {\n Unknown = 0,\n Daylight,\n Fluorescent,\n Tungsten,\n Flash,\n FineWeather,\n Cloudy,\n Shade,\n DaylightFluorescent,\n DayWhiteFluorescent,\n CoolWhiteFluorescent,\n WhiteFluorescent,\n WarmWhiteFluorescent,\n StandardLightA,\n StandardLightB,\n StandardLightC,\n D55,\n D65,\n D75,\n D50,\n ISOStudioTungsten,\n Other = 255,\n}\n\nexport enum ExifFlashValues {\n NoFlash = 0x0,\n Fired = 0x1,\n FiredReturnNotDetected = 0x5,\n FiredReturnDetected = 0x7,\n OnDidNotFire = 0x8,\n OnFired = 0x9,\n OnReturnNotDetected = 0xD,\n OnReturnDetected = 0xF,\n OffDidNotFire = 0x10,\n OffDidNotFireReturnNotDetected = 0x14,\n AutoDidNotFire = 0x18,\n AutoFired = 0x19,\n AutoFiredReturnNotDetected = 0x1D,\n AutoFiredReturnDetected = 0x1F,\n NoFlashFunction = 0x20,\n OffNoFlashFunction = 0x30,\n FiredRedEyeReduction = 0x41,\n FiredRedEyeReductionReturnNotDetected = 0x45,\n FiredRedEyeReductionReturnDetected = 0x47,\n OnRedEyeReduction = 0x49,\n OnRedEyeReductionReturnNotDetected = 0x4D,\n OnRedEyeReductionReturnDetected = 0x4F,\n OffRedEyeReduction = 0x50,\n AutoDidNotFireRedEyeReduction = 0x58,\n AutoFiredRedEyeReduction = 0x59,\n AutoFiredRedEyeReductionNotDetected = 0x60,\n AutoFiredRedEyeReductionDetected = 0x5D,\n}\n\nexport enum ExifPreviewColorSpace {\n Unknown = 0,\n GrayGamma22,\n sRGB,\n AdobeRGB,\n ProPhotoRGB,\n}\n\nexport enum ExifEmbedPolicy {\n AllowCopying = 0,\n EmbedIfUsed,\n NeverEmbed,\n NoRestrictions,\n}\n\nexport enum ExifSubjectDistance {\n Unknown = 0,\n Macro,\n Close,\n Distant,\n}\n\nexport enum ExifSharpness {\n Normal = 0,\n Soft,\n Hard,\n}\n\nexport enum ExifSceneCaptureType {\n Standard = 0,\n Landscape,\n Portrait,\n Night,\n Other,\n}\n\nexport enum ExifGainControl {\n None = 0,\n LowGainUp,\n HighGainUp,\n LowGainDown,\n HighGainDown,\n}\n\nexport enum ExifContrast {\n Normal = 0,\n Low,\n High,\n}\n\nexport enum ExifSaturation {\n Normal = 0,\n Low,\n High,\n}\n\n/**\n * Extraneous info in an EXIF metadata payload. Detailed info\n * can be found on all fields here: [EXIF Tags](https://exiftool.org/TagNames/EXIF.html)\n */\nexport type ExifExtraneous<T extends object = EmptyObject> = {\n /** [ `0x0001` ] */\n InteropIndex: string;\n // InteropVersion:\n\n /**\n * called NewSubfileType by TIFF specification.\n * [More](https://exiftool.org/TagNames/EXIF.html).\n */\n SubfileType: number;\n} & T;\n\n/**\n * Date and Time info found in EXIF payload. Detailed info\n * can be found on all fields here: [EXIF Tags](https://exiftool.org/TagNames/EXIF.html)\n */\nexport type ExifDateTimeInfo<T extends object = EmptyObject> = {\n ModifyDate: string;\n OffsetTime: string;\n /** The date created; formal EXIF property is `DateTimeDigitized` */\n CreateDate: string;\n /** Formal EXIF property for created date */\n DateTimeDigitized: string;\n /**\n * 1 or 2 values:\n *\n * 1. The time zone offset of DateTimeOriginal from GMT in hours,\n * 2. If present, the time zone offset of ModifyDate\n */\n TimeZoneOffset: number | [number, number];\n OffsetTimeDigitized: string;\n /** fractional seconds for ModifyDate */\n SubSecTime: string;\n /** fractional seconds for DateTimeOriginal */\n SubSecTimeOriginal: string;\n /** fractional seconds for CreateDate */\n SubSecTimeDigitized: string;\n} & T;\n\n/**\n * Information regarding attribution found in EXIF payload. Detailed info\n * can be found on all fields here: [EXIF Tags](https://exiftool.org/TagNames/EXIF.html)\n */\nexport type ExifAttributionInfo<T extends object = EmptyObject> = {\n Copyright: string;\n /** becomes a list-type tag when the MWG module is loaded */\n Artist: string;\n /** called `CameraOwnerName` by the EXIF spec */\n OwnerName: string;\n CameraOwnerName: string;\n /** called `BodySerialNumber` by the EXIF spec */\n SerialNumber: string;\n BodySerialNumber: string;\n LensSerialNumber: string;\n HostComputer: string;\n} & T;\n\nexport type ExifCameraInfo<T extends object = EmptyObject> = {\n Make: string;\n Model: string;\n UniqueCameraModel: string;\n LocalizedCameraModel: string;\n LensMake: string;\n LensModel: string;\n /**\n * 4 rational values giving focal and aperture ranges,\n * called `LensSpecification` by the EXIF spec.\n */\n LensInfo: [number, number, number, number];\n LensSpecification: [number, number, number, number];\n\n /** used by some obscure software */\n OriginalFileName: string;\n OriginalRawFileName: string;\n ReelName: string;\n\n Orientation: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n ImageWidth: number;\n ExifImageWidth: number;\n ImageHeight: number;\n ExifImageHeight: number;\n BitsPerSample: number;\n\n /**\n * Details on compression values can be found here:\n * [Compression Values](https://exiftool.org/TagNames/EXIF.html#Compression).\n *\n * You may reference as a number or leverage the exposed `ExifCompression`\n * enumeration for more contextual info.\n */\n Compression: number;\n\n /**\n * - `1` - No dithering or half-toning\n * - `2` - Ordered dither or halftone\n * - `3` - Randomized dither\n */\n Thresholding: 1 | 2 | 3;\n\n /**\n * - `1` - Normal\n * - `2` - Reversed\n */\n FillOrder: 1 | 2;\n\n /**\n * - `0` - WhiteIsZero\n * - `1` - BlackIsZero\n * - `2` - RGB\n * - `3` - RGB Palette\n * - `4` - Transparency Mask\n *\n * For full list reference [docs](https://exiftool.org/TagNames/EXIF.html)\n */\n PhotometricInterpretation: number;\n\n SceneCaptureType: ExifSceneCaptureType;\n GainControl: ExifGainControl;\n Contrast: ExifContrast | string;\n Saturation: ExifSaturation;\n Sharpness: ExifSharpness | string;\n\n /**\n * Applies to **EXIF:ISO** tag:\n *\n * - `0` - Unknown\n * - `1` - Standard Output Sensitivity\n * - `2` - Recommended Exposure Index\n * - `3` - ISO Speed\n * - `4` - Standard Output Sensitivity and Recommended Exposure Index\n * - `5` - Standard Output Sensitivity and ISO Speed\n * - `6` - Recommended Exposure Index and ISO Speed\n * - `7` - Standard Output Sensitivity, Recommended Exposure Index and ISO Speed\n */\n SensitivityType: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;\n StandardOutputSensitivity: number;\n RecommendedExposureIndex: number;\n /**\n * called `ISOSpeedRatings` by EXIF 2.2, then `PhotographicSensitivity` by the EXIF 2.3 spec.\n */\n ISO: number;\n ISOSpeed: number;\n Exposure: string;\n ExposureIndex: number;\n Shadows: string;\n Brightness: string;\n Smoothness: string;\n MoireFilter: string;\n\n /**\n * - `0` - Unknown\n * - `1` - Average\n * - `2` - Center-weighted average\n * - `3` - Spot\n * - `4` - Multi-spot\n * - `5` - Multi-segment\n * - `6` - Partial\n * - `255` - Other\n */\n MeteringMode: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 255;\n\n /**\n * - `0` - Auto\n * - `1` - Manual\n * - `2` - Auto bracket\n */\n ExposureMode: 0 | 1 | 2;\n\n /**\n * Only values `0` and `1` are to the EXIF spec but Apple IOS devices use all\n *\n * - `0` - Normal\n * - `1` - Custom\n * - `2` - HDR (no original saved)\n * - `3` - HDR (original saved)\n * - `4` - Original (for HDR)\n * - `6` - Panorama\n * - `7` - Portrait HDR\n * - `8` - Portrait\n */\n CustomRendered: 0 | 1 | 2 | 3 | 4 | 6 | 7 | 8;\n\n LightSource: ExifLightSource;\n Flash: ExifFlashValues;\n FlashEnergy: number;\n\n SubjectDistance: number;\n SubjectDistanceRange: ExifSubjectDistance;\n SubjectLocation: [number, number];\n DepthNear: number;\n DepthFar: number;\n DepthMeasureType: 0 | 1 | 2;\n\n DigitalZoomRatio: number;\n FocalLengthIn35mmFormat: number;\n FocalLength: number;\n\n /**\n * - `0x1` - sRGB\n * - `0x2` - Adobe RGB\n * - `0xfffd` - Wide Gamut RGB\n * - `0xfffe` - ICC Profile\n * - `0xffff` - Uncalibrated\n *\n * Note: the value of `0x2` is not standard EXIF. Instead, an Adobe RGB image\n * is indicated by \"Uncalibrated\" with an InteropIndex of \"R03\". The values\n * 0xfffd and 0xfffe are also non-standard, and are used by some Sony cameras.\n */\n Colorspace: 0x1 | 0x2 | 0xFFFD | 0xFFFE | 0xFFFF;\n Gamma: number;\n /**\n * The actual `PixelFormat` values are 16-byte GUID's but the leading 15 bytes,\n * '6fddc324-4e03-4bfe-b1853-d77768dc9', have been removed below to avoid\n * unnecessary clutter:\n *\n * - `0x5` = Black & White\n * - `0x8` = 8-bit Gray\n * - `0x9` = 16-bit BGR555\n * - `0xa` = 16-bit BGR565\n * - `0xb` = 16-bit Gray\n * - `0xc` = 24-bit BGR\n * - `0xd` = 24-bit RGB\n * - `0xe` = 32-bit BGR\n * - `0xf` = 32-bit BGRA\n * - `0x10` = 32-bit PBGRA\n * - `0x11` = 32-bit Gray Float\n * - `0x12` = 48-bit RGB Fixed Point\n * - `0x13` = 32-bit BGR101010\n * - `0x15` = 48-bit RGB\n * - `0x16` = 64-bit RGBA\n * - `0x17` = 64-bit PRGBA\n * - `0x18` = 96-bit RGB Fixed Point\n * - `0x19` = 128-bit RGBA Float\n * - `0x1a` = 128-bit PRGBA Float\n * - `0x1b` = 128-bit RGB Float\n * - `0x1c` = 32-bit CMYK\n * - `0x1d` = 64-bit RGBA Fixed Point\n * - `0x1e` = 128-bit RGBA Fixed Point\n * - `0x1f` = 64-bit CMYK\n * - `0x20` = 24-bit 3 Channels\n * - `0x21` = 32-bit 4 Channels\n * - `0x22` = 40-bit 5 Channels\n * - `0x23` = 48-bit 6 Channels\n * - `0x24` = 56-bit 7 Channels\n * - `0x25` = 64-bit 8 Channels\n * - `0x26` = 48-bit 3 Channels\n * - `0x27` = 64-bit 4 Channels\n * - `0x28` = 80-bit 5 Channels\n * - `0x29` = 96-bit 6 Channels\n * - `0x2a` = 112-bit 7 Channels\n * - `0x2b` = 128-bit 8 Channels\n * - `0x2c` = 40-bit CMYK Alpha\n * - `0x2d` = 80-bit CMYK Alpha\n * - `0x2e` = 32-bit 3 Channels Alpha\n * - `0x2f` = 40-bit 4 Channels Alpha\n * - `0x30` = 48-bit 5 Channels Alpha\n * - `0x31` = 56-bit 6 Channels Alpha\n * - `0x32` = 64-bit 7 Channels Alpha\n * - `0x33` = 72-bit 8 Channels Alpha\n * - `0x34` = 64-bit 3 Channels Alpha\n * - `0x35` = 80-bit 4 Channels Alpha\n * - `0x36` = 96-bit 5 Channels Alpha\n * - `0x37` = 112-bit 6 Channels Alpha\n * - `0x38` = 128-bit 7 Channels Alpha\n * - `0x39` = 144-bit 8 Channels Alpha\n * - `0x3a` = 64-bit RGBA Half\n * - `0x3b` = 48-bit RGB Half\n * - `0x3d` = 32-bit RGBE\n * - `0x3e` = 16-bit Gray Half\n * - `0x3f` = 32-bit Gray Fixed Point\n *\n * > NOTE: tags 0xbc** are used in Windows HD Photo (HDP and WDP) images\n `\n */\n PixelFormat: number;\n\n /**\n * - `0` - Horizontal (normal)\n * - `1` - Mirror vertical\n * - `2` - Mirror horizontal\n * - `3` - Rotate 180\n * - `4` - Rotate 90 CW\n * - `5` - Mirror horizontal and rotate 90 CW\n * - `6` - Mirror horizontal and rotate 270 CW\n * - `7` - Rotate 270 CW\n */\n Transformation: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n Whitebalance: number;\n\n BrightnessValue: number;\n /** Used but EXIF standard is `ExposureBiasValue` */\n ExposureCompensation: number;\n /** EXIF standard for Exposure bias */\n ExposureBiasValue: number;\n\n /** displayed in seconds, but stored as an APEX value */\n ShutterSpeedValue: number;\n /** displayed as an F number, but stored as an APEX value */\n ApertureValue: number;\n /** displayed as an F number, but stored as an APEX value */\n MaxApertureValue: number;\n\n EnhanceParams: string;\n\n /**\n *\n */\n FileSource: 1 | 2 | 3 | \"\\x03\\x00\\x00\\x00\";\n\n /**\n * Ambient temperature in degrees C, called `Temperature` by the EXIF spec\n */\n AmbientTemperature: number;\n /** Ambient temperature in degrees C */\n Temperature: number;\n Humidity: number;\n Pressure: number;\n WaterDepth: number;\n Acceleration: number;\n CameraElevationAngle: number;\n} & T;\n\nexport type ExifPhotoContext<T extends object = EmptyObject> = {\n ImageDescription: string;\n DocumentName: string;\n UserComment: string;\n\n Annotations: string;\n XPSubject: number;\n XPKeywords: number;\n XPAuthor: number;\n XPComments: number;\n\n Rating: number;\n RatingPercent: number;\n} & T;\n\n/**\n * Typing for GPS properties that are part of EXIF spec.\n * Details can be found: [here](https://exiftool.org/TagNames/GPS.html).\n */\nexport interface ExifGps {\n GPSVersionID: number;\n GPSLatitudeRef: \"N\" | \"S\";\n GPSLatitude: number;\n GPSLongitudeRef: \"E\" | \"W\";\n GPSLongitude: number;\n /**\n * - `0` is above sea level\n * - `1` is below sea level\n */\n GPSAltitudeRef: 0 | 1;\n GPSAltitude: number;\n /**\n * UTC time of GPS fix. When writing, date is stripped off if present,\n * and time is adjusted to UTC if it includes a timezone\n */\n GPSTimeStamp: string;\n GPSSatellites: string;\n GPSStatus: \"A\" | \"V\";\n GPSMeasureMode: \"2\" | \"3\";\n /**\n * - `K` - km/h\n * - `M` - mph\n * - `N` = knots\n */\n GPSSpeedRef: \"K\" | \"M\" | \"N\";\n GPSSpeed: number;\n GPSTrack: number;\n GPSImgDirectionRef: \"M\" | \"T\";\n GPSImgDirection: number;\n GPSMapDatum: string;\n GPSDestLatitudeRef: \"N\" | \"S\";\n GPSDestLatitude: number;\n GPSDestLongitudeRef: \"N\" | \"S\";\n GPSDestLongitude: number;\n GPSDestBearingRef: \"M\" | \"T\";\n GPSDestBearing: number;\n /**\n * - `K` - Kilometers\n * - `M` - Miles\n * - `N` = Nautical Miles\n */\n GPSDestDistanceRef: \"K\" | \"M\" | \"N\";\n GPSDestDistance: number;\n GPSProcessingMethod: \"GPS\" | \"CELLID\" | \"WLAN\" | \"MANUAL\";\n GPSAreaInformation: string;\n /**\n * When writing, time is stripped off if present, after adjusting\n * date/time to UTC if time includes a timezone. Format is `YYYY:mm:dd`.\n */\n GPSDateStamp: `${number}:${number}:${number}`;\n /**\n * `0` - no correction\n * `1` - differential corrected\n */\n GPSDifferential: 0 | 1;\n GPSHPositioningError: number;\n}\n/**\n * EXIF metadata payload fields.\n * Detailed info can be found here:\n * [EXIF Tags](https://exiftool.org/TagNames/EXIF.html).\n */\nexport type Exif<T extends object = EmptyObject> = Partial<\n ExifAttributionInfo\n & ExifCameraInfo\n & ExifDateTimeInfo\n & ExifGps\n & ExifExtraneous\n & ExifPhotoContext\n>\n& T;\n"],"mappings":";;;;;AAUA,SAAS,kBAIPA,QAA6D;AAC3D,QAAO;EAAE,GAAG;EAAQ,WAAW;CAAM;AACxC;AAED,MAAa,8BAA8B,kBAAkB;CACzD,OAAO;CACP,QAAQ;CACR,aAAa;AAChB,EAAC;AAEF,MAAa,6BAA6B,kBAAkB;CACxD,OAAO;CACP,QAAQ;CACR,aAAa;AAChB,EAAC;AAEF,MAAa,8BAA8B,kBAAkB;CACzD,OAAO;CACP,QAAQ;CACR,aAAa;AAChB,EAAC;;;;AAoBF,IAAY,4DAAL;;AAEH;;AAEA;;AAEA;;AACH;;;;AC7DD,MAAM,MAAM,OAAO,SAAS;;;;ACa5B,MAAM,IAAI,OAAO,OAAO;;;;ACXxB,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,0EAAL;AACH;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;;AACH;AAED,IAAY,sEAAL;AACH;AACA;AACA;AACA;;AACH;AAED,IAAY,0DAAL;AACH;AACA;AACA;;AACH;AAED,IAAY,wEAAL;AACH;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,wDAAL;AACH;AACA;AACA;;AACH;AAED,IAAY,4DAAL;AACH;AACA;AACA;;AACH"}
1
+ {"version":3,"file":"index.cjs","names":["config: MapConfig<IR, D, OR>"],"sources":["../src/dictionary/MapTo.ts","../src/literals/VueRef.ts","../src/runtime-types/Dict.ts","../src/string-literals/character-sets/images/Exif.ts"],"sourcesContent":["import type {\n Dictionary,\n MergeObjects,\n OptRequired,\n} from \"inferred-types/types\";\n\n/**\n * utility function to take a fully-qualified _user_ config\n * and make it into a FinalizedMapConfig\n */\nfunction toFinalizedConfig<\n IR extends OptRequired,\n D extends MapCardinalityIllustrated,\n OR extends OptRequired,\n>(config: MapConfig<IR, D, OR>): FinalizedMapConfig<IR, D, OR> {\n return { ...config, finalized: true } as FinalizedMapConfig<IR, D, OR>;\n}\n\nexport const DEFAULT_ONE_TO_MANY_MAPPING = toFinalizedConfig({\n input: \"req\",\n output: \"opt\",\n cardinality: \"I -> O[]\",\n});\n\nexport const DEFAULT_ONE_TO_ONE_MAPPING = toFinalizedConfig({\n input: \"req\",\n output: \"req\",\n cardinality: \"I -> O\",\n});\n\nexport const DEFAULT_MANY_TO_ONE_MAPPING = toFinalizedConfig({\n input: \"req\",\n output: \"req\",\n cardinality: \"I[] -> O\",\n});\n\n/**\n * The _default_ One-to-Many mapping that the mapTo() utility provides\n */\nexport type DefaultOneToManyMapping = typeof DEFAULT_ONE_TO_MANY_MAPPING;\n\n/**\n * The _default_ One-to-One mapping that the mapTo() utility provides\n */\nexport type DefaultOneToOneMapping = typeof DEFAULT_ONE_TO_ONE_MAPPING;\n\n/**\n * The _default_ Many-to-One mapping that the mapTo() utility provides\n */\nexport type DefaultManyToOneMapping = typeof DEFAULT_MANY_TO_ONE_MAPPING;\n\n/**\n * Expresses relationship between inputs/outputs:\n */\nexport enum MapCardinality {\n /** every input results in 0:M outputs */\n OneToMany = \"I -> O[]\",\n /** every input results in 0:1 outputs */\n OneToOne = \"I -> O\",\n /** every input is an array of type I and reduced to a single O */\n ManyToOne = \"I[] -> O\",\n}\n\nexport type MapCardinalityIllustrated = `${string | number}`;\n\n/**\n * The _user_ configuration of a **mapTo** mapper function\n * which will be finalized by merging it with the appropriate\n * default mapping type.\n */\nexport interface MapConfig<\n IR extends OptRequired | undefined = undefined,\n D extends MapCardinalityIllustrated | undefined = undefined,\n OR extends OptRequired | undefined = undefined,\n> {\n input?: IR;\n output?: OR;\n cardinality?: D;\n /**\n * Whether calls to the final `MapFn` will be logged to stderr\n * for debugging purposes. Defaults to false; if you specify\n * a _string_ for a value that will be sent to stderr along\n * with other debugging info.\n */\n debug?: boolean | string;\n}\n\n/**\n * A finalized configuration of a **mapTo** mapper functions cardinality\n * relationships between _inputs_ and _outputs_.\n *\n * Note: _this configuration does _not_ yet include the actual mapping\n * configuration between the input and output._\n */\nexport type FinalizedMapConfig<\n IR extends OptRequired = MapIR<DefaultOneToManyMapping & string>,\n D extends MapCardinalityIllustrated = MapCard<DefaultOneToManyMapping>,\n OR extends OptRequired = MapOR<DefaultOneToManyMapping>,\n> = Required<Omit<MapConfig<IR, D, OR>, \"debug\">> & { finalized: true; debug: boolean | string };\n\n/**\n * User configuration exposed by a config function which specifies the\n * cardinality already (e.g., `oneToMany()`, `manyToOne()`)\n */\ninterface MapCardinalityConfig<\n IR extends OptRequired | undefined,\n OR extends OptRequired | undefined,\n> {\n /** whether we the input can _optionally_ be an `undefined` value or not */\n input?: IR;\n /** whether we the output can _optionally_ be an `undefined` value or not */\n output?: OR;\n /**\n * Whether calls to the final `MapFn` will be logged to stderr\n * for debugging purposes. Defaults to false; if you set to a string\n * value than this will be echoed out with stderr.\n */\n debug?: boolean | string;\n}\n\n/**\n * **ConfiguredMap**\n *\n * A partial application of the mapTo() utility which has expressed the\n * configuration of the _inputs_ and _outputs_ and provides a `.map()`\n * method which allows the user configure the specifics of the mapping.\n */\nexport interface ConfiguredMap<\n C extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> {\n map: <I, O>(map: MapTo<I, O, C>) => MapperOld<I, O, C>;\n input: MapIR<C>;\n cardinality: MapCard<C>;\n output: MapOR<C>;\n debug: boolean | string;\n}\n\n/**\n * Extracts the IR, Cardinality, and OR generics from a FinalizedMapConfig\n */\nexport type DecomposeMapConfig<\n M extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = M extends MapConfig<infer IR, infer D, infer OR>\n ? IR extends OptRequired | undefined\n ? D extends MapCardinalityIllustrated | undefined\n ? OR extends OptRequired | undefined\n ? [IR, D, OR]\n : never\n : never\n : never\n : M extends FinalizedMapConfig<infer IR, infer D, infer OR>\n ? IR extends OptRequired\n ? D extends MapCardinalityIllustrated\n ? OR extends OptRequired\n ? [IR, D, OR]\n : never\n : never\n : never\n : never;\n\n/** extracts IR from a `FinalizedMapConfig` */\nexport type MapIR<\n T extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = DecomposeMapConfig<T>[0];\n\n/**\n * extracts the MapCardinality from a `FinalizedMapConfig`\n */\nexport type MapCard<\n T extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = DecomposeMapConfig<T>[1];\n\n/** extracts OR from a `FinalizedMapConfig` */\nexport type MapOR<\n T extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = DecomposeMapConfig<T>[2];\n\n/**\n * Merges the types of a userland configuration with a default configuration\n */\nexport type AsFinalizedConfig<\n U extends MapConfig<\n OptRequired | undefined,\n MapCardinalityIllustrated | undefined,\n OptRequired | undefined\n >,\n D extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = MergeObjects<U & Dictionary, D> extends FinalizedMapConfig<infer IR, infer C, infer OR>\n ? FinalizedMapConfig<IR, C, OR>\n : never;\n\nexport interface MapperApi {\n /**\n * Provides opportunity to configure _input_, _output_, and _cardinality_\n * prior to providing a mapping function.\n *\n * Note: _the defaults for configuration are defined by the_ `DEFAULT_ONE_TO_MANY_MAPPING`\n * _constant made available as a symbol from this library._\n */\n config: <\n C extends MapConfig<\n OptRequired, //\n MapCardinalityIllustrated,\n OptRequired\n >,\n >(\n config: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultOneToManyMapping\n >\n >;\n\n /**\n * Provides a nice 1:1 ratio between the input and output.\n *\n * By default the input and output are considered to be _required_\n * properties but this can be changed with the options hash provided.\n * ```ts\n * const mapper = mapTo.oneToOne().map(...);\n * // add in ability to filter out some inputs\n * const mapAndFilter = mapTo.oneToOne({ output: \"opt\" })\n * ```\n */\n oneToOne: <C extends MapCardinalityConfig<OptRequired, OptRequired>>(\n config?: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultOneToOneMapping\n >\n >;\n\n /**\n * **manyToOne** _mapping_\n *\n * Provides a configuration where multiple inputs `I[]` will be mapped to a\n * single output `O`.\n *\n * Choosing this configuration will, by default, set both input and output\n * to be \"required\" but you can change this default if you so choose.\n */\n manyToOne: <\n C extends MapCardinalityConfig<\n OptRequired | undefined, //\n OptRequired | undefined\n >,\n >(\n config?: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultManyToOneMapping\n >\n >;\n\n oneToMany: <\n C extends MapCardinalityConfig<\n OptRequired | undefined, //\n OptRequired | undefined\n >,\n >(\n config?: C\n ) => ConfiguredMap<\n AsFinalizedConfig<\n C, //\n DefaultOneToManyMapping\n >\n >;\n}\n\nexport type MapInput<\n I,\n IR extends OptRequired,\n C extends MapCardinalityIllustrated,\n> = C extends MapCardinality.OneToMany | \"I -> O[]\"\n ? IR extends \"opt\"\n ? I | undefined\n : I\n : C extends MapCardinality.OneToOne | \"I -> O\"\n ? IR extends \"opt\"\n ? I | undefined\n : I\n : C extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? IR extends \"opt\"\n ? I[] | undefined\n : I[]\n : never;\n\nexport type MapOutput<\n O,\n OR extends OptRequired,\n C extends MapCardinalityIllustrated,\n> = C extends MapCardinality.OneToMany | \"I -> O[]\"\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : C extends MapCardinality.OneToOne | \"I -> O\"\n ? OR extends \"opt\"\n ? O | null\n : O\n : C extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? OR extends \"opt\"\n ? O | null\n : O\n : never;\n\n/**\n * **MapTo<I, O>**\n *\n * A mapping function between an input type `I` and output type `O`. Defaults to using\n * the _default_ OneToMany mapping config.\n *\n * **Note:** this type is designed to guide the userland mapping; refer\n * to `MapFn` if you want the type output by the `mapFn()` utility.\n */\nexport type MapTo<\n I,\n O,\n C extends FinalizedMapConfig<\n OptRequired,\n MapCardinalityIllustrated,\n OptRequired\n > = DefaultOneToManyMapping,\n> = MapIR<C> extends \"opt\"\n ? (source?: MapInput<I, MapIR<C>, MapCard<C>>) => MapOutput<O, MapOR<C>, MapCard<C>>\n : (source: MapInput<I, MapIR<C>, MapCard<C>>) => MapOutput<O, MapOR<C>, MapCard<C>>;\n\nexport type MapFnOutput<\n I,\n O,\n S,\n OR extends OptRequired,\n C extends MapCardinalityIllustrated,\n> = C extends \"I -> O[]\" | MapCardinality.OneToMany\n ? S extends I[]\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : OR extends \"opt\"\n ? O[] | null\n : O[]\n : C extends MapCardinality.OneToOne | \"I -> O\"\n ? S extends I[]\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : OR extends \"opt\"\n ? O | null\n : O\n : C extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? S extends I[][]\n ? OR extends \"opt\"\n ? O[]\n : [O, ...O[]]\n : OR extends \"opt\"\n ? O | null\n : O\n : never;\n\nexport type MapFnInput<I, IR extends OptRequired, D extends MapCardinalityIllustrated> = D extends\n | \"I -> O[]\"\n | MapCardinality.OneToMany\n ? IR extends \"opt\"\n ? I | I[] | undefined\n : I | I[]\n : D extends MapCardinality.OneToOne | \"I -> O\"\n ? IR extends \"opt\"\n ? I | I[] | undefined\n : I | I[]\n : D extends MapCardinality.ManyToOne | \"I[] -> O\"\n ? IR extends \"opt\"\n ? I[] | I[][] | undefined\n : I[] | I[][]\n : never;\n\n/**\n * The mapping function provided by the `mapFn()` utility. This _fn_\n * is intended to be used in two ways:\n *\n * 1. Iterative:\n * ```ts\n * const m = mapTo<I,O>(i => [ ... ]);\n * // maps inputs to outputs\n * const out = inputs.map(m);\n * ```\n * 2. Block:\n * ```ts\n * // maps inputs to outputs (filtering or splitting where appr.)\n * const out2 = m(inputs);\n * ```\n */\nexport type MapFn<\n I,\n O,\n C extends FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = MapIR<C> extends \"opt\"\n ? <S extends MapFnInput<I, MapIR<C>, MapCard<C>>>(\n source?: S\n ) => MapFnOutput<I, O, S, MapOR<C>, MapCard<C>>\n : <S extends MapFnInput<I, MapIR<C>, MapCard<C>>>(\n source: S\n ) => MapFnOutput<I, O, S, MapOR<C>, MapCard<C>>;\n\n/**\n * **Mapper**\n *\n * A fully configured _mapper_ stemming from the **mapTo()** utility. It is both a mapping\n * function and a dictionary which describes the mapper's properties.\n * ```ts\n * const m = mapTo.oneToOne().map( ... );\n * const mapped = m(inputs);\n * const mappedOver = inputs.map(m);\n * ```\n *\n * Note: the root of a `Mapper` is the mapper function but\n * this is combined with a dictionary of settings and types\n * which you can use. For instance, look at the `fnSignature`\n * property to get the _type_ signature of the map function.\n */\nexport type MapperOld<\n I = unknown,\n O = unknown,\n C extends FinalizedMapConfig<\n OptRequired,\n MapCardinalityIllustrated,\n OptRequired\n > = FinalizedMapConfig<OptRequired, MapCardinalityIllustrated, OptRequired>,\n> = {\n input: MapIR<C>;\n output: MapOR<C>;\n cardinality: MapCard<C>;\n debug: boolean | string;\n inputType: I;\n outputType: O;\n /**\n * Provides the _type_ information for mapper function.\n *\n * Note: _this is just a **type**_ not the actual function which positioned\n * at the root of the Mapper type\n */\n fnSignature: MapFn<I, O, C>;\n} & MapFn<I, O, C>;\n\n/**\n * **MapInputFrom**\n *\n * Type utility which extracts the `I` type from a fully configured `Mapper`\n */\nexport type MapInputFrom<T extends MapperOld> = T extends MapperOld<infer I> ? I : never;\n\n/**\n * **MapOutputFrom**\n *\n * Type utility which extracts the output [`O`] type from a fully configured `Mapper`\n */\n\nexport type MapOutputFrom<T extends MapperOld> = T extends MapperOld<any, infer O> ? O : never;\n\n/**\n * **MapCardinalityFrom**\n *\n * Type utility which extracts _cardinality_ of a `Mapper`'s inputs to outputs\n */\n\nexport type MapCardinalityFrom<T extends MapperOld> = T extends MapperOld<any, any, infer C>\n ? C extends FinalizedMapConfig<OptRequired, infer Cardinality, OptRequired>\n ? Cardinality\n : never\n : never;\n","const Ref = Symbol(\"VueRef\");\n\n/**\n * **VueRef**`<T>`\n *\n * Intended to be the same type as VueJS's `Ref<T>` but without the need\n * to include any of the VueJS framework in deps.\n *\n * **Notes:**\n *\n * - a real `Ref<T>` has both the `value` property and a _private_ symbol\n * exposed to the runtime as a type (but the type is intentionally not exported).\n * - whenever using this type, please use it with `IsRef()`,`isRef()` utils\n *\n * **Related:**\n *\n * - `IsRef<T>`, `isRef()`, `VueComputedRef<T>`\n */\nexport interface VueRef<T = any> {\n [Ref]: \"VueRef\";\n value: T;\n}\n","import type { Constant } from \"inferred-types/constants\";\nimport type {\n AfterFirst,\n Contains,\n Dictionary,\n EmptyObject,\n ExpandDictionary,\n First,\n MakeKeysOptional,\n RemoveMarked,\n Widen,\n} from \"inferred-types/types\";\n\nconst s = Symbol(\"Dict\");\n\n/**\n * **Dict**`<T, ID>`\n *\n * A nominal replacement for Javascript object's with precisely\n * the same functionality but with a hashed type which allows\n * use of `let` instead of `const` for object definitions due\n * to the type not being able to be reassigned.\n */\nexport type Dict<T extends Dictionary = EmptyObject, ID extends string = string> = {\n [s]: ID;\n} & T;\n\nexport type OptDictProps<\n T extends readonly string[],\n> = RemoveMarked<{\n [K in keyof T]: T[K] extends `opt:${infer Prop}`\n ? Prop extends string\n ? Prop\n : Constant<\"Marked\">\n : Constant<\"Marked\">\n}>;\n\nexport type NarrowDictProps<\n T extends readonly string[],\n> = [] extends T\n ? T\n : RemoveMarked<{\n [K in keyof T]: T[K] extends `opt:${string}`\n ? Constant<\"Marked\">\n : T[K]\n }>;\n\nexport type CreateDictShape<\n TObj extends Dictionary,\n TKeys extends readonly (string & keyof TObj)[],\n TNarrow extends readonly string[],\n TOpt extends readonly string[],\n TResult extends Dictionary = EmptyObject,\n> = [] extends TKeys\n ? OptDictProps<TKeys> extends readonly string[]\n ? MakeKeysOptional<\n ExpandDictionary<TResult>,\n TOpt\n >\n\n : never\n : CreateDictShape<\n TObj,\n AfterFirst<TKeys>,\n TNarrow,\n TOpt,\n TResult & Record<\n First<TKeys>,\n Contains<TNarrow, First<TKeys>> extends true\n ? TObj[First<TKeys>]\n : Widen<TObj[First<TKeys>]>\n >\n >;\n\nexport type CreateDictHash<\n TValues extends readonly unknown[],\n TNarrowProps extends readonly string[],\n TOpt extends readonly string[],\n> = `${TValues[\"length\"]}${TNarrowProps[\"length\"]}${TOpt[\"length\"]}`;\n","import type { EmptyObject } from \"inferred-types/types\";\n\nexport enum ExifCompression {\n Uncompressed = 1,\n CCITT = 2,\n T4Group3Fax = 3,\n T6Group3Fax = 4,\n LZW = 5,\n JpgOldStyle = 6,\n Jpg = 7,\n AdobeDeflate = 8,\n JBigBw = 9,\n JBigColor = 10,\n JpegAlt = 99,\n Kodak262 = 262,\n Next = 32766,\n SonyRawCompressed = 32767,\n PackedRaw = 32769,\n SamsungSrwCompressed = 32770,\n CCIRLEW = 32771,\n SamsungSrwCompressed2 = 32772,\n Packbits = 32773,\n Thunderscan = 32809,\n KodakKdcCompressed = 32867,\n IT8CTPAD = 32895,\n IT8LW = 32896,\n IT8MP = 32897,\n IT8BL = 32898,\n PixarFilm = 32908,\n PixarLog = 32909,\n Deflate = 32946,\n DCS = 32947,\n AperioJpeg2000YCbCr = 33003,\n AperioJpeg2000RGB = 33005,\n JBig = 34661,\n SGILog = 34676,\n SGILog24 = 34677,\n Jpeg2000 = 34712,\n NikonNEFCompressed = 34713,\n JBig2TiffFx = 34715,\n MicrosoftBinaryLevelCodec = 34718,\n MicrosoftProgressiveTransformCodec = 34719,\n MicrosoftVector = 34720,\n ESRCLerc = 34887,\n LossyJpeg = 34892,\n LZMA2 = 34925,\n Zstd = 34926,\n WepP = 34927,\n PNG = 34933,\n JpegXR = 34934,\n KodakDCRCompressed = 65000,\n PentaxPEFCompressed = 65535,\n}\n\nexport enum ExifLightSource {\n Unknown = 0,\n Daylight,\n Fluorescent,\n Tungsten,\n Flash,\n FineWeather,\n Cloudy,\n Shade,\n DaylightFluorescent,\n DayWhiteFluorescent,\n CoolWhiteFluorescent,\n WhiteFluorescent,\n WarmWhiteFluorescent,\n StandardLightA,\n StandardLightB,\n StandardLightC,\n D55,\n D65,\n D75,\n D50,\n ISOStudioTungsten,\n Other = 255,\n}\n\nexport enum ExifFlashValues {\n NoFlash = 0x0,\n Fired = 0x1,\n FiredReturnNotDetected = 0x5,\n FiredReturnDetected = 0x7,\n OnDidNotFire = 0x8,\n OnFired = 0x9,\n OnReturnNotDetected = 0xD,\n OnReturnDetected = 0xF,\n OffDidNotFire = 0x10,\n OffDidNotFireReturnNotDetected = 0x14,\n AutoDidNotFire = 0x18,\n AutoFired = 0x19,\n AutoFiredReturnNotDetected = 0x1D,\n AutoFiredReturnDetected = 0x1F,\n NoFlashFunction = 0x20,\n OffNoFlashFunction = 0x30,\n FiredRedEyeReduction = 0x41,\n FiredRedEyeReductionReturnNotDetected = 0x45,\n FiredRedEyeReductionReturnDetected = 0x47,\n OnRedEyeReduction = 0x49,\n OnRedEyeReductionReturnNotDetected = 0x4D,\n OnRedEyeReductionReturnDetected = 0x4F,\n OffRedEyeReduction = 0x50,\n AutoDidNotFireRedEyeReduction = 0x58,\n AutoFiredRedEyeReduction = 0x59,\n AutoFiredRedEyeReductionNotDetected = 0x60,\n AutoFiredRedEyeReductionDetected = 0x5D,\n}\n\nexport enum ExifPreviewColorSpace {\n Unknown = 0,\n GrayGamma22,\n sRGB,\n AdobeRGB,\n ProPhotoRGB,\n}\n\nexport enum ExifEmbedPolicy {\n AllowCopying = 0,\n EmbedIfUsed,\n NeverEmbed,\n NoRestrictions,\n}\n\nexport enum ExifSubjectDistance {\n Unknown = 0,\n Macro,\n Close,\n Distant,\n}\n\nexport enum ExifSharpness {\n Normal = 0,\n Soft,\n Hard,\n}\n\nexport enum ExifSceneCaptureType {\n Standard = 0,\n Landscape,\n Portrait,\n Night,\n Other,\n}\n\nexport enum ExifGainControl {\n None = 0,\n LowGainUp,\n HighGainUp,\n LowGainDown,\n HighGainDown,\n}\n\nexport enum ExifContrast {\n Normal = 0,\n Low,\n High,\n}\n\nexport enum ExifSaturation {\n Normal = 0,\n Low,\n High,\n}\n\n/**\n * Extraneous info in an EXIF metadata payload. Detailed info\n * can be found on all fields here: [EXIF Tags](https://exiftool.org/TagNames/EXIF.html)\n */\nexport type ExifExtraneous<T extends object = EmptyObject> = {\n /** [ `0x0001` ] */\n InteropIndex: string;\n // InteropVersion:\n\n /**\n * called NewSubfileType by TIFF specification.\n * [More](https://exiftool.org/TagNames/EXIF.html).\n */\n SubfileType: number;\n} & T;\n\n/**\n * Date and Time info found in EXIF payload. Detailed info\n * can be found on all fields here: [EXIF Tags](https://exiftool.org/TagNames/EXIF.html)\n */\nexport type ExifDateTimeInfo<T extends object = EmptyObject> = {\n ModifyDate: string;\n OffsetTime: string;\n /** The date created; formal EXIF property is `DateTimeDigitized` */\n CreateDate: string;\n /** Formal EXIF property for created date */\n DateTimeDigitized: string;\n /**\n * 1 or 2 values:\n *\n * 1. The time zone offset of DateTimeOriginal from GMT in hours,\n * 2. If present, the time zone offset of ModifyDate\n */\n TimeZoneOffset: number | [number, number];\n OffsetTimeDigitized: string;\n /** fractional seconds for ModifyDate */\n SubSecTime: string;\n /** fractional seconds for DateTimeOriginal */\n SubSecTimeOriginal: string;\n /** fractional seconds for CreateDate */\n SubSecTimeDigitized: string;\n} & T;\n\n/**\n * Information regarding attribution found in EXIF payload. Detailed info\n * can be found on all fields here: [EXIF Tags](https://exiftool.org/TagNames/EXIF.html)\n */\nexport type ExifAttributionInfo<T extends object = EmptyObject> = {\n Copyright: string;\n /** becomes a list-type tag when the MWG module is loaded */\n Artist: string;\n /** called `CameraOwnerName` by the EXIF spec */\n OwnerName: string;\n CameraOwnerName: string;\n /** called `BodySerialNumber` by the EXIF spec */\n SerialNumber: string;\n BodySerialNumber: string;\n LensSerialNumber: string;\n HostComputer: string;\n} & T;\n\nexport type ExifCameraInfo<T extends object = EmptyObject> = {\n Make: string;\n Model: string;\n UniqueCameraModel: string;\n LocalizedCameraModel: string;\n LensMake: string;\n LensModel: string;\n /**\n * 4 rational values giving focal and aperture ranges,\n * called `LensSpecification` by the EXIF spec.\n */\n LensInfo: [number, number, number, number];\n LensSpecification: [number, number, number, number];\n\n /** used by some obscure software */\n OriginalFileName: string;\n OriginalRawFileName: string;\n ReelName: string;\n\n Orientation: 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8;\n ImageWidth: number;\n ExifImageWidth: number;\n ImageHeight: number;\n ExifImageHeight: number;\n BitsPerSample: number;\n\n /**\n * Details on compression values can be found here:\n * [Compression Values](https://exiftool.org/TagNames/EXIF.html#Compression).\n *\n * You may reference as a number or leverage the exposed `ExifCompression`\n * enumeration for more contextual info.\n */\n Compression: number;\n\n /**\n * - `1` - No dithering or half-toning\n * - `2` - Ordered dither or halftone\n * - `3` - Randomized dither\n */\n Thresholding: 1 | 2 | 3;\n\n /**\n * - `1` - Normal\n * - `2` - Reversed\n */\n FillOrder: 1 | 2;\n\n /**\n * - `0` - WhiteIsZero\n * - `1` - BlackIsZero\n * - `2` - RGB\n * - `3` - RGB Palette\n * - `4` - Transparency Mask\n *\n * For full list reference [docs](https://exiftool.org/TagNames/EXIF.html)\n */\n PhotometricInterpretation: number;\n\n SceneCaptureType: ExifSceneCaptureType;\n GainControl: ExifGainControl;\n Contrast: ExifContrast | string;\n Saturation: ExifSaturation;\n Sharpness: ExifSharpness | string;\n\n /**\n * Applies to **EXIF:ISO** tag:\n *\n * - `0` - Unknown\n * - `1` - Standard Output Sensitivity\n * - `2` - Recommended Exposure Index\n * - `3` - ISO Speed\n * - `4` - Standard Output Sensitivity and Recommended Exposure Index\n * - `5` - Standard Output Sensitivity and ISO Speed\n * - `6` - Recommended Exposure Index and ISO Speed\n * - `7` - Standard Output Sensitivity, Recommended Exposure Index and ISO Speed\n */\n SensitivityType: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;\n StandardOutputSensitivity: number;\n RecommendedExposureIndex: number;\n /**\n * called `ISOSpeedRatings` by EXIF 2.2, then `PhotographicSensitivity` by the EXIF 2.3 spec.\n */\n ISO: number;\n ISOSpeed: number;\n Exposure: string;\n ExposureIndex: number;\n Shadows: string;\n Brightness: string;\n Smoothness: string;\n MoireFilter: string;\n\n /**\n * - `0` - Unknown\n * - `1` - Average\n * - `2` - Center-weighted average\n * - `3` - Spot\n * - `4` - Multi-spot\n * - `5` - Multi-segment\n * - `6` - Partial\n * - `255` - Other\n */\n MeteringMode: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 255;\n\n /**\n * - `0` - Auto\n * - `1` - Manual\n * - `2` - Auto bracket\n */\n ExposureMode: 0 | 1 | 2;\n\n /**\n * Only values `0` and `1` are to the EXIF spec but Apple IOS devices use all\n *\n * - `0` - Normal\n * - `1` - Custom\n * - `2` - HDR (no original saved)\n * - `3` - HDR (original saved)\n * - `4` - Original (for HDR)\n * - `6` - Panorama\n * - `7` - Portrait HDR\n * - `8` - Portrait\n */\n CustomRendered: 0 | 1 | 2 | 3 | 4 | 6 | 7 | 8;\n\n LightSource: ExifLightSource;\n Flash: ExifFlashValues;\n FlashEnergy: number;\n\n SubjectDistance: number;\n SubjectDistanceRange: ExifSubjectDistance;\n SubjectLocation: [number, number];\n DepthNear: number;\n DepthFar: number;\n DepthMeasureType: 0 | 1 | 2;\n\n DigitalZoomRatio: number;\n FocalLengthIn35mmFormat: number;\n FocalLength: number;\n\n /**\n * - `0x1` - sRGB\n * - `0x2` - Adobe RGB\n * - `0xfffd` - Wide Gamut RGB\n * - `0xfffe` - ICC Profile\n * - `0xffff` - Uncalibrated\n *\n * Note: the value of `0x2` is not standard EXIF. Instead, an Adobe RGB image\n * is indicated by \"Uncalibrated\" with an InteropIndex of \"R03\". The values\n * 0xfffd and 0xfffe are also non-standard, and are used by some Sony cameras.\n */\n Colorspace: 0x1 | 0x2 | 0xFFFD | 0xFFFE | 0xFFFF;\n Gamma: number;\n /**\n * The actual `PixelFormat` values are 16-byte GUID's but the leading 15 bytes,\n * '6fddc324-4e03-4bfe-b1853-d77768dc9', have been removed below to avoid\n * unnecessary clutter:\n *\n * - `0x5` = Black & White\n * - `0x8` = 8-bit Gray\n * - `0x9` = 16-bit BGR555\n * - `0xa` = 16-bit BGR565\n * - `0xb` = 16-bit Gray\n * - `0xc` = 24-bit BGR\n * - `0xd` = 24-bit RGB\n * - `0xe` = 32-bit BGR\n * - `0xf` = 32-bit BGRA\n * - `0x10` = 32-bit PBGRA\n * - `0x11` = 32-bit Gray Float\n * - `0x12` = 48-bit RGB Fixed Point\n * - `0x13` = 32-bit BGR101010\n * - `0x15` = 48-bit RGB\n * - `0x16` = 64-bit RGBA\n * - `0x17` = 64-bit PRGBA\n * - `0x18` = 96-bit RGB Fixed Point\n * - `0x19` = 128-bit RGBA Float\n * - `0x1a` = 128-bit PRGBA Float\n * - `0x1b` = 128-bit RGB Float\n * - `0x1c` = 32-bit CMYK\n * - `0x1d` = 64-bit RGBA Fixed Point\n * - `0x1e` = 128-bit RGBA Fixed Point\n * - `0x1f` = 64-bit CMYK\n * - `0x20` = 24-bit 3 Channels\n * - `0x21` = 32-bit 4 Channels\n * - `0x22` = 40-bit 5 Channels\n * - `0x23` = 48-bit 6 Channels\n * - `0x24` = 56-bit 7 Channels\n * - `0x25` = 64-bit 8 Channels\n * - `0x26` = 48-bit 3 Channels\n * - `0x27` = 64-bit 4 Channels\n * - `0x28` = 80-bit 5 Channels\n * - `0x29` = 96-bit 6 Channels\n * - `0x2a` = 112-bit 7 Channels\n * - `0x2b` = 128-bit 8 Channels\n * - `0x2c` = 40-bit CMYK Alpha\n * - `0x2d` = 80-bit CMYK Alpha\n * - `0x2e` = 32-bit 3 Channels Alpha\n * - `0x2f` = 40-bit 4 Channels Alpha\n * - `0x30` = 48-bit 5 Channels Alpha\n * - `0x31` = 56-bit 6 Channels Alpha\n * - `0x32` = 64-bit 7 Channels Alpha\n * - `0x33` = 72-bit 8 Channels Alpha\n * - `0x34` = 64-bit 3 Channels Alpha\n * - `0x35` = 80-bit 4 Channels Alpha\n * - `0x36` = 96-bit 5 Channels Alpha\n * - `0x37` = 112-bit 6 Channels Alpha\n * - `0x38` = 128-bit 7 Channels Alpha\n * - `0x39` = 144-bit 8 Channels Alpha\n * - `0x3a` = 64-bit RGBA Half\n * - `0x3b` = 48-bit RGB Half\n * - `0x3d` = 32-bit RGBE\n * - `0x3e` = 16-bit Gray Half\n * - `0x3f` = 32-bit Gray Fixed Point\n *\n * > NOTE: tags 0xbc** are used in Windows HD Photo (HDP and WDP) images\n `\n */\n PixelFormat: number;\n\n /**\n * - `0` - Horizontal (normal)\n * - `1` - Mirror vertical\n * - `2` - Mirror horizontal\n * - `3` - Rotate 180\n * - `4` - Rotate 90 CW\n * - `5` - Mirror horizontal and rotate 90 CW\n * - `6` - Mirror horizontal and rotate 270 CW\n * - `7` - Rotate 270 CW\n */\n Transformation: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7;\n\n Whitebalance: number;\n\n BrightnessValue: number;\n /** Used but EXIF standard is `ExposureBiasValue` */\n ExposureCompensation: number;\n /** EXIF standard for Exposure bias */\n ExposureBiasValue: number;\n\n /** displayed in seconds, but stored as an APEX value */\n ShutterSpeedValue: number;\n /** displayed as an F number, but stored as an APEX value */\n ApertureValue: number;\n /** displayed as an F number, but stored as an APEX value */\n MaxApertureValue: number;\n\n EnhanceParams: string;\n\n /**\n *\n */\n FileSource: 1 | 2 | 3 | \"\\x03\\x00\\x00\\x00\";\n\n /**\n * Ambient temperature in degrees C, called `Temperature` by the EXIF spec\n */\n AmbientTemperature: number;\n /** Ambient temperature in degrees C */\n Temperature: number;\n Humidity: number;\n Pressure: number;\n WaterDepth: number;\n Acceleration: number;\n CameraElevationAngle: number;\n} & T;\n\nexport type ExifPhotoContext<T extends object = EmptyObject> = {\n ImageDescription: string;\n DocumentName: string;\n UserComment: string;\n\n Annotations: string;\n XPSubject: number;\n XPKeywords: number;\n XPAuthor: number;\n XPComments: number;\n\n Rating: number;\n RatingPercent: number;\n} & T;\n\n/**\n * Typing for GPS properties that are part of EXIF spec.\n * Details can be found: [here](https://exiftool.org/TagNames/GPS.html).\n */\nexport interface ExifGps {\n GPSVersionID: number;\n GPSLatitudeRef: \"N\" | \"S\";\n GPSLatitude: number;\n GPSLongitudeRef: \"E\" | \"W\";\n GPSLongitude: number;\n /**\n * - `0` is above sea level\n * - `1` is below sea level\n */\n GPSAltitudeRef: 0 | 1;\n GPSAltitude: number;\n /**\n * UTC time of GPS fix. When writing, date is stripped off if present,\n * and time is adjusted to UTC if it includes a timezone\n */\n GPSTimeStamp: string;\n GPSSatellites: string;\n GPSStatus: \"A\" | \"V\";\n GPSMeasureMode: \"2\" | \"3\";\n /**\n * - `K` - km/h\n * - `M` - mph\n * - `N` = knots\n */\n GPSSpeedRef: \"K\" | \"M\" | \"N\";\n GPSSpeed: number;\n GPSTrack: number;\n GPSImgDirectionRef: \"M\" | \"T\";\n GPSImgDirection: number;\n GPSMapDatum: string;\n GPSDestLatitudeRef: \"N\" | \"S\";\n GPSDestLatitude: number;\n GPSDestLongitudeRef: \"N\" | \"S\";\n GPSDestLongitude: number;\n GPSDestBearingRef: \"M\" | \"T\";\n GPSDestBearing: number;\n /**\n * - `K` - Kilometers\n * - `M` - Miles\n * - `N` = Nautical Miles\n */\n GPSDestDistanceRef: \"K\" | \"M\" | \"N\";\n GPSDestDistance: number;\n GPSProcessingMethod: \"GPS\" | \"CELLID\" | \"WLAN\" | \"MANUAL\";\n GPSAreaInformation: string;\n /**\n * When writing, time is stripped off if present, after adjusting\n * date/time to UTC if time includes a timezone. Format is `YYYY:mm:dd`.\n */\n GPSDateStamp: `${number}:${number}:${number}`;\n /**\n * `0` - no correction\n * `1` - differential corrected\n */\n GPSDifferential: 0 | 1;\n GPSHPositioningError: number;\n}\n/**\n * EXIF metadata payload fields.\n * Detailed info can be found here:\n * [EXIF Tags](https://exiftool.org/TagNames/EXIF.html).\n */\nexport type Exif<T extends object = EmptyObject> = Partial<\n ExifAttributionInfo\n & ExifCameraInfo\n & ExifDateTimeInfo\n & ExifGps\n & ExifExtraneous\n & ExifPhotoContext\n>\n& T;\n"],"mappings":";;;;;;AAUA,SAAS,kBAIPA,QAA6D;AAC3D,QAAO;EAAE,GAAG;EAAQ,WAAW;CAAM;AACxC;AAED,MAAa,8BAA8B,kBAAkB;CACzD,OAAO;CACP,QAAQ;CACR,aAAa;AAChB,EAAC;AAEF,MAAa,6BAA6B,kBAAkB;CACxD,OAAO;CACP,QAAQ;CACR,aAAa;AAChB,EAAC;AAEF,MAAa,8BAA8B,kBAAkB;CACzD,OAAO;CACP,QAAQ;CACR,aAAa;AAChB,EAAC;;;;AAoBF,IAAY,4DAAL;;AAEH;;AAEA;;AAEA;;AACH;;;;AC7DD,MAAM,MAAM,OAAO,SAAS;;;;ACa5B,MAAM,IAAI,OAAO,OAAO;;;;ACXxB,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,0EAAL;AACH;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;;AACH;AAED,IAAY,sEAAL;AACH;AACA;AACA;AACA;;AACH;AAED,IAAY,0DAAL;AACH;AACA;AACA;;AACH;AAED,IAAY,wEAAL;AACH;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,8DAAL;AACH;AACA;AACA;AACA;AACA;;AACH;AAED,IAAY,wDAAL;AACH;AACA;AACA;;AACH;AAED,IAAY,4DAAL;AACH;AACA;AACA;;AACH"}