UNPKG

map-transform-cjs

Version:
1 lines 6.77 kB
{"version":3,"sources":["../../src/transformers/explode.ts","../../src/utils/is.ts","../../src/utils/xor.ts","../../src/utils/stateHelpers.ts"],"sourcesContent":["import { isObject } from '../utils/is.js'\nimport { revFromState } from '../utils/stateHelpers.js'\nimport type { Transformer } from '../types.js'\n\nexport interface KeyValue {\n key: string | number\n value: unknown\n}\n\nconst isExplodedArray = (data: unknown[]) =>\n data.length > 0 &&\n data.every((item) => isObject(item) && typeof item.key === 'number')\n\nconst setValueOnKey = (\n target: unknown[] | Record<string, unknown>,\n keyValue: unknown\n) => {\n if (isObject(keyValue)) {\n const { key, value } = keyValue\n if (Array.isArray(target)) {\n target[key as number] = value\n } else {\n target[String(key)] = value\n }\n }\n return target\n}\n\nfunction doImplode(data: unknown) {\n if (Array.isArray(data)) {\n return data.reduce(\n setValueOnKey,\n isExplodedArray(data)\n ? ([] as unknown[])\n : ({} as Record<string, unknown>)\n )\n } else {\n return undefined\n }\n}\n\nfunction doExplode(data: unknown): unknown[] | undefined {\n if (isObject(data)) {\n return Object.entries(data)\n .filter(([, value]) => value !== undefined)\n .map(([key, value]: [string, unknown]) => ({\n key,\n value,\n }))\n } else if (Array.isArray(data)) {\n return data.map((value: unknown, key: number) => ({ key, value }))\n } else {\n return undefined\n }\n}\n\nfunction explodeOrImplode(isImplode: boolean): Transformer {\n return () => () => async (data, state) =>\n revFromState(state, isImplode) ? doImplode(data) : doExplode(data)\n}\n\nexport const explode: Transformer = explodeOrImplode(false)\nexport const implode: Transformer = explodeOrImplode(true)\n","import type { Path } from '../types.js'\n\nexport const isObject = (value: unknown): value is Record<string, unknown> =>\n Object.prototype.toString.call(value) === '[object Object]'\n\nexport const isString = (value: unknown): value is string =>\n typeof value === 'string'\n\nexport const isPath = (value: unknown): value is Path =>\n typeof value === 'string'\n\nexport const isArrayPath = (value: unknown): value is Path =>\n isPath(value) && value.endsWith('[]')\n\nexport const isNullOrUndefined = (value: unknown): value is null | undefined =>\n value === null || value === undefined\n\nexport const isNotNullOrUndefined = <T>(value: T): value is NonNullable<T> =>\n !isNullOrUndefined(value)\n\nexport const isNonEmptyArray = <T>(value: unknown): value is T[] =>\n Array.isArray(value) && value.length > 0\n","export default function xor(a = false, b = false) {\n return a ? !b : b\n}\n","import xor from './xor.js'\nimport type { State, InitialState } from '../types.js'\n\n// Context\n\nexport const getLastContext = (state: State) =>\n state.context[state.context.length - 1]\n\nexport const removeLastContext = (state: State) => ({\n ...state,\n context: state.context.slice(0, -1),\n})\n\nexport const pushContext = (state: State, value: unknown) => ({\n ...state,\n context: [...state.context, value],\n})\n\nexport const popContext = (state: State) => ({\n ...state,\n context: state.context.slice(0, -1),\n value: state.context[state.context.length - 1],\n})\n\n// Root\n\nexport const getRootFromState = (state: State) =>\n state.context.length === 0 ? state.value : state.context[0]\n\n// Target\n\nexport const getTargetFromState = (state: State) => state.target\n\nexport function setTargetOnState(state: State, target: unknown): State {\n return {\n ...state,\n target,\n }\n}\n\n// State value\n\nexport const setStateValue = (\n { untouched, ...state }: State, // Clear untouched every time we set a value\n value: unknown,\n shouldPushContext = false,\n): State =>\n shouldPushContext\n ? {\n ...pushContext(state, state.value),\n value,\n }\n : { ...state, value }\n\nexport const getStateValue = (state: State): unknown => state.value\n\nexport const setValueFromState = (\n state: State,\n { value }: State,\n shouldPushContext = false,\n): State => setStateValue(state, value, shouldPushContext)\n\nexport const isNonvalue = (\n value: unknown,\n nonvalues: unknown[] = [undefined],\n) => nonvalues.includes(value)\n\nexport const isNonvalueState = (\n state: State,\n nonvalues: unknown[] = [undefined],\n) => isNonvalue(state.value, nonvalues)\n\nexport const markAsUntouched = (state: State) => ({ ...state, untouched: true })\nexport const clearUntouched = ({ untouched, ...state }: State) => state\nexport const isUntouched = ({ untouched }: State) => !!untouched\n\n// State\n\nexport const populateState = (\n data: unknown,\n { rev = false, noDefaults = false, target = undefined }: InitialState,\n): State => ({\n context: [],\n value: data,\n target,\n rev,\n noDefaults,\n})\n\nexport const goForward = (state: State) =>\n state.rev || state.flip\n ? {\n ...state,\n rev: false,\n flip: false,\n }\n : state\n\nexport const flipState = (state: State, flip = true) => ({\n ...state,\n flip: xor(state.flip, flip),\n})\n\nexport const stopIteration = (state: State) => ({ ...state, iterate: false })\n\nexport const noopNext = async (state: State) => state\n\nexport const revFromState = (state: State, flip = false) =>\n flip ? xor(state.rev, !state.flip) : xor(state.rev, state.flip)\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,IAAM,WAAW,CAAC,UACvB,OAAO,UAAU,SAAS,KAAK,KAAK,MAAM;;;ACH7B,SAAR,IAAqB,IAAI,OAAO,IAAI,OAAO;AAChD,SAAO,IAAI,CAAC,IAAI;AAClB;;;ACyGO,IAAM,eAAe,CAAC,OAAc,OAAO,UAChD,OAAO,IAAI,MAAM,KAAK,CAAC,MAAM,IAAI,IAAI,IAAI,MAAM,KAAK,MAAM,IAAI;;;AHnGhE,IAAM,kBAAkB,CAAC,SACvB,KAAK,SAAS,KACd,KAAK,MAAM,CAAC,SAAS,SAAS,IAAI,KAAK,OAAO,KAAK,QAAQ,QAAQ;AAErE,IAAM,gBAAgB,CACpB,QACA,aACG;AACH,MAAI,SAAS,QAAQ,GAAG;AACtB,UAAM,EAAE,KAAK,MAAM,IAAI;AACvB,QAAI,MAAM,QAAQ,MAAM,GAAG;AACzB,aAAO,GAAa,IAAI;AAAA,IAC1B,OAAO;AACL,aAAO,OAAO,GAAG,CAAC,IAAI;AAAA,IACxB;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,UAAU,MAAe;AAChC,MAAI,MAAM,QAAQ,IAAI,GAAG;AACvB,WAAO,KAAK;AAAA,MACV;AAAA,MACA,gBAAgB,IAAI,IACf,CAAC,IACD,CAAC;AAAA,IACR;AAAA,EACF,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,SAAS,UAAU,MAAsC;AACvD,MAAI,SAAS,IAAI,GAAG;AAClB,WAAO,OAAO,QAAQ,IAAI,EACvB,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,MAAS,EACzC,IAAI,CAAC,CAAC,KAAK,KAAK,OAA0B;AAAA,MACzC;AAAA,MACA;AAAA,IACF,EAAE;AAAA,EACN,WAAW,MAAM,QAAQ,IAAI,GAAG;AAC9B,WAAO,KAAK,IAAI,CAAC,OAAgB,SAAiB,EAAE,KAAK,MAAM,EAAE;AAAA,EACnE,OAAO;AACL,WAAO;AAAA,EACT;AACF;AAEA,SAAS,iBAAiB,WAAiC;AACzD,SAAO,MAAM,MAAM,OAAO,MAAM,UAC9B,aAAa,OAAO,SAAS,IAAI,UAAU,IAAI,IAAI,UAAU,IAAI;AACrE;AAEO,IAAM,UAAuB,iBAAiB,KAAK;AACnD,IAAM,UAAuB,iBAAiB,IAAI;","names":[]}