1
0
mirror of https://github.com/laurent22/joplin.git synced 2025-04-01 21:24:45 +02:00

Desktop, CLI: When exporting as HTML, pack all images, styles and scripts inside the HTML file

This commit is contained in:
Laurent Cozic 2021-11-18 15:08:13 +00:00
parent 2b66759e3a
commit 98ed2be518
7 changed files with 355 additions and 498 deletions

View File

@ -1,489 +1,321 @@
{ {
"name": "@joplin/htmlpack", "name": "@joplin/htmlpack",
"version": "1.0.1", "version": "2.6",
"lockfileVersion": 2, "lockfileVersion": 2,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "@joplin/htmlpack", "name": "@joplin/htmlpack",
"version": "1.0.0", "version": "2.6",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"@joplin/fork-htmlparser2": "^4.1.34", "css": "^3.0.0",
"css": "^3.0.0", "datauri": "^4.1.0",
"datauri": "^4.1.0", "fs-extra": "^10.0.0",
"fs-extra": "^10.0.0", "html-entities": "^1.2.1"
"html-entities": "^1.2.1" },
}, "devDependencies": {
"devDependencies": { "@types/fs-extra": "^9.0.6"
"@types/fs-extra": "^9.0.6" }
} },
}, "../fork-htmlparser2": {
"../fork-htmlparser2": { "name": "@joplin/fork-htmlparser2",
"name": "@joplin/fork-htmlparser2", "version": "4.1.34",
"version": "4.1.34", "extraneous": true,
"extraneous": true, "license": "MIT",
"license": "MIT", "dependencies": {
"dependencies": { "domelementtype": "^2.0.1",
"domelementtype": "^2.0.1", "domhandler": "^3.0.0",
"domhandler": "^3.0.0", "domutils": "^2.0.0",
"domutils": "^2.0.0", "entities": "^2.0.0",
"entities": "^2.0.0", "fs-extra": "^10.0.0"
"fs-extra": "^10.0.0" },
}, "devDependencies": {
"devDependencies": { "@types/jest": "^25.1.3",
"@types/jest": "^25.1.3", "@types/node": "^13.1.1",
"@types/node": "^13.1.1", "@typescript-eslint/eslint-plugin": "^1.13.0",
"@typescript-eslint/eslint-plugin": "^1.13.0", "@typescript-eslint/parser": "^1.13.0",
"@typescript-eslint/parser": "^1.13.0", "coveralls": "^3.0.1",
"coveralls": "^3.0.1", "eslint": "^6.0.0",
"eslint": "^6.0.0", "eslint-config-prettier": "^6.0.0",
"eslint-config-prettier": "^6.0.0", "jest": "^26.6.3",
"jest": "^26.6.3", "prettier": "^1.18.2",
"prettier": "^1.18.2", "ts-jest": "^24.0.2",
"ts-jest": "^24.0.2", "typescript": "^3.5.3"
"typescript": "^3.5.3" }
} },
}, "node_modules/@types/fs-extra": {
"node_modules/@joplin/fork-htmlparser2": { "version": "9.0.13",
"version": "4.1.34", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
"resolved": "https://registry.npmjs.org/@joplin/fork-htmlparser2/-/fork-htmlparser2-4.1.34.tgz", "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
"integrity": "sha512-1/tQZEDnI36RaEJte0eumw1/c8OhmJOpgFyW+Nxsk2u/vvcgnEvjFjauiH2ZxtO5FTJB3BMQ4M23+Y5dw2cnnw==", "dev": true,
"dependencies": { "dependencies": {
"domelementtype": "^2.0.1", "@types/node": "*"
"domhandler": "^3.0.0", }
"domutils": "^2.0.0", },
"entities": "^2.0.0" "node_modules/@types/node": {
} "version": "16.10.1",
}, "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.1.tgz",
"node_modules/@types/fs-extra": { "integrity": "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w==",
"version": "9.0.13", "dev": true
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", },
"integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "node_modules/atob": {
"dev": true, "version": "2.1.2",
"dependencies": { "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"@types/node": "*" "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==",
} "bin": {
}, "atob": "bin/atob.js"
"node_modules/@types/node": { },
"version": "16.10.1", "engines": {
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.1.tgz", "node": ">= 4.5.0"
"integrity": "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w==", }
"dev": true },
}, "node_modules/css": {
"node_modules/atob": { "version": "3.0.0",
"version": "2.1.2", "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", "dependencies": {
"bin": { "inherits": "^2.0.4",
"atob": "bin/atob.js" "source-map": "^0.6.1",
}, "source-map-resolve": "^0.6.0"
"engines": { }
"node": ">= 4.5.0" },
} "node_modules/datauri": {
}, "version": "4.1.0",
"node_modules/css": { "resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz",
"version": "3.0.0", "integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==",
"resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", "dependencies": {
"integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", "image-size": "1.0.0",
"dependencies": { "mimer": "^2.0.2"
"inherits": "^2.0.4", },
"source-map": "^0.6.1", "engines": {
"source-map-resolve": "^0.6.0" "node": ">= 10"
} }
}, },
"node_modules/datauri": { "node_modules/decode-uri-component": {
"version": "4.1.0", "version": "0.2.0",
"resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz", "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==", "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=",
"dependencies": { "engines": {
"image-size": "1.0.0", "node": ">=0.10"
"mimer": "^2.0.2" }
}, },
"engines": { "node_modules/fs-extra": {
"node": ">= 10" "version": "10.0.0",
} "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
}, "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
"node_modules/decode-uri-component": { "dependencies": {
"version": "0.2.0", "graceful-fs": "^4.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", "jsonfile": "^6.0.1",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", "universalify": "^2.0.0"
"engines": { },
"node": ">=0.10" "engines": {
} "node": ">=12"
}, }
"node_modules/dom-serializer": { },
"version": "1.3.2", "node_modules/graceful-fs": {
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", "version": "4.2.8",
"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
"dependencies": { "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
"domelementtype": "^2.0.1", },
"domhandler": "^4.2.0", "node_modules/html-entities": {
"entities": "^2.0.0" "version": "1.4.0",
}, "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
"funding": { "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA=="
"url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" },
} "node_modules/image-size": {
}, "version": "1.0.0",
"node_modules/dom-serializer/node_modules/domhandler": { "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz",
"version": "4.2.2", "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", "dependencies": {
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "queue": "6.0.2"
"dependencies": { },
"domelementtype": "^2.2.0" "bin": {
}, "image-size": "bin/image-size.js"
"engines": { },
"node": ">= 4" "engines": {
}, "node": ">=12.0.0"
"funding": { }
"url": "https://github.com/fb55/domhandler?sponsor=1" },
} "node_modules/inherits": {
}, "version": "2.0.4",
"node_modules/domelementtype": { "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"version": "2.2.0", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", },
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", "node_modules/jsonfile": {
"funding": [ "version": "6.1.0",
{ "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"type": "github", "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"url": "https://github.com/sponsors/fb55" "dependencies": {
} "universalify": "^2.0.0"
] },
}, "optionalDependencies": {
"node_modules/domhandler": { "graceful-fs": "^4.1.6"
"version": "3.3.0", }
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", },
"integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", "node_modules/mimer": {
"dependencies": { "version": "2.0.2",
"domelementtype": "^2.0.1" "resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz",
}, "integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g==",
"engines": { "bin": {
"node": ">= 4" "mimer": "bin/mimer"
}, },
"funding": { "engines": {
"url": "https://github.com/fb55/domhandler?sponsor=1" "node": ">= 12"
} }
}, },
"node_modules/domutils": { "node_modules/queue": {
"version": "2.8.0", "version": "6.0.2",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
"integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
"dependencies": { "dependencies": {
"dom-serializer": "^1.0.1", "inherits": "~2.0.3"
"domelementtype": "^2.2.0", }
"domhandler": "^4.2.0" },
}, "node_modules/source-map": {
"funding": { "version": "0.6.1",
"url": "https://github.com/fb55/domutils?sponsor=1" "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
} "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
}, "engines": {
"node_modules/domutils/node_modules/domhandler": { "node": ">=0.10.0"
"version": "4.2.2", }
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz", },
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==", "node_modules/source-map-resolve": {
"dependencies": { "version": "0.6.0",
"domelementtype": "^2.2.0" "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
}, "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
"engines": { "dependencies": {
"node": ">= 4" "atob": "^2.1.2",
}, "decode-uri-component": "^0.2.0"
"funding": { }
"url": "https://github.com/fb55/domhandler?sponsor=1" },
} "node_modules/universalify": {
}, "version": "2.0.0",
"node_modules/entities": { "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"version": "2.2.0", "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", "engines": {
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", "node": ">= 10.0.0"
"funding": { }
"url": "https://github.com/fb55/entities?sponsor=1" }
} },
}, "dependencies": {
"node_modules/fs-extra": { "@types/fs-extra": {
"version": "10.0.0", "version": "9.0.13",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz", "resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz",
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==", "integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==",
"dependencies": { "dev": true,
"graceful-fs": "^4.2.0", "requires": {
"jsonfile": "^6.0.1", "@types/node": "*"
"universalify": "^2.0.0" }
}, },
"engines": { "@types/node": {
"node": ">=12" "version": "16.10.1",
} "resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.1.tgz",
}, "integrity": "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w==",
"node_modules/graceful-fs": { "dev": true
"version": "4.2.8", },
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz", "atob": {
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg==" "version": "2.1.2",
}, "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"node_modules/html-entities": { "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
"version": "1.4.0", },
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", "css": {
"integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==" "version": "3.0.0",
}, "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
"node_modules/image-size": { "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==",
"version": "1.0.0", "requires": {
"resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz", "inherits": "^2.0.4",
"integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==", "source-map": "^0.6.1",
"dependencies": { "source-map-resolve": "^0.6.0"
"queue": "6.0.2" }
}, },
"bin": { "datauri": {
"image-size": "bin/image-size.js" "version": "4.1.0",
}, "resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz",
"engines": { "integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==",
"node": ">=12.0.0" "requires": {
} "image-size": "1.0.0",
}, "mimer": "^2.0.2"
"node_modules/inherits": { }
"version": "2.0.4", },
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", "decode-uri-component": {
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" "version": "0.2.0",
}, "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"node_modules/jsonfile": { "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
"version": "6.1.0", },
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", "fs-extra": {
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "version": "10.0.0",
"dependencies": { "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
"universalify": "^2.0.0" "integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
}, "requires": {
"optionalDependencies": { "graceful-fs": "^4.2.0",
"graceful-fs": "^4.1.6" "jsonfile": "^6.0.1",
} "universalify": "^2.0.0"
}, }
"node_modules/mimer": { },
"version": "2.0.2", "graceful-fs": {
"resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz", "version": "4.2.8",
"integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g==", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
"bin": { "integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
"mimer": "bin/mimer" },
}, "html-entities": {
"engines": { "version": "1.4.0",
"node": ">= 12" "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
} "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA=="
}, },
"node_modules/queue": { "image-size": {
"version": "6.0.2", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz",
"integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", "integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==",
"dependencies": { "requires": {
"inherits": "~2.0.3" "queue": "6.0.2"
} }
}, },
"node_modules/source-map": { "inherits": {
"version": "0.6.1", "version": "2.0.4",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
"engines": { },
"node": ">=0.10.0" "jsonfile": {
} "version": "6.1.0",
}, "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"node_modules/source-map-resolve": { "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"version": "0.6.0", "requires": {
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", "graceful-fs": "^4.1.6",
"integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", "universalify": "^2.0.0"
"dependencies": { }
"atob": "^2.1.2", },
"decode-uri-component": "^0.2.0" "mimer": {
} "version": "2.0.2",
}, "resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz",
"node_modules/universalify": { "integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g=="
"version": "2.0.0", },
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", "queue": {
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "version": "6.0.2",
"engines": { "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
"node": ">= 10.0.0" "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
} "requires": {
} "inherits": "~2.0.3"
}, }
"dependencies": { },
"@joplin/fork-htmlparser2": { "source-map": {
"version": "4.1.34", "version": "0.6.1",
"resolved": "https://registry.npmjs.org/@joplin/fork-htmlparser2/-/fork-htmlparser2-4.1.34.tgz", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-1/tQZEDnI36RaEJte0eumw1/c8OhmJOpgFyW+Nxsk2u/vvcgnEvjFjauiH2ZxtO5FTJB3BMQ4M23+Y5dw2cnnw==", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
"requires": { },
"domelementtype": "^2.0.1", "source-map-resolve": {
"domhandler": "^3.0.0", "version": "0.6.0",
"domutils": "^2.0.0", "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
"entities": "^2.0.0" "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
} "requires": {
}, "atob": "^2.1.2",
"@types/fs-extra": { "decode-uri-component": "^0.2.0"
"version": "9.0.13", }
"resolved": "https://registry.npmjs.org/@types/fs-extra/-/fs-extra-9.0.13.tgz", },
"integrity": "sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==", "universalify": {
"dev": true, "version": "2.0.0",
"requires": { "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"@types/node": "*" "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
} }
}, }
"@types/node": {
"version": "16.10.1",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.10.1.tgz",
"integrity": "sha512-4/Z9DMPKFexZj/Gn3LylFgamNKHm4K3QDi0gz9B26Uk0c8izYf97B5fxfpspMNkWlFupblKM/nV8+NA9Ffvr+w==",
"dev": true
},
"atob": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz",
"integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg=="
},
"css": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz",
"integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==",
"requires": {
"inherits": "^2.0.4",
"source-map": "^0.6.1",
"source-map-resolve": "^0.6.0"
}
},
"datauri": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/datauri/-/datauri-4.1.0.tgz",
"integrity": "sha512-y17kh32+I82G+ED9MNWFkZiP/Cq/vO1hN9+tSZsT9C9qn3NrvcBnh7crSepg0AQPge1hXx2Ca44s1FRdv0gFWA==",
"requires": {
"image-size": "1.0.0",
"mimer": "^2.0.2"
}
},
"decode-uri-component": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz",
"integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU="
},
"dom-serializer": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz",
"integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==",
"requires": {
"domelementtype": "^2.0.1",
"domhandler": "^4.2.0",
"entities": "^2.0.0"
},
"dependencies": {
"domhandler": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
"requires": {
"domelementtype": "^2.2.0"
}
}
}
},
"domelementtype": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz",
"integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A=="
},
"domhandler": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz",
"integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==",
"requires": {
"domelementtype": "^2.0.1"
}
},
"domutils": {
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz",
"integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==",
"requires": {
"dom-serializer": "^1.0.1",
"domelementtype": "^2.2.0",
"domhandler": "^4.2.0"
},
"dependencies": {
"domhandler": {
"version": "4.2.2",
"resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.2.tgz",
"integrity": "sha512-PzE9aBMsdZO8TK4BnuJwH0QT41wgMbRzuZrHUcpYncEjmQazq8QEaBWgLG7ZyC/DAZKEgglpIA6j4Qn/HmxS3w==",
"requires": {
"domelementtype": "^2.2.0"
}
}
}
},
"entities": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz",
"integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A=="
},
"fs-extra": {
"version": "10.0.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.0.0.tgz",
"integrity": "sha512-C5owb14u9eJwizKGdchcDUQeFtlSHHthBk8pbX9Vc1PFZrLombudjDnNns88aYslCyF6IY5SUw3Roz6xShcEIQ==",
"requires": {
"graceful-fs": "^4.2.0",
"jsonfile": "^6.0.1",
"universalify": "^2.0.0"
}
},
"graceful-fs": {
"version": "4.2.8",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.8.tgz",
"integrity": "sha512-qkIilPUYcNhJpd33n0GBXTB1MMPp14TxEsEs0pTrsSVucApsYzW5V+Q8Qxhik6KU3evy+qkAAowTByymK0avdg=="
},
"html-entities": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz",
"integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA=="
},
"image-size": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-1.0.0.tgz",
"integrity": "sha512-JLJ6OwBfO1KcA+TvJT+v8gbE6iWbj24LyDNFgFEN0lzegn6cC6a/p3NIDaepMsJjQjlUWqIC7wJv8lBFxPNjcw==",
"requires": {
"queue": "6.0.2"
}
},
"inherits": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
"integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ=="
},
"jsonfile": {
"version": "6.1.0",
"resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz",
"integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==",
"requires": {
"graceful-fs": "^4.1.6",
"universalify": "^2.0.0"
}
},
"mimer": {
"version": "2.0.2",
"resolved": "https://registry.npmjs.org/mimer/-/mimer-2.0.2.tgz",
"integrity": "sha512-izxvjsB7Ur5HrTbPu6VKTrzxSMBFBqyZQc6dWlZNQ4/wAvf886fD4lrjtFd8IQ8/WmZKdxKjUtqFFNaj3hQ52g=="
},
"queue": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz",
"integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==",
"requires": {
"inherits": "~2.0.3"
}
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
"integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g=="
},
"source-map-resolve": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz",
"integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==",
"requires": {
"atob": "^2.1.2",
"decode-uri-component": "^0.2.0"
}
},
"universalify": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz",
"integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ=="
}
}
} }

View File

@ -1,9 +1,12 @@
{ {
"name": "@joplin/htmlpack", "name": "@joplin/htmlpack",
"version": "1.0.1", "version": "2.6.0",
"description": "Pack an HTML file and all its linked resources into a single HTML file", "description": "Pack an HTML file and all its linked resources into a single HTML file",
"main": "dist/index.js", "main": "dist/index.js",
"private": true, "types": "src/index.ts",
"publishConfig": {
"access": "public"
},
"scripts": { "scripts": {
"tsc": "tsc --project tsconfig.json", "tsc": "tsc --project tsconfig.json",
"watch": "tsc --watch --project tsconfig.json" "watch": "tsc --watch --project tsconfig.json"

View File

@ -137,7 +137,7 @@ function dirname(path: string) {
return s.join('/'); return s.join('/');
} }
export default async function htmlpack(inputFile: string, outputFile: string) { export default async function htmlpack(inputFile: string, outputFile: string): Promise<void> {
const inputHtml = await fs.readFile(inputFile, 'utf8'); const inputHtml = await fs.readFile(inputFile, 'utf8');
const baseDir = dirname(inputFile); const baseDir = dirname(inputFile);

View File

@ -7,7 +7,7 @@
"": { "": {
"name": "@joplin/lib", "name": "@joplin/lib",
"version": "2.6.2", "version": "2.6.2",
"license": "ISC", "license": "MIT",
"dependencies": { "dependencies": {
"async-mutex": "^0.1.3", "async-mutex": "^0.1.3",
"aws-sdk": "^2.588.0", "aws-sdk": "^2.588.0",

View File

@ -4,7 +4,7 @@
"description": "Joplin Core library", "description": "Joplin Core library",
"author": "Laurent Cozic", "author": "Laurent Cozic",
"homepage": "", "homepage": "",
"license": "ISC", "license": "MIT",
"publishConfig": { "publishConfig": {
"access": "public" "access": "public"
}, },
@ -30,7 +30,8 @@
"dependencies": { "dependencies": {
"@joplin/fork-htmlparser2": "^4.1.38", "@joplin/fork-htmlparser2": "^4.1.38",
"@joplin/fork-sax": "^1.2.42", "@joplin/fork-sax": "^1.2.42",
"@joplin/renderer": "^2.6.2", "@joplin/renderer": "~2.6",
"@joplin/htmlpack": "~2.6",
"@joplin/turndown": "^4.0.60", "@joplin/turndown": "^4.0.60",
"@joplin/turndown-plugin-gfm": "^1.0.42", "@joplin/turndown-plugin-gfm": "^1.0.42",
"async-mutex": "^0.1.3", "async-mutex": "^0.1.3",

View File

@ -9,6 +9,7 @@ import { MarkupToHtml } from '@joplin/renderer';
import { ResourceEntity } from '../database/types'; import { ResourceEntity } from '../database/types';
import { contentScriptsToRendererRules } from '../plugins/utils/loadContentScripts'; import { contentScriptsToRendererRules } from '../plugins/utils/loadContentScripts';
import { basename, friendlySafeFilename, rtrimSlashes, dirname } from '../../path-utils'; import { basename, friendlySafeFilename, rtrimSlashes, dirname } from '../../path-utils';
import htmlpack from '@joplin/htmlpack';
const { themeStyle } = require('../../theme'); const { themeStyle } = require('../../theme');
const { escapeHtml } = require('../../string-utils.js'); const { escapeHtml } = require('../../string-utils.js');
const { assetsToHeaders } = require('@joplin/renderer'); const { assetsToHeaders } = require('@joplin/renderer');
@ -23,6 +24,7 @@ export default class InteropService_Exporter_Html extends InteropService_Exporte
private markupToHtml_: MarkupToHtml; private markupToHtml_: MarkupToHtml;
private resources_: ResourceEntity[] = []; private resources_: ResourceEntity[] = [];
private style_: any; private style_: any;
private packIntoSingleFile_: boolean = false;
async init(path: string, options: any = {}) { async init(path: string, options: any = {}) {
this.customCss_ = options.customCss ? options.customCss : ''; this.customCss_ = options.customCss ? options.customCss : '';
@ -30,6 +32,7 @@ export default class InteropService_Exporter_Html extends InteropService_Exporte
if (this.metadata().target === 'file') { if (this.metadata().target === 'file') {
this.destDir_ = dirname(path); this.destDir_ = dirname(path);
this.filePath_ = path; this.filePath_ = path;
this.packIntoSingleFile_ = true;
} else { } else {
this.destDir_ = path; this.destDir_ = path;
this.filePath_ = null; this.filePath_ = null;
@ -118,7 +121,9 @@ export default class InteropService_Exporter_Html extends InteropService_Exporte
const asset = result.pluginAssets[i]; const asset = result.pluginAssets[i];
const filePath = asset.pathIsAbsolute ? asset.path : `${libRootPath}/node_modules/@joplin/renderer/assets/${asset.name}`; const filePath = asset.pathIsAbsolute ? asset.path : `${libRootPath}/node_modules/@joplin/renderer/assets/${asset.name}`;
const destPath = `${dirname(noteFilePath)}/pluginAssets/${asset.name}`; const destPath = `${dirname(noteFilePath)}/pluginAssets/${asset.name}`;
await shim.fsDriver().mkdir(dirname(destPath)); const dir = dirname(destPath);
await shim.fsDriver().mkdir(dir);
this.createdDirs_.push(dir);
await shim.fsDriver().copy(filePath, destPath); await shim.fsDriver().copy(filePath, destPath);
} }
@ -147,5 +152,20 @@ export default class InteropService_Exporter_Html extends InteropService_Exporte
this.resources_.push(resource); this.resources_.push(resource);
} }
async close() {} public async close() {
if (this.packIntoSingleFile_) {
const tempFilePath = `${this.filePath_}.tmp`;
await shim.fsDriver().move(this.filePath_, tempFilePath);
await htmlpack(tempFilePath, this.filePath_);
await shim.fsDriver().remove(tempFilePath);
for (const d of this.createdDirs_) {
await shim.fsDriver().remove(d);
}
await shim.fsDriver().remove(this.resourceDir_);
await shim.fsDriver().remove(`${this.destDir_}/pluginAssets`);
}
}
} }

View File

@ -118,13 +118,14 @@ async function main() {
if (!options.updateDependenciesVersion && !options.updateVersion) throw new Error('Nothing to do!'); if (!options.updateDependenciesVersion && !options.updateVersion) throw new Error('Nothing to do!');
await updatePackageVersion(`${rootDir}/packages/app-desktop/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/app-cli/package.json`, majorMinorVersion, options); await updatePackageVersion(`${rootDir}/packages/app-cli/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/app-desktop/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/generator-joplin/package.json`, majorMinorVersion, options); await updatePackageVersion(`${rootDir}/packages/generator-joplin/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/server/package.json`, majorMinorVersion, options); await updatePackageVersion(`${rootDir}/packages/htmlpack/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/plugin-repo-cli/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/lib/package.json`, majorMinorVersion, options); await updatePackageVersion(`${rootDir}/packages/lib/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/plugin-repo-cli/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/renderer/package.json`, majorMinorVersion, options); await updatePackageVersion(`${rootDir}/packages/renderer/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/server/package.json`, majorMinorVersion, options);
await updatePackageVersion(`${rootDir}/packages/tools/package.json`, majorMinorVersion, options); await updatePackageVersion(`${rootDir}/packages/tools/package.json`, majorMinorVersion, options);
if (options.updateVersion) { if (options.updateVersion) {