CodeSampleX

Пример

@tiptap/pm 3.11.0: isHistoryTransaction

Проверенный пример — npm @tiptap/pm 3.11.0: isHistoryTransaction. Контракт выполнен на node 22 · linux debian/x64 · docker и пройден.

sha256:43c510d029913d24c4496913f5d737703bc058a3e7c81384ca34b0f2fdfe0d9c

Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла. Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди. MIT-0

Свидетельства выполнения

Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.

Основа свидетельства
Подписанный контракт пройден
Квитанции проверки
1
Ключи подписи, собравшие его
1
Заявленная среда node 22.23 linux 24 · ubuntu · glibc 2.39 x64 node 22.23 javascript npm 10

Среды запусков проверки

Окружение Контракт Этапы Запуск
node 22 · linux debian/x64 · docker ed25519:c1973797be207ac4 PASS compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS
CONTAINER_RUN · node-typescript@1node:22@sha256:8a34c4ab3ea2…
2026-09-15

Кейс

HOW
Цель
verify @tiptap/pm.isHistoryTransaction in pkg:npm/%40tiptap/pm@3.11.0
Пакеты
Символы
  • @tiptap/pm.isHistoryTransaction
Окружение
node 22.23.2
Создан
2026-09-15T05:35:31Z

Контракт

  1. isHistoryTransaction is a function exported by @tiptap/pm/history
  2. isHistoryTransaction returns false for a newly created transaction
  3. isHistoryTransaction returns false for standard text editing transactions
  4. isHistoryTransaction returns true for transactions dispatched during an undo operation
  5. isHistoryTransaction returns true for transactions dispatched during a redo operation
  6. isHistoryTransaction returns true for transactions dispatched by undoNoScroll
  7. isHistoryTransaction returns true for transactions dispatched by redoNoScroll
  8. isHistoryTransaction returns false for transactions created with closeHistory
  9. isHistoryTransaction returns false for transactions configured with addToHistory false
  10. isHistoryTransaction returns a boolean value for all transaction inputs

Файлы

  • PROMPT.md
  • csx.json
  • index.mjs
  • package-lock.json
  • package.json
  • spec.json
  • test/contract.mjs

Скачать артефакт с исходным кодом (tar.gz)

Исходный код

PROMPT.md
Clean-room public code sample — generation instructions

Write a brand-new, minimal, self-contained code sample in this clean-room directory.
Do not copy, paraphrase, or reference any existing project source. Work only from this spec.

A csx.json manifest scaffold already exists. Do not recreate it from memory. Preserve its case.goal, packages and symbols; fill its empty case.contract with exact assertions and correct its environment, commands and verifierAdapter for the files you generate.

Goal: verify @tiptap/pm.isHistoryTransaction in pkg:npm/%40tiptap/pm@3.11.0
Kind: HOW

Use EXACTLY these public packages and versions:
  - pkg:npm/%40tiptap/pm@3.11.0
Demonstrate these symbols/APIs:
  - @tiptap/pm.isHistoryTransaction

Rules:
  - One focused purpose; the smallest project that proves the goal.
  - Include a contract test (test/contract.*) that runs OFFLINE and exits 0 exactly when the goal behavior works.
  - Pin every dependency with a lockfile so resolution is reproducible.
  - No secrets, credentials, or tokens. No real URLs (only example.com or localhost). No absolute paths.
  - No personal names, emails, company names, or project identifiers of any kind.
  - No binaries and no generated output (node_modules, dist, target, venv, .git, .env).
  - Keep it under 200 files and 256KB packed.
csx.json
{"case":{"caseId":"case:sha256:c9296d7f7acbcae88409d251d6ca172a0e27087d1698de1b8cf5e604e57430d4","contract":["isHistoryTransaction is a function exported by @tiptap/pm/history","isHistoryTransaction returns false for a newly created transaction","isHistoryTransaction returns false for standard text editing transactions","isHistoryTransaction returns true for transactions dispatched during an undo operation","isHistoryTransaction returns true for transactions dispatched during a redo operation","isHistoryTransaction returns true for transactions dispatched by undoNoScroll","isHistoryTransaction returns true for transactions dispatched by redoNoScroll","isHistoryTransaction returns false for transactions created with closeHistory","isHistoryTransaction returns false for transactions configured with addToHistory false","isHistoryTransaction returns a boolean value for all transaction inputs"],"goal":"verify @tiptap/pm.isHistoryTransaction in pkg:npm/%40tiptap/pm@3.11.0","kind":"HOW","packages":["pkg:npm/%40tiptap/pm@3.11.0"],"schemaVersion":1,"symbols":["@tiptap/pm.isHistoryTransaction"]},"contractCommand":["node","test/contract.mjs"],"environment":{"arch":"x64","distro":"ubuntu","ecosystem":"npm","executionContext":"node","language":"javascript","libc":"glibc","libcVersion":"2.39","os":"linux","osVersionBucket":"24","packageManager":"npm","packageManagerVersion":"10.9.8","runtime":"node","runtimeVersion":"22.23.2","schemaVersion":1},"license":"MIT-0","packages":["pkg:npm/%40tiptap/pm@3.11.0"],"schemaVersion":1,"subject":"pkg:npm/%40tiptap/pm@3.11.0","symbols":["@tiptap/pm.isHistoryTransaction"],"verifierAdapter":"node-typescript@1"}
index.mjs
import {
  isHistoryTransaction,
  history,
  undo,
  redo,
  undoNoScroll,
  redoNoScroll,
  closeHistory
} from '@tiptap/pm/history';
import { EditorState } from '@tiptap/pm/state';
import { schema } from '@tiptap/pm/schema-basic';

export {
  isHistoryTransaction,
  history,
  undo,
  redo,
  undoNoScroll,
  redoNoScroll,
  closeHistory,
  EditorState,
  schema
};

export default isHistoryTransaction;
package-lock.json
{
  "name": "sample-tiptap-pm-ishistorytransaction",
  "version": "1.0.0",
  "lockfileVersion": 3,
  "requires": true,
  "packages": {
    "": {
      "name": "sample-tiptap-pm-ishistorytransaction",
      "version": "1.0.0",
      "dependencies": {
        "@tiptap/pm": "3.11.0"
      }
    },
    "node_modules/@remirror/core-constants": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/@remirror/core-constants/-/core-constants-3.0.0.tgz",
      "integrity": "sha512-42aWfPrimMfDKDi4YegyS7x+/0tlzaqwPQCULLanv3DMIlu96KTJR0fM5isWX2UViOqlGnX6YFgqWepcX+XMNg==",
      "license": "MIT"
    },
    "node_modules/@tiptap/pm": {
      "version": "3.11.0",
      "resolved": "https://registry.npmjs.org/@tiptap/pm/-/pm-3.11.0.tgz",
      "integrity": "sha512-plCQDLCZIOc92cizB8NNhBRN0szvYR3cx9i5IXo6v9Xsgcun8KHNcJkesc2AyeqdIs0BtOJZaqQ9adHThz8UDw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-changeset": "^2.3.0",
        "prosemirror-collab": "^1.3.1",
        "prosemirror-commands": "^1.6.2",
        "prosemirror-dropcursor": "^1.8.1",
        "prosemirror-gapcursor": "^1.3.2",
        "prosemirror-history": "^1.4.1",
        "prosemirror-inputrules": "^1.4.0",
        "prosemirror-keymap": "^1.2.2",
        "prosemirror-markdown": "^1.13.1",
        "prosemirror-menu": "^1.2.4",
        "prosemirror-model": "^1.24.1",
        "prosemirror-schema-basic": "^1.2.3",
        "prosemirror-schema-list": "^1.5.0",
        "prosemirror-state": "^1.4.3",
        "prosemirror-tables": "^1.6.4",
        "prosemirror-trailing-node": "^3.0.0",
        "prosemirror-transform": "^1.10.2",
        "prosemirror-view": "^1.38.1"
      },
      "funding": {
        "type": "github",
        "url": "https://github.com/sponsors/ueberdosis"
      }
    },
    "node_modules/@types/linkify-it": {
      "version": "5.0.0",
      "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz",
      "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==",
      "license": "MIT"
    },
    "node_modules/@types/markdown-it": {
      "version": "14.2.0",
      "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.2.0.tgz",
      "integrity": "sha512-NoQ2yGlLWj4wpxMs+TYmRKk3thDrQ97agr7sFqfLsAlvoS8SNQuTrlObhFqG9iugdTtgOE9jpJ6FNM4ZGsa5xQ==",
      "license": "MIT",
      "dependencies": {
        "@types/linkify-it": "^5",
        "@types/mdurl": "^2"
      }
    },
    "node_modules/@types/mdurl": {
      "version": "2.0.0",
      "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz",
      "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==",
      "license": "MIT"
    },
    "node_modules/argparse": {
      "version": "2.0.1",
      "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz",
      "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==",
      "license": "Python-2.0"
    },
    "node_modules/crelt": {
      "version": "1.0.7",
      "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.7.tgz",
      "integrity": "sha512-aK6BbWfhf4U/wCcLHKPJl/xa6VkVstRaPywWtMKGwuOLc/wZTyQYuoxgvZnNsBvv7Kg3YTBQYYBCggcviQczuA==",
      "license": "MIT"
    },
    "node_modules/entities": {
      "version": "4.5.0",
      "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
      "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
      "license": "BSD-2-Clause",
      "engines": {
        "node": ">=0.12"
      },
      "funding": {
        "url": "https://github.com/fb55/entities?sponsor=1"
      }
    },
    "node_modules/escape-string-regexp": {
      "version": "4.0.0",
      "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz",
      "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==",
      "license": "MIT",
      "engines": {
        "node": ">=10"
      },
      "funding": {
        "url": "https://github.com/sponsors/sindresorhus"
      }
    },
    "node_modules/linkify-it": {
      "version": "5.0.2",
      "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.2.tgz",
      "integrity": "sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/puzrin"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/markdown-it"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "uc.micro": "^2.0.0"
      }
    },
    "node_modules/markdown-it": {
      "version": "14.3.2",
      "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.3.2.tgz",
      "integrity": "sha512-sHHjZ5fJKlgrG4qns2YwVcdNep35h5fERrfkD2YNsb9UFk0UIHarbiTaHKVMlPuWAoiilyK8Fv/jAm11slsY7Q==",
      "funding": [
        {
          "type": "github",
          "url": "https://github.com/sponsors/puzrin"
        },
        {
          "type": "github",
          "url": "https://github.com/sponsors/markdown-it"
        }
      ],
      "license": "MIT",
      "dependencies": {
        "argparse": "^2.0.1",
        "entities": "^4.5.0",
        "linkify-it": "^5.0.2",
        "mdurl": "^2.0.0",
        "punycode.js": "^2.3.1",
        "uc.micro": "^2.1.0"
      },
      "bin": {
        "markdown-it": "bin/markdown-it.mjs"
      }
    },
    "node_modules/mdurl": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.1.0.tgz",
      "integrity": "sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==",
      "license": "MIT"
    },
    "node_modules/orderedmap": {
      "version": "2.1.1",
      "resolved": "https://registry.npmjs.org/orderedmap/-/orderedmap-2.1.1.tgz",
      "integrity": "sha512-TvAWxi0nDe1j/rtMcWcIj94+Ffe6n7zhow33h40SKxmsmozs6dz/e+EajymfoFcHd7sxNn8yHM8839uixMOV6g==",
      "license": "MIT"
    },
    "node_modules/prosemirror-changeset": {
      "version": "2.4.2",
      "resolved": "https://registry.npmjs.org/prosemirror-changeset/-/prosemirror-changeset-2.4.2.tgz",
      "integrity": "sha512-ViYrjMSg3YFiXwIhKaluu+/mi3Yrxt6AR8ri14ulTaGcZtXO1CThl7A2gv79qx5fQnOw8woKwyBU2u+9PVCm3w==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-transform": "^1.0.0"
      }
    },
    "node_modules/prosemirror-collab": {
      "version": "1.3.1",
      "resolved": "https://registry.npmjs.org/prosemirror-collab/-/prosemirror-collab-1.3.1.tgz",
      "integrity": "sha512-4SnynYR9TTYaQVXd/ieUvsVV4PDMBzrq2xPUWutHivDuOshZXqQ5rGbZM84HEaXKbLdItse7weMGOUdDVcLKEQ==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-state": "^1.0.0"
      }
    },
    "node_modules/prosemirror-commands": {
      "version": "1.7.2",
      "resolved": "https://registry.npmjs.org/prosemirror-commands/-/prosemirror-commands-1.7.2.tgz",
      "integrity": "sha512-q6Q6szxqdu9Xd6EcdKsqXghu5nQdZTpB4Q9yd04WRc7/jt763e/rT60Owh0L1GYY+T46o5rD+9lEN36dZS43tw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-model": "^1.0.0",
        "prosemirror-state": "^1.0.0",
        "prosemirror-transform": "^1.10.2"
      }
    },
    "node_modules/prosemirror-dropcursor": {
      "version": "1.8.3",
      "resolved": "https://registry.npmjs.org/prosemirror-dropcursor/-/prosemirror-dropcursor-1.8.3.tgz",
      "integrity": "sha512-FoYbsJR8gK+DGlqhNoE29Loa38eIZPzQRIb1VMaDNBoo4OLP6vVof/jR8qFY/6XvUd6Dhug8MDCHl2a/h8RTfQ==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-state": "^1.0.0",
        "prosemirror-transform": "^1.1.0",
        "prosemirror-view": "^1.1.0"
      }
    },
    "node_modules/prosemirror-gapcursor": {
      "version": "1.4.1",
      "resolved": "https://registry.npmjs.org/prosemirror-gapcursor/-/prosemirror-gapcursor-1.4.1.tgz",
      "integrity": "sha512-pMdYaEnjNMSwl11yjEGtgTmLkR08m/Vl+Jj443167p9eB3HVQKhYCc4gmHVDsLPODfZfjr/MmirsdyZziXbQKw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-keymap": "^1.0.0",
        "prosemirror-model": "^1.0.0",
        "prosemirror-state": "^1.0.0",
        "prosemirror-view": "^1.0.0"
      }
    },
    "node_modules/prosemirror-history": {
      "version": "1.5.0",
      "resolved": "https://registry.npmjs.org/prosemirror-history/-/prosemirror-history-1.5.0.tgz",
      "integrity": "sha512-zlzTiH01eKA55UAf1MEjtssJeHnGxO0j4K4Dpx+gnmX9n+SHNlDqI2oO1Kv1iPN5B1dm5fsljCfqKF9nFL6HRg==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-state": "^1.2.2",
        "prosemirror-transform": "^1.0.0",
        "prosemirror-view": "^1.31.0",
        "rope-sequence": "^1.3.0"
      }
    },
    "node_modules/prosemirror-inputrules": {
      "version": "1.5.1",
      "resolved": "https://registry.npmjs.org/prosemirror-inputrules/-/prosemirror-inputrules-1.5.1.tgz",
      "integrity": "sha512-7wj4uMjKaXWAQ1CDgxNzNtR9AlsuwzHfdFH1ygEHA2KHF2DOEaXl1CJfNPAKCg9qNEh4rum975QLaCiQPyY6Fw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-state": "^1.0.0",
        "prosemirror-transform": "^1.0.0"
      }
    },
    "node_modules/prosemirror-keymap": {
      "version": "1.2.3",
      "resolved": "https://registry.npmjs.org/prosemirror-keymap/-/prosemirror-keymap-1.2.3.tgz",
      "integrity": "sha512-4HucRlpiLd1IPQQXNqeo81BGtkY8Ai5smHhKW9jjPKRc2wQIxksg7Hl1tTI2IfT2B/LgX6bfYvXxEpJl7aKYKw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-state": "^1.0.0",
        "w3c-keyname": "^2.2.0"
      }
    },
    "node_modules/prosemirror-markdown": {
      "version": "1.13.7",
      "resolved": "https://registry.npmjs.org/prosemirror-markdown/-/prosemirror-markdown-1.13.7.tgz",
      "integrity": "sha512-NV57Oxe3fXR+bNGXS5XW4sKt/XGIyY3n0eHVUoJORcismeF4FFMpLBnl0YESy2BvJQHloexX+9P+zT3VqFj/CQ==",
      "license": "MIT",
      "dependencies": {
        "@types/markdown-it": "^14.0.0",
        "markdown-it": "^14.0.0",
        "prosemirror-model": "^1.25.0"
      }
    },
    "node_modules/prosemirror-menu": {
      "version": "1.3.2",
      "resolved": "https://registry.npmjs.org/prosemirror-menu/-/prosemirror-menu-1.3.2.tgz",
      "integrity": "sha512-6VgUJTYod0nMBlCaYJGhXGLu7Gt4AvcwcOq0YfJCY/6Uh+3S7UsWhpy6rJFCBFOmonq1hD8KyWOtZhkppd4YPg==",
      "license": "MIT",
      "dependencies": {
        "crelt": "^1.0.0",
        "prosemirror-commands": "^1.0.0",
        "prosemirror-history": "^1.0.0",
        "prosemirror-state": "^1.0.0"
      }
    },
    "node_modules/prosemirror-model": {
      "version": "1.25.11",
      "resolved": "https://registry.npmjs.org/prosemirror-model/-/prosemirror-model-1.25.11.tgz",
      "integrity": "sha512-QWg9RhnpLlogAmp3p96uEFrE5txQpFynd4vhBAELkwgOCWQs/X0yCzB3/hrHqiPwf91RG5KyWq6553zs9JqIOQ==",
      "license": "MIT",
      "dependencies": {
        "orderedmap": "^2.0.0"
      }
    },
    "node_modules/prosemirror-schema-basic": {
      "version": "1.2.4",
      "resolved": "https://registry.npmjs.org/prosemirror-schema-basic/-/prosemirror-schema-basic-1.2.4.tgz",
      "integrity": "sha512-ELxP4TlX3yr2v5rM7Sb70SqStq5NvI15c0j9j/gjsrO5vaw+fnnpovCLEGIcpeGfifkuqJwl4fon6b+KdrODYQ==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-model": "^1.25.0"
      }
    },
    "node_modules/prosemirror-schema-list": {
      "version": "1.5.1",
      "resolved": "https://registry.npmjs.org/prosemirror-schema-list/-/prosemirror-schema-list-1.5.1.tgz",
      "integrity": "sha512-927lFx/uwyQaGwJxLWCZRkjXG0p48KpMj6ueoYiu4JX05GGuGcgzAy62dfiV8eFZftgyBUvLx76RsMe20fJl+Q==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-model": "^1.0.0",
        "prosemirror-state": "^1.0.0",
        "prosemirror-transform": "^1.7.3"
      }
    },
    "node_modules/prosemirror-state": {
      "version": "1.4.4",
      "resolved": "https://registry.npmjs.org/prosemirror-state/-/prosemirror-state-1.4.4.tgz",
      "integrity": "sha512-6jiYHH2CIGbCfnxdHbXZ12gySFY/fz/ulZE333G6bPqIZ4F+TXo9ifiR86nAHpWnfoNjOb3o5ESi7J8Uz1jXHw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-model": "^1.0.0",
        "prosemirror-transform": "^1.0.0",
        "prosemirror-view": "^1.27.0"
      }
    },
    "node_modules/prosemirror-tables": {
      "version": "1.8.5",
      "resolved": "https://registry.npmjs.org/prosemirror-tables/-/prosemirror-tables-1.8.5.tgz",
      "integrity": "sha512-V/0cDCsHKHe/tfWkeCmthNUcEp1IVO3p6vwN8XtwE9PZQLAZJigbw3QoraAdfJPir4NKJtNvOB8oYGKRl+t0Dw==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-keymap": "^1.2.3",
        "prosemirror-model": "^1.25.4",
        "prosemirror-state": "^1.4.4",
        "prosemirror-transform": "^1.10.5",
        "prosemirror-view": "^1.41.4"
      }
    },
    "node_modules/prosemirror-trailing-node": {
      "version": "3.0.0",
      "resolved": "https://registry.npmjs.org/prosemirror-trailing-node/-/prosemirror-trailing-node-3.0.0.tgz",
      "integrity": "sha512-xiun5/3q0w5eRnGYfNlW1uU9W6x5MoFKWwq/0TIRgt09lv7Hcser2QYV8t4muXbEr+Fwo0geYn79Xs4GKywrRQ==",
      "license": "MIT",
      "dependencies": {
        "@remirror/core-constants": "3.0.0",
        "escape-string-regexp": "^4.0.0"
      },
      "peerDependencies": {
        "prosemirror-model": "^1.22.1",
        "prosemirror-state": "^1.4.2",
        "prosemirror-view": "^1.33.8"
      }
    },
    "node_modules/prosemirror-transform": {
      "version": "1.12.1",
      "resolved": "https://registry.npmjs.org/prosemirror-transform/-/prosemirror-transform-1.12.1.tgz",
      "integrity": "sha512-t4F5615FycnCqsX7ShTUs8+jfnwcf46kuFRvSl/3qFx2QTZ4DjgowesLHQXcFP7G//TjesqZG3WtgL7vdyVJyA==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-model": "^1.21.0"
      }
    },
    "node_modules/prosemirror-view": {
      "version": "1.42.3",
      "resolved": "https://registry.npmjs.org/prosemirror-view/-/prosemirror-view-1.42.3.tgz",
      "integrity": "sha512-oTN7EtH+CpwxU9NrwEYWd0UZ4JUx7l048l5A2Xppm4p/60isZYLnth9QVQmC3VRIvdrIWCxwZSd+Uz791G31/w==",
      "license": "MIT",
      "dependencies": {
        "prosemirror-model": "^1.25.8",
        "prosemirror-state": "^1.0.0",
        "prosemirror-transform": "^1.1.0"
      }
    },
    "node_modules/punycode.js": {
      "version": "2.3.1",
      "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz",
      "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==",
      "license": "MIT",
      "engines": {
        "node": ">=6"
      }
    },
    "node_modules/rope-sequence": {
      "version": "1.3.4",
      "resolved": "https://registry.npmjs.org/rope-sequence/-/rope-sequence-1.3.4.tgz",
      "integrity": "sha512-UT5EDe2cu2E/6O4igUr5PSFs23nvvukicWHx6GnOPlHAiiYbzNuCRQCuiUdHJQcqKalLKlrYJnjY0ySGsXNQXQ==",
      "license": "MIT"
    },
    "node_modules/uc.micro": {
      "version": "2.1.0",
      "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz",
      "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==",
      "license": "MIT"
    },
    "node_modules/w3c-keyname": {
      "version": "2.2.8",
      "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz",
      "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==",
      "license": "MIT"
    }
  }
}
package.json
{
  "name": "sample-tiptap-pm-ishistorytransaction",
  "version": "1.0.0",
  "type": "module",
  "private": true,
  "dependencies": {
    "@tiptap/pm": "3.11.0"
  }
}
spec.json
{
  "schemaVersion": 1,
  "goal": "verify @tiptap/pm.isHistoryTransaction in pkg:npm/%40tiptap/pm@3.11.0",
  "kind": "HOW",
  "packages": [
    "pkg:npm/%40tiptap/pm@3.11.0"
  ],
  "symbols": [
    "@tiptap/pm.isHistoryTransaction"
  ]
}
test/contract.mjs
import assert from 'node:assert/strict';
import {
  isHistoryTransaction,
  history,
  undo,
  redo,
  undoNoScroll,
  redoNoScroll,
  closeHistory,
  EditorState,
  schema
} from '../index.mjs';

// 1. isHistoryTransaction is a function exported by @tiptap/pm/history
{
  assert.equal(typeof isHistoryTransaction, 'function', 'isHistoryTransaction must be a function');
}

// 2. isHistoryTransaction returns false for a newly created transaction
{
  const state = EditorState.create({ schema, plugins: [history()] });
  const tr = state.tr;
  assert.equal(isHistoryTransaction(tr), false, 'new transaction must not be a history transaction');
}

// 3. isHistoryTransaction returns false for standard text editing transactions
{
  const state = EditorState.create({ schema, plugins: [history()] });
  const tr = state.tr.insertText('Sample edit');
  assert.equal(isHistoryTransaction(tr), false, 'text edit transaction must not be a history transaction');
}

// 4. isHistoryTransaction returns true for transactions dispatched during an undo operation
{
  let state = EditorState.create({ schema, plugins: [history()] });
  state = state.apply(state.tr.insertText('Sample edit'));
  let undoTr = null;
  const dispatched = undo(state, (tr) => {
    undoTr = tr;
    state = state.apply(tr);
  });
  assert.equal(dispatched, true, 'undo must return true');
  assert.ok(undoTr != null, 'undo must supply a transaction');
  assert.equal(isHistoryTransaction(undoTr), true, 'undo transaction must be recognized by isHistoryTransaction');
}

// 5. isHistoryTransaction returns true for transactions dispatched during a redo operation
{
  let state = EditorState.create({ schema, plugins: [history()] });
  state = state.apply(state.tr.insertText('Sample edit'));
  undo(state, (tr) => { state = state.apply(tr); });

  let redoTr = null;
  const dispatched = redo(state, (tr) => {
    redoTr = tr;
    state = state.apply(tr);
  });
  assert.equal(dispatched, true, 'redo must return true');
  assert.ok(redoTr != null, 'redo must supply a transaction');
  assert.equal(isHistoryTransaction(redoTr), true, 'redo transaction must be recognized by isHistoryTransaction');
}

// 6. isHistoryTransaction returns true for transactions dispatched by undoNoScroll
{
  let state = EditorState.create({ schema, plugins: [history()] });
  state = state.apply(state.tr.insertText('NoScroll test'));
  let undoTr = null;
  const dispatched = undoNoScroll(state, (tr) => {
    undoTr = tr;
    state = state.apply(tr);
  });
  assert.equal(dispatched, true, 'undoNoScroll must return true');
  assert.ok(undoTr != null, 'undoNoScroll must supply a transaction');
  assert.equal(isHistoryTransaction(undoTr), true, 'undoNoScroll transaction must be recognized by isHistoryTransaction');
}

// 7. isHistoryTransaction returns true for transactions dispatched by redoNoScroll
{
  let state = EditorState.create({ schema, plugins: [history()] });
  state = state.apply(state.tr.insertText('NoScroll test'));
  undo(state, (tr) => { state = state.apply(tr); });

  let redoTr = null;
  const dispatched = redoNoScroll(state, (tr) => {
    redoTr = tr;
    state = state.apply(tr);
  });
  assert.equal(dispatched, true, 'redoNoScroll must return true');
  assert.ok(redoTr != null, 'redoNoScroll must supply a transaction');
  assert.equal(isHistoryTransaction(redoTr), true, 'redoNoScroll transaction must be recognized by isHistoryTransaction');
}

// 8. isHistoryTransaction returns false for transactions created with closeHistory
{
  const state = EditorState.create({ schema, plugins: [history()] });
  const tr = closeHistory(state.tr);
  assert.equal(isHistoryTransaction(tr), false, 'closeHistory transaction must not be a history transaction');
}

// 9. isHistoryTransaction returns false for transactions configured with addToHistory false
{
  const state = EditorState.create({ schema, plugins: [history()] });
  const tr = state.tr.insertText('Unrecorded text');
  tr.setMeta('addToHistory', false);
  assert.equal(isHistoryTransaction(tr), false, 'addToHistory false transaction must not be a history transaction');
}

// 10. isHistoryTransaction returns a boolean value for all transaction inputs
{
  const state = EditorState.create({ schema, plugins: [history()] });
  const tr1 = state.tr;
  assert.equal(typeof isHistoryTransaction(tr1), 'boolean', 'result must be boolean for empty transaction');
  const tr2 = state.tr.insertText('Text');
  assert.equal(typeof isHistoryTransaction(tr2), 'boolean', 'result must be boolean for edit transaction');
}

console.log('All @tiptap/pm.isHistoryTransaction contract tests passed successfully.');

Исходный сидер

аноним