@pierre/diffs 1.1.0 → 1.1.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 (50) hide show
  1. package/dist/components/AdvancedVirtualizedFileDiff.d.ts.map +1 -1
  2. package/dist/components/File.d.ts +9 -5
  3. package/dist/components/File.d.ts.map +1 -1
  4. package/dist/components/File.js +12 -3
  5. package/dist/components/File.js.map +1 -1
  6. package/dist/components/FileDiff.d.ts +7 -3
  7. package/dist/components/FileDiff.d.ts.map +1 -1
  8. package/dist/components/FileDiff.js +12 -3
  9. package/dist/components/FileDiff.js.map +1 -1
  10. package/dist/components/UnresolvedFile.d.ts +2 -1
  11. package/dist/components/UnresolvedFile.d.ts.map +1 -1
  12. package/dist/components/UnresolvedFile.js +8 -4
  13. package/dist/components/UnresolvedFile.js.map +1 -1
  14. package/dist/components/VirtulizerDevelopment.d.ts.map +1 -1
  15. package/dist/index.d.ts +2 -2
  16. package/dist/managers/InteractionManager.d.ts +2 -2
  17. package/dist/managers/InteractionManager.d.ts.map +1 -1
  18. package/dist/managers/InteractionManager.js.map +1 -1
  19. package/dist/react/File.js +2 -1
  20. package/dist/react/File.js.map +1 -1
  21. package/dist/react/FileDiff.js +2 -1
  22. package/dist/react/FileDiff.js.map +1 -1
  23. package/dist/react/MultiFileDiff.js +2 -1
  24. package/dist/react/MultiFileDiff.js.map +1 -1
  25. package/dist/react/PatchDiff.js +2 -1
  26. package/dist/react/PatchDiff.js.map +1 -1
  27. package/dist/react/UnresolvedFile.d.ts +6 -2
  28. package/dist/react/UnresolvedFile.d.ts.map +1 -1
  29. package/dist/react/UnresolvedFile.js +2 -1
  30. package/dist/react/UnresolvedFile.js.map +1 -1
  31. package/dist/react/constants.d.ts +2 -1
  32. package/dist/react/constants.d.ts.map +1 -1
  33. package/dist/react/constants.js +4 -1
  34. package/dist/react/constants.js.map +1 -1
  35. package/dist/react/index.d.ts +3 -3
  36. package/dist/react/index.js +2 -2
  37. package/dist/react/jsx.d.ts.map +1 -1
  38. package/dist/react/utils/useFileDiffInstance.d.ts +3 -1
  39. package/dist/react/utils/useFileDiffInstance.d.ts.map +1 -1
  40. package/dist/react/utils/useFileDiffInstance.js +14 -5
  41. package/dist/react/utils/useFileDiffInstance.js.map +1 -1
  42. package/dist/react/utils/useFileInstance.d.ts +3 -1
  43. package/dist/react/utils/useFileInstance.d.ts.map +1 -1
  44. package/dist/react/utils/useFileInstance.js +14 -5
  45. package/dist/react/utils/useFileInstance.js.map +1 -1
  46. package/dist/react/utils/useUnresolvedFileInstance.d.ts +3 -1
  47. package/dist/react/utils/useUnresolvedFileInstance.d.ts.map +1 -1
  48. package/dist/react/utils/useUnresolvedFileInstance.js +8 -7
  49. package/dist/react/utils/useUnresolvedFileInstance.js.map +1 -1
  50. package/package.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"file":"useUnresolvedFileInstance.js","names":["UnresolvedFileClass"],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n UnresolvedFile,\n UnresolvedFile as UnresolvedFileClass,\n type UnresolvedFileOptions,\n} from '../../components/UnresolvedFile';\nimport type {\n GetHoveredLineResult,\n SelectedLineRange,\n} from '../../managers/InteractionManager';\nimport type { UnresolvedFileHunksRendererOptions } from '../../renderers/UnresolvedFileHunksRenderer';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MergeConflictActionPayload,\n} from '../../types';\nimport { areOptionsEqual } from '../../utils/areOptionsEqual';\nimport {\n type MergeConflictDiffAction,\n parseMergeConflictDiffFromFile,\n} from '../../utils/parseMergeConflictDiffFromFile';\nimport { WorkerPoolContext } from '../WorkerPoolContext';\nimport { useStableCallback } from './useStableCallback';\n\nconst useIsometricEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface UseUnresolvedFileInstanceProps<LAnnotation> {\n file: FileContents;\n options?: Omit<UnresolvedFileHunksRendererOptions, 'onMergeConflictAction'>;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n selectedLines: SelectedLineRange | null | undefined;\n prerenderedHTML: string | undefined;\n hasConflictUtility: boolean;\n}\n\ninterface UseUnresolvedFileInstanceReturn<LAnnotation> {\n fileDiff: FileDiffMetadata;\n actions: MergeConflictDiffAction[];\n ref(node: HTMLElement | null): void;\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getInstance(): UnresolvedFile<LAnnotation> | undefined;\n}\n\nexport function useUnresolvedFileInstance<LAnnotation>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility,\n}: UseUnresolvedFileInstanceProps<LAnnotation>): UseUnresolvedFileInstanceReturn<LAnnotation> {\n const [{ fileDiff, actions }, setState] = useState(() => {\n const { fileDiff, actions } = parseMergeConflictDiffFromFile(file);\n return { fileDiff, actions };\n });\n // UnresolvedFile is intentionally uncontrolled in React. Keep an internal\n // source-of-truth file so sequential conflict actions apply to the latest\n // resolved contents rather than the initial prop value.\n const activeFileRef = useRef(file);\n const onMergeConflictAction = useStableCallback(\n (\n payload: MergeConflictActionPayload,\n instance: UnresolvedFile<LAnnotation>\n ) => {\n const activeFile = activeFileRef.current;\n const newFile = instance.resolveConflict(\n payload.conflict.conflictIndex,\n payload.resolution,\n activeFile\n );\n if (newFile == null) return;\n activeFileRef.current = newFile;\n const { fileDiff, actions } = parseMergeConflictDiffFromFile(newFile);\n setState({ fileDiff, actions });\n }\n );\n const poolManager = useContext(WorkerPoolContext);\n const instanceRef = useRef<UnresolvedFileClass<LAnnotation> | null>(null);\n const ref = useStableCallback((fileContainer: HTMLElement | null) => {\n if (fileContainer != null) {\n if (instanceRef.current != null) {\n throw new Error(\n 'useUnresolvedFileInstance: An instance should not already exist when a node is created'\n );\n }\n instanceRef.current = new UnresolvedFileClass(\n mergeUnresolvedOptions(\n options,\n onMergeConflictAction,\n hasConflictUtility\n ),\n poolManager,\n true\n );\n void instanceRef.current.hydrate({\n fileDiff,\n actions,\n fileContainer,\n lineAnnotations,\n prerenderedHTML,\n });\n } else {\n if (instanceRef.current == null) {\n throw new Error(\n 'useUnresolvedFileInstance: A UnresolvedFile instance should exist when unmounting'\n );\n }\n instanceRef.current.cleanUp();\n instanceRef.current = null;\n }\n });\n\n useIsometricEffect(() => {\n if (instanceRef.current == null) return;\n const instance = instanceRef.current;\n const newOptions = mergeUnresolvedOptions(\n options,\n onMergeConflictAction,\n hasConflictUtility\n );\n const forceRender = !areOptionsEqual(instance.options, newOptions);\n instance.setOptions(newOptions);\n void instance.render({\n fileDiff,\n actions,\n lineAnnotations,\n forceRender,\n });\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines);\n }\n });\n\n const getHoveredLine = useCallback(():\n | GetHoveredLineResult<'diff'>\n | undefined => {\n return instanceRef.current?.getHoveredLine();\n }, []);\n\n const getInstance = useCallback(() => {\n return instanceRef.current ?? undefined;\n }, []);\n\n return { ref, getHoveredLine, fileDiff, actions, getInstance };\n}\n\nfunction mergeUnresolvedOptions<LAnnotation>(\n options: UnresolvedFileHunksRendererOptions | undefined,\n onMergeConflictAction: UnresolvedFileOptions<LAnnotation>['onMergeConflictAction'],\n hasConflictUtility: boolean\n): UnresolvedFileOptions<LAnnotation> {\n return {\n ...options,\n onMergeConflictAction,\n hunkSeparators:\n options?.hunkSeparators === 'custom'\n ? emptyRender\n : options?.hunkSeparators,\n // Add a placeholder type for the custom render\n mergeConflictActionsType:\n hasConflictUtility || options?.mergeConflictActionsType === 'custom'\n ? emptyRender\n : options?.mergeConflictActionsType,\n };\n}\n\nfunction emptyRender() {\n return undefined;\n}\n"],"mappings":";;;;;;;;AAiCA,MAAM,qBACJ,OAAO,WAAW,cAAc,YAAY;AAmB9C,SAAgB,0BAAuC,EACrD,MACA,SACA,iBACA,eACA,iBACA,sBAC4F;CAC5F,MAAM,CAAC,EAAE,UAAU,WAAW,YAAY,eAAe;EACvD,MAAM,EAAE,sBAAU,uBAAY,+BAA+B,KAAK;AAClE,SAAO;GAAE;GAAU;GAAS;GAC5B;CAIF,MAAM,gBAAgB,OAAO,KAAK;CAClC,MAAM,wBAAwB,mBAE1B,SACA,aACG;EACH,MAAM,aAAa,cAAc;EACjC,MAAM,UAAU,SAAS,gBACvB,QAAQ,SAAS,eACjB,QAAQ,YACR,WACD;AACD,MAAI,WAAW,KAAM;AACrB,gBAAc,UAAU;EACxB,MAAM,EAAE,sBAAU,uBAAY,+BAA+B,QAAQ;AACrE,WAAS;GAAE;GAAU;GAAS,CAAC;GAElC;CACD,MAAM,cAAc,WAAW,kBAAkB;CACjD,MAAM,cAAc,OAAgD,KAAK;CACzE,MAAM,MAAM,mBAAmB,kBAAsC;AACnE,MAAI,iBAAiB,MAAM;AACzB,OAAI,YAAY,WAAW,KACzB,OAAM,IAAI,MACR,yFACD;AAEH,eAAY,UAAU,IAAIA,eACxB,uBACE,SACA,uBACA,mBACD,EACD,aACA,KACD;AACD,GAAK,YAAY,QAAQ,QAAQ;IAC/B;IACA;IACA;IACA;IACA;IACD,CAAC;SACG;AACL,OAAI,YAAY,WAAW,KACzB,OAAM,IAAI,MACR,oFACD;AAEH,eAAY,QAAQ,SAAS;AAC7B,eAAY,UAAU;;GAExB;AAEF,0BAAyB;AACvB,MAAI,YAAY,WAAW,KAAM;EACjC,MAAM,WAAW,YAAY;EAC7B,MAAM,aAAa,uBACjB,SACA,uBACA,mBACD;EACD,MAAM,cAAc,CAAC,gBAAgB,SAAS,SAAS,WAAW;AAClE,WAAS,WAAW,WAAW;AAC/B,EAAK,SAAS,OAAO;GACnB;GACA;GACA;GACA;GACD,CAAC;AACF,MAAI,kBAAkB,OACpB,UAAS,iBAAiB,cAAc;GAE1C;AAYF,QAAO;EAAE;EAAK,gBAVS,kBAEN;AACf,UAAO,YAAY,SAAS,gBAAgB;KAC3C,EAAE,CAAC;EAMwB;EAAU;EAAS,aAJ7B,kBAAkB;AACpC,UAAO,YAAY,WAAW;KAC7B,EAAE,CAAC;EAEwD;;AAGhE,SAAS,uBACP,SACA,uBACA,oBACoC;AACpC,QAAO;EACL,GAAG;EACH;EACA,gBACE,SAAS,mBAAmB,WACxB,cACA,SAAS;EAEf,0BACE,sBAAsB,SAAS,6BAA6B,WACxD,cACA,SAAS;EAChB;;AAGH,SAAS,cAAc"}
1
+ {"version":3,"file":"useUnresolvedFileInstance.js","names":["UnresolvedFileClass"],"sources":["../../../src/react/utils/useUnresolvedFileInstance.ts"],"sourcesContent":["import {\n useCallback,\n useContext,\n useEffect,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\n\nimport {\n UnresolvedFile,\n UnresolvedFile as UnresolvedFileClass,\n type UnresolvedFileOptions,\n} from '../../components/UnresolvedFile';\nimport type {\n GetHoveredLineResult,\n SelectedLineRange,\n} from '../../managers/InteractionManager';\nimport type { UnresolvedFileHunksRendererOptions } from '../../renderers/UnresolvedFileHunksRenderer';\nimport type {\n DiffLineAnnotation,\n FileContents,\n FileDiffMetadata,\n MergeConflictActionPayload,\n} from '../../types';\nimport { areOptionsEqual } from '../../utils/areOptionsEqual';\nimport {\n type MergeConflictDiffAction,\n parseMergeConflictDiffFromFile,\n} from '../../utils/parseMergeConflictDiffFromFile';\nimport { noopRender } from '../constants';\nimport { WorkerPoolContext } from '../WorkerPoolContext';\nimport { useStableCallback } from './useStableCallback';\n\nconst useIsometricEffect =\n typeof window === 'undefined' ? useEffect : useLayoutEffect;\n\ninterface UseUnresolvedFileInstanceProps<LAnnotation> {\n file: FileContents;\n options?: Omit<UnresolvedFileHunksRendererOptions, 'onMergeConflictAction'>;\n lineAnnotations: DiffLineAnnotation<LAnnotation>[] | undefined;\n selectedLines: SelectedLineRange | null | undefined;\n prerenderedHTML: string | undefined;\n hasConflictUtility: boolean;\n hasGutterRenderUtility: boolean;\n}\n\ninterface UseUnresolvedFileInstanceReturn<LAnnotation> {\n fileDiff: FileDiffMetadata;\n actions: MergeConflictDiffAction[];\n ref(node: HTMLElement | null): void;\n getHoveredLine(): GetHoveredLineResult<'diff'> | undefined;\n getInstance(): UnresolvedFile<LAnnotation> | undefined;\n}\n\nexport function useUnresolvedFileInstance<LAnnotation>({\n file,\n options,\n lineAnnotations,\n selectedLines,\n prerenderedHTML,\n hasConflictUtility,\n hasGutterRenderUtility,\n}: UseUnresolvedFileInstanceProps<LAnnotation>): UseUnresolvedFileInstanceReturn<LAnnotation> {\n const [{ fileDiff, actions }, setState] = useState(() => {\n const { fileDiff, actions } = parseMergeConflictDiffFromFile(file);\n return { fileDiff, actions };\n });\n // UnresolvedFile is intentionally uncontrolled in React. Keep an internal\n // source-of-truth file so sequential conflict actions apply to the latest\n // resolved contents rather than the initial prop value.\n const activeFileRef = useRef(file);\n const onMergeConflictAction = useStableCallback(\n (\n payload: MergeConflictActionPayload,\n instance: UnresolvedFile<LAnnotation>\n ) => {\n const activeFile = activeFileRef.current;\n const newFile = instance.resolveConflict(\n payload.conflict.conflictIndex,\n payload.resolution,\n activeFile\n );\n if (newFile == null) return;\n activeFileRef.current = newFile;\n const { fileDiff, actions } = parseMergeConflictDiffFromFile(newFile);\n setState({ fileDiff, actions });\n }\n );\n const poolManager = useContext(WorkerPoolContext);\n const instanceRef = useRef<UnresolvedFileClass<LAnnotation> | null>(null);\n const ref = useStableCallback((fileContainer: HTMLElement | null) => {\n if (fileContainer != null) {\n if (instanceRef.current != null) {\n throw new Error(\n 'useUnresolvedFileInstance: An instance should not already exist when a node is created'\n );\n }\n instanceRef.current = new UnresolvedFileClass(\n mergeUnresolvedOptions(\n options,\n onMergeConflictAction,\n hasConflictUtility,\n hasGutterRenderUtility\n ),\n poolManager,\n true\n );\n void instanceRef.current.hydrate({\n fileDiff,\n actions,\n fileContainer,\n lineAnnotations,\n prerenderedHTML,\n });\n } else {\n if (instanceRef.current == null) {\n throw new Error(\n 'useUnresolvedFileInstance: A UnresolvedFile instance should exist when unmounting'\n );\n }\n instanceRef.current.cleanUp();\n instanceRef.current = null;\n }\n });\n\n useIsometricEffect(() => {\n if (instanceRef.current == null) return;\n const instance = instanceRef.current;\n const newOptions = mergeUnresolvedOptions(\n options,\n onMergeConflictAction,\n hasConflictUtility,\n hasGutterRenderUtility\n );\n const forceRender = !areOptionsEqual(instance.options, newOptions);\n instance.setOptions(newOptions);\n void instance.render({\n fileDiff,\n actions,\n lineAnnotations,\n forceRender,\n });\n if (selectedLines !== undefined) {\n instance.setSelectedLines(selectedLines);\n }\n });\n\n const getHoveredLine = useCallback(():\n | GetHoveredLineResult<'diff'>\n | undefined => {\n return instanceRef.current?.getHoveredLine();\n }, []);\n\n const getInstance = useCallback(() => {\n return instanceRef.current ?? undefined;\n }, []);\n\n return { ref, getHoveredLine, fileDiff, actions, getInstance };\n}\n\nfunction mergeUnresolvedOptions<LAnnotation>(\n options: UnresolvedFileHunksRendererOptions | undefined,\n onMergeConflictAction: UnresolvedFileOptions<LAnnotation>['onMergeConflictAction'],\n hasConflictUtility: boolean,\n hasGutterRenderUtility: boolean\n): UnresolvedFileOptions<LAnnotation> {\n return {\n ...options,\n onMergeConflictAction,\n hunkSeparators:\n options?.hunkSeparators === 'custom'\n ? noopRender\n : options?.hunkSeparators,\n // Add a placeholder type for the custom render\n mergeConflictActionsType:\n hasConflictUtility || options?.mergeConflictActionsType === 'custom'\n ? noopRender\n : options?.mergeConflictActionsType,\n renderGutterUtility: hasGutterRenderUtility ? noopRender : undefined,\n };\n}\n"],"mappings":";;;;;;;;;AAkCA,MAAM,qBACJ,OAAO,WAAW,cAAc,YAAY;AAoB9C,SAAgB,0BAAuC,EACrD,MACA,SACA,iBACA,eACA,iBACA,oBACA,0BAC4F;CAC5F,MAAM,CAAC,EAAE,UAAU,WAAW,YAAY,eAAe;EACvD,MAAM,EAAE,sBAAU,uBAAY,+BAA+B,KAAK;AAClE,SAAO;GAAE;GAAU;GAAS;GAC5B;CAIF,MAAM,gBAAgB,OAAO,KAAK;CAClC,MAAM,wBAAwB,mBAE1B,SACA,aACG;EACH,MAAM,aAAa,cAAc;EACjC,MAAM,UAAU,SAAS,gBACvB,QAAQ,SAAS,eACjB,QAAQ,YACR,WACD;AACD,MAAI,WAAW,KAAM;AACrB,gBAAc,UAAU;EACxB,MAAM,EAAE,sBAAU,uBAAY,+BAA+B,QAAQ;AACrE,WAAS;GAAE;GAAU;GAAS,CAAC;GAElC;CACD,MAAM,cAAc,WAAW,kBAAkB;CACjD,MAAM,cAAc,OAAgD,KAAK;CACzE,MAAM,MAAM,mBAAmB,kBAAsC;AACnE,MAAI,iBAAiB,MAAM;AACzB,OAAI,YAAY,WAAW,KACzB,OAAM,IAAI,MACR,yFACD;AAEH,eAAY,UAAU,IAAIA,eACxB,uBACE,SACA,uBACA,oBACA,uBACD,EACD,aACA,KACD;AACD,GAAK,YAAY,QAAQ,QAAQ;IAC/B;IACA;IACA;IACA;IACA;IACD,CAAC;SACG;AACL,OAAI,YAAY,WAAW,KACzB,OAAM,IAAI,MACR,oFACD;AAEH,eAAY,QAAQ,SAAS;AAC7B,eAAY,UAAU;;GAExB;AAEF,0BAAyB;AACvB,MAAI,YAAY,WAAW,KAAM;EACjC,MAAM,WAAW,YAAY;EAC7B,MAAM,aAAa,uBACjB,SACA,uBACA,oBACA,uBACD;EACD,MAAM,cAAc,CAAC,gBAAgB,SAAS,SAAS,WAAW;AAClE,WAAS,WAAW,WAAW;AAC/B,EAAK,SAAS,OAAO;GACnB;GACA;GACA;GACA;GACD,CAAC;AACF,MAAI,kBAAkB,OACpB,UAAS,iBAAiB,cAAc;GAE1C;AAYF,QAAO;EAAE;EAAK,gBAVS,kBAEN;AACf,UAAO,YAAY,SAAS,gBAAgB;KAC3C,EAAE,CAAC;EAMwB;EAAU;EAAS,aAJ7B,kBAAkB;AACpC,UAAO,YAAY,WAAW;KAC7B,EAAE,CAAC;EAEwD;;AAGhE,SAAS,uBACP,SACA,uBACA,oBACA,wBACoC;AACpC,QAAO;EACL,GAAG;EACH;EACA,gBACE,SAAS,mBAAmB,WACxB,aACA,SAAS;EAEf,0BACE,sBAAsB,SAAS,6BAA6B,WACxD,aACA,SAAS;EACf,qBAAqB,yBAAyB,aAAa;EAC5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pierre/diffs",
3
- "version": "1.1.0",
3
+ "version": "1.1.2",
4
4
  "license": "apache-2.0",
5
5
  "files": [
6
6
  "dist",