Simplify publish process
This commit is contained in:
@@ -1,5 +1,11 @@
|
||||
# SVG-Edit CHANGES
|
||||
|
||||
## 7.4.0
|
||||
- Scripts: adapt `build` and `publish` for root-managed builds/publishes across workspaces.
|
||||
- Docs: Update release/publish instructions to reflect workspace versioning and the new `scripts/version-bump.mjs` helper.
|
||||
- Improve the toolbar behavior
|
||||
- Add Flip buttons
|
||||
|
||||
## 7.3.8
|
||||
- Update svgcanvas to 7.2.7
|
||||
|
||||
|
||||
@@ -16,7 +16,7 @@ works in any modern browser. **SVGEdit** is based on a powerful SVG canvas **@sv
|
||||
|
||||
## Contributions
|
||||
|
||||
SVGEdit is the most popular open source SVG editor. It was started more than 13 years ago by a fantastic team of developers. Unfortunately, the product was not maintained for quite a long time. We decided to give this tool a new life by refreshing many aspects.
|
||||
SVGEdit is the most popular open source SVG editor. It was started more than 15 years ago by a fantastic team of developers. Unfortunately, the product was not maintained for quite a long time. We decided to give this tool a new life by refreshing many aspects.
|
||||
|
||||
Please let us know by creating an issue or a discussion if you wish to contribute.
|
||||
|
||||
|
||||
@@ -1,58 +1,14 @@
|
||||
{"total": {"lines":{"total":5937,"covered":3761,"skipped":0,"pct":63.34},"statements":{"total":8297,"covered":4850,"skipped":0,"pct":58.45},"functions":{"total":1086,"covered":557,"skipped":0,"pct":51.28},"branches":{"total":3023,"covered":1419,"skipped":0,"pct":46.94},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/common/browser.js": {"lines":{"total":25,"covered":24,"skipped":0,"pct":96},"functions":{"total":6,"covered":3,"skipped":0,"pct":50},"statements":{"total":30,"covered":26,"skipped":0,"pct":86.66},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/common/util.js": {"lines":{"total":138,"covered":100,"skipped":0,"pct":72.46},"functions":{"total":14,"covered":14,"skipped":0,"pct":100},"statements":{"total":286,"covered":209,"skipped":0,"pct":73.07},"branches":{"total":196,"covered":119,"skipped":0,"pct":60.71}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/clear.js": {"lines":{"total":22,"covered":22,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":60,"covered":60,"skipped":0,"pct":100},"branches":{"total":4,"covered":4,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/coords.js": {"lines":{"total":252,"covered":181,"skipped":0,"pct":71.82},"functions":{"total":18,"covered":18,"skipped":0,"pct":100},"statements":{"total":577,"covered":318,"skipped":0,"pct":55.11},"branches":{"total":174,"covered":71,"skipped":0,"pct":40.8}}
|
||||
{"total": {"lines":{"total":1903,"covered":1123,"skipped":0,"pct":59.01},"statements":{"total":2952,"covered":1625,"skipped":0,"pct":55.04},"functions":{"total":219,"covered":123,"skipped":0,"pct":56.16},"branches":{"total":853,"covered":417,"skipped":0,"pct":48.88},"branchesTrue":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/common/util.js": {"lines":{"total":138,"covered":99,"skipped":0,"pct":71.73},"functions":{"total":8,"covered":8,"skipped":0,"pct":100},"statements":{"total":194,"covered":136,"skipped":0,"pct":70.1},"branches":{"total":98,"covered":59,"skipped":0,"pct":60.2}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/clear.js": {"lines":{"total":22,"covered":22,"skipped":0,"pct":100},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":38,"covered":38,"skipped":0,"pct":100},"branches":{"total":2,"covered":2,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/coords.js": {"lines":{"total":251,"covered":102,"skipped":0,"pct":40.63},"functions":{"total":12,"covered":8,"skipped":0,"pct":66.66},"statements":{"total":378,"covered":159,"skipped":0,"pct":42.06},"branches":{"total":87,"covered":24,"skipped":0,"pct":27.58}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/dataStorage.js": {"lines":{"total":16,"covered":16,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":20,"covered":20,"skipped":0,"pct":100},"branches":{"total":6,"covered":6,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/draw.js": {"lines":{"total":360,"covered":203,"skipped":0,"pct":56.38},"functions":{"total":56,"covered":32,"skipped":0,"pct":57.14},"statements":{"total":362,"covered":204,"skipped":0,"pct":56.35},"branches":{"total":170,"covered":95,"skipped":0,"pct":55.88}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/history.js": {"lines":{"total":166,"covered":82,"skipped":0,"pct":49.39},"functions":{"total":48,"covered":36,"skipped":0,"pct":75},"statements":{"total":173,"covered":82,"skipped":0,"pct":47.39},"branches":{"total":88,"covered":30,"skipped":0,"pct":34.09}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/math.js": {"lines":{"total":66,"covered":57,"skipped":0,"pct":86.36},"functions":{"total":11,"covered":10,"skipped":0,"pct":90.9},"statements":{"total":77,"covered":65,"skipped":0,"pct":84.41},"branches":{"total":46,"covered":35,"skipped":0,"pct":76.08}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/namespaces.js": {"lines":{"total":6,"covered":6,"skipped":0,"pct":100},"functions":{"total":2,"covered":2,"skipped":0,"pct":100},"statements":{"total":6,"covered":6,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/paint.js": {"lines":{"total":51,"covered":44,"skipped":0,"pct":86.27},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":75,"covered":65,"skipped":0,"pct":86.66},"branches":{"total":24,"covered":21,"skipped":0,"pct":87.5}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/path.js": {"lines":{"total":312,"covered":163,"skipped":0,"pct":52.24},"functions":{"total":39,"covered":13,"skipped":0,"pct":33.33},"statements":{"total":806,"covered":340,"skipped":0,"pct":42.18},"branches":{"total":222,"covered":89,"skipped":0,"pct":40.09}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/recalculate.js": {"lines":{"total":241,"covered":139,"skipped":0,"pct":57.67},"functions":{"total":8,"covered":7,"skipped":0,"pct":87.5},"statements":{"total":530,"covered":241,"skipped":0,"pct":45.47},"branches":{"total":280,"covered":137,"skipped":0,"pct":48.92}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/touch.js": {"lines":{"total":22,"covered":22,"skipped":0,"pct":100},"functions":{"total":5,"covered":5,"skipped":0,"pct":100},"statements":{"total":62,"covered":57,"skipped":0,"pct":91.93},"branches":{"total":12,"covered":8,"skipped":0,"pct":66.66}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/units.js": {"lines":{"total":72,"covered":51,"skipped":0,"pct":70.83},"functions":{"total":10,"covered":8,"skipped":0,"pct":80},"statements":{"total":74,"covered":52,"skipped":0,"pct":70.27},"branches":{"total":28,"covered":15,"skipped":0,"pct":53.57}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/utilities.js": {"lines":{"total":671,"covered":462,"skipped":0,"pct":68.85},"functions":{"total":131,"covered":88,"skipped":0,"pct":67.17},"statements":{"total":1542,"covered":884,"skipped":0,"pct":57.32},"branches":{"total":624,"covered":271,"skipped":0,"pct":43.42}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/ConfigObj.js": {"lines":{"total":105,"covered":50,"skipped":0,"pct":47.61},"functions":{"total":15,"covered":11,"skipped":0,"pct":73.33},"statements":{"total":107,"covered":50,"skipped":0,"pct":46.72},"branches":{"total":79,"covered":30,"skipped":0,"pct":37.97}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/Editor.js": {"lines":{"total":414,"covered":177,"skipped":0,"pct":42.75},"functions":{"total":103,"covered":27,"skipped":0,"pct":26.21},"statements":{"total":420,"covered":177,"skipped":0,"pct":42.14},"branches":{"total":155,"covered":45,"skipped":0,"pct":29.03}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/EditorStartup.js": {"lines":{"total":389,"covered":221,"skipped":0,"pct":56.81},"functions":{"total":58,"covered":25,"skipped":0,"pct":43.1},"statements":{"total":401,"covered":227,"skipped":0,"pct":56.6},"branches":{"total":114,"covered":29,"skipped":0,"pct":25.43}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/MainMenu.js": {"lines":{"total":101,"covered":78,"skipped":0,"pct":77.22},"functions":{"total":15,"covered":13,"skipped":0,"pct":86.66},"statements":{"total":102,"covered":79,"skipped":0,"pct":77.45},"branches":{"total":42,"covered":26,"skipped":0,"pct":61.9}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/Rulers.js": {"lines":{"total":119,"covered":93,"skipped":0,"pct":78.15},"functions":{"total":6,"covered":5,"skipped":0,"pct":83.33},"statements":{"total":124,"covered":96,"skipped":0,"pct":77.41},"branches":{"total":33,"covered":24,"skipped":0,"pct":72.72}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/contextmenu.js": {"lines":{"total":22,"covered":9,"skipped":0,"pct":40.9},"functions":{"total":8,"covered":2,"skipped":0,"pct":25},"statements":{"total":25,"covered":12,"skipped":0,"pct":48},"branches":{"total":15,"covered":5,"skipped":0,"pct":33.33}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/locale.js": {"lines":{"total":15,"covered":10,"skipped":0,"pct":66.66},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":15,"covered":10,"skipped":0,"pct":66.66},"branches":{"total":8,"covered":2,"skipped":0,"pct":25}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/PaintBox.js": {"lines":{"total":64,"covered":35,"skipped":0,"pct":54.68},"functions":{"total":4,"covered":4,"skipped":0,"pct":100},"statements":{"total":67,"covered":35,"skipped":0,"pct":52.23},"branches":{"total":28,"covered":10,"skipped":0,"pct":35.71}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seButton.js": {"lines":{"total":57,"covered":42,"skipped":0,"pct":73.68},"functions":{"total":15,"covered":7,"skipped":0,"pct":46.66},"statements":{"total":60,"covered":43,"skipped":0,"pct":71.66},"branches":{"total":29,"covered":21,"skipped":0,"pct":72.41}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seColorPicker.js": {"lines":{"total":56,"covered":34,"skipped":0,"pct":60.71},"functions":{"total":19,"covered":8,"skipped":0,"pct":42.1},"statements":{"total":57,"covered":34,"skipped":0,"pct":59.64},"branches":{"total":10,"covered":6,"skipped":0,"pct":60}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seExplorerButton.js": {"lines":{"total":99,"covered":56,"skipped":0,"pct":56.56},"functions":{"total":18,"covered":9,"skipped":0,"pct":50},"statements":{"total":102,"covered":56,"skipped":0,"pct":54.9},"branches":{"total":29,"covered":9,"skipped":0,"pct":31.03}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seFlyingButton.js": {"lines":{"total":77,"covered":46,"skipped":0,"pct":59.74},"functions":{"total":15,"covered":10,"skipped":0,"pct":66.66},"statements":{"total":78,"covered":47,"skipped":0,"pct":60.25},"branches":{"total":29,"covered":9,"skipped":0,"pct":31.03}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seInput.js": {"lines":{"total":46,"covered":24,"skipped":0,"pct":52.17},"functions":{"total":16,"covered":5,"skipped":0,"pct":31.25},"statements":{"total":47,"covered":24,"skipped":0,"pct":51.06},"branches":{"total":7,"covered":3,"skipped":0,"pct":42.85}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seList.js": {"lines":{"total":87,"covered":50,"skipped":0,"pct":57.47},"functions":{"total":21,"covered":7,"skipped":0,"pct":33.33},"statements":{"total":89,"covered":52,"skipped":0,"pct":58.42},"branches":{"total":18,"covered":9,"skipped":0,"pct":50}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seListItem.js": {"lines":{"total":39,"covered":25,"skipped":0,"pct":64.1},"functions":{"total":12,"covered":3,"skipped":0,"pct":25},"statements":{"total":40,"covered":26,"skipped":0,"pct":65},"branches":{"total":9,"covered":7,"skipped":0,"pct":77.77}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seMenu.js": {"lines":{"total":27,"covered":21,"skipped":0,"pct":77.77},"functions":{"total":7,"covered":3,"skipped":0,"pct":42.85},"statements":{"total":28,"covered":21,"skipped":0,"pct":75},"branches":{"total":4,"covered":2,"skipped":0,"pct":50}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seMenuItem.js": {"lines":{"total":37,"covered":25,"skipped":0,"pct":67.56},"functions":{"total":9,"covered":4,"skipped":0,"pct":44.44},"statements":{"total":40,"covered":25,"skipped":0,"pct":62.5},"branches":{"total":16,"covered":5,"skipped":0,"pct":31.25}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/sePalette.js": {"lines":{"total":54,"covered":39,"skipped":0,"pct":72.22},"functions":{"total":11,"covered":8,"skipped":0,"pct":72.72},"statements":{"total":54,"covered":39,"skipped":0,"pct":72.22},"branches":{"total":13,"covered":3,"skipped":0,"pct":23.07}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/sePlainBorderButton.js": {"lines":{"total":3,"covered":3,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":3,"covered":3,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/sePlainMenuButton.js": {"lines":{"total":2,"covered":2,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":2,"covered":2,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seSelect.js": {"lines":{"total":56,"covered":42,"skipped":0,"pct":75},"functions":{"total":17,"covered":8,"skipped":0,"pct":47.05},"statements":{"total":59,"covered":44,"skipped":0,"pct":74.57},"branches":{"total":15,"covered":14,"skipped":0,"pct":93.33}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seSpinInput.js": {"lines":{"total":65,"covered":48,"skipped":0,"pct":73.84},"functions":{"total":18,"covered":8,"skipped":0,"pct":44.44},"statements":{"total":66,"covered":48,"skipped":0,"pct":72.72},"branches":{"total":14,"covered":10,"skipped":0,"pct":71.42}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seText.js": {"lines":{"total":28,"covered":18,"skipped":0,"pct":64.28},"functions":{"total":10,"covered":4,"skipped":0,"pct":40},"statements":{"total":29,"covered":18,"skipped":0,"pct":62.06},"branches":{"total":7,"covered":4,"skipped":0,"pct":57.14}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/components/seZoom.js": {"lines":{"total":102,"covered":65,"skipped":0,"pct":63.72},"functions":{"total":28,"covered":9,"skipped":0,"pct":32.14},"statements":{"total":107,"covered":66,"skipped":0,"pct":61.68},"branches":{"total":27,"covered":6,"skipped":0,"pct":22.22}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/SePlainAlertDialog.js": {"lines":{"total":12,"covered":7,"skipped":0,"pct":58.33},"functions":{"total":3,"covered":1,"skipped":0,"pct":33.33},"statements":{"total":12,"covered":7,"skipped":0,"pct":58.33},"branches":{"total":2,"covered":0,"skipped":0,"pct":0}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/cmenuDialog.js": {"lines":{"total":120,"covered":112,"skipped":0,"pct":93.33},"functions":{"total":28,"covered":15,"skipped":0,"pct":53.57},"statements":{"total":131,"covered":116,"skipped":0,"pct":88.54},"branches":{"total":19,"covered":17,"skipped":0,"pct":89.47}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/cmenuLayersDialog.js": {"lines":{"total":61,"covered":51,"skipped":0,"pct":83.6},"functions":{"total":16,"covered":7,"skipped":0,"pct":43.75},"statements":{"total":66,"covered":51,"skipped":0,"pct":77.27},"branches":{"total":13,"covered":12,"skipped":0,"pct":92.3}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/editorPreferencesDialog.js": {"lines":{"total":157,"covered":120,"skipped":0,"pct":76.43},"functions":{"total":30,"covered":8,"skipped":0,"pct":26.66},"statements":{"total":159,"covered":121,"skipped":0,"pct":76.1},"branches":{"total":42,"covered":31,"skipped":0,"pct":73.8}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/exportDialog.js": {"lines":{"total":52,"covered":36,"skipped":0,"pct":69.23},"functions":{"total":14,"covered":5,"skipped":0,"pct":35.71},"statements":{"total":55,"covered":36,"skipped":0,"pct":65.45},"branches":{"total":11,"covered":5,"skipped":0,"pct":45.45}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/imagePropertiesDialog.js": {"lines":{"total":161,"covered":91,"skipped":0,"pct":56.52},"functions":{"total":20,"covered":5,"skipped":0,"pct":25},"statements":{"total":162,"covered":92,"skipped":0,"pct":56.79},"branches":{"total":46,"covered":24,"skipped":0,"pct":52.17}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/seAlertDialog.js": {"lines":{"total":6,"covered":6,"skipped":0,"pct":100},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":6,"covered":6,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/seConfirmDialog.js": {"lines":{"total":8,"covered":7,"skipped":0,"pct":87.5},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":8,"covered":7,"skipped":0,"pct":87.5},"branches":{"total":4,"covered":1,"skipped":0,"pct":25}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/sePromptDialog.js": {"lines":{"total":24,"covered":19,"skipped":0,"pct":79.16},"functions":{"total":7,"covered":6,"skipped":0,"pct":85.71},"statements":{"total":24,"covered":19,"skipped":0,"pct":79.16},"branches":{"total":8,"covered":5,"skipped":0,"pct":62.5}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/seSelectDialog.js": {"lines":{"total":8,"covered":7,"skipped":0,"pct":87.5},"functions":{"total":1,"covered":1,"skipped":0,"pct":100},"statements":{"total":8,"covered":7,"skipped":0,"pct":87.5},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/svgSourceDialog.js": {"lines":{"total":74,"covered":56,"skipped":0,"pct":75.67},"functions":{"total":17,"covered":6,"skipped":0,"pct":35.29},"statements":{"total":75,"covered":56,"skipped":0,"pct":74.66},"branches":{"total":16,"covered":12,"skipped":0,"pct":75}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/se-elix/define/NumberSpinBox.js": {"lines":{"total":1,"covered":1,"skipped":0,"pct":100},"functions":{"total":0,"covered":0,"skipped":0,"pct":100},"statements":{"total":1,"covered":1,"skipped":0,"pct":100},"branches":{"total":0,"covered":0,"skipped":0,"pct":100}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/dialogs/se-elix/src/base/NumberSpinBox.js": {"lines":{"total":54,"covered":31,"skipped":0,"pct":57.4},"functions":{"total":13,"covered":6,"skipped":0,"pct":46.15},"statements":{"total":54,"covered":31,"skipped":0,"pct":57.4},"branches":{"total":46,"covered":33,"skipped":0,"pct":71.73}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/panels/BottomPanel.js": {"lines":{"total":84,"covered":46,"skipped":0,"pct":54.76},"functions":{"total":23,"covered":9,"skipped":0,"pct":39.13},"statements":{"total":84,"covered":46,"skipped":0,"pct":54.76},"branches":{"total":28,"covered":6,"skipped":0,"pct":21.42}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/panels/LayersPanel.js": {"lines":{"total":165,"covered":125,"skipped":0,"pct":75.75},"functions":{"total":27,"covered":19,"skipped":0,"pct":70.37},"statements":{"total":171,"covered":127,"skipped":0,"pct":74.26},"branches":{"total":35,"covered":18,"skipped":0,"pct":51.42}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/panels/LeftPanel.js": {"lines":{"total":57,"covered":28,"skipped":0,"pct":49.12},"functions":{"total":20,"covered":6,"skipped":0,"pct":30},"statements":{"total":58,"covered":28,"skipped":0,"pct":48.27},"branches":{"total":16,"covered":2,"skipped":0,"pct":12.5}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/panels/TopPanel.js": {"lines":{"total":409,"covered":233,"skipped":0,"pct":56.96},"functions":{"total":76,"covered":29,"skipped":0,"pct":38.15},"statements":{"total":421,"covered":236,"skipped":0,"pct":56.05},"branches":{"total":162,"covered":73,"skipped":0,"pct":45.06}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/path.js": {"lines":{"total":312,"covered":130,"skipped":0,"pct":41.66},"functions":{"total":21,"covered":11,"skipped":0,"pct":52.38},"statements":{"total":511,"covered":193,"skipped":0,"pct":37.76},"branches":{"total":111,"covered":33,"skipped":0,"pct":29.72}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/recalculate.js": {"lines":{"total":241,"covered":86,"skipped":0,"pct":35.68},"functions":{"total":5,"covered":4,"skipped":0,"pct":80},"statements":{"total":338,"covered":114,"skipped":0,"pct":33.72},"branches":{"total":140,"covered":50,"skipped":0,"pct":35.71}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/touch.js": {"lines":{"total":22,"covered":22,"skipped":0,"pct":100},"functions":{"total":3,"covered":3,"skipped":0,"pct":100},"statements":{"total":40,"covered":36,"skipped":0,"pct":90},"branches":{"total":6,"covered":5,"skipped":0,"pct":83.33}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/packages/svgcanvas/core/utilities.js": {"lines":{"total":669,"covered":438,"skipped":0,"pct":65.47},"functions":{"total":78,"covered":54,"skipped":0,"pct":69.23},"statements":{"total":991,"covered":630,"skipped":0,"pct":63.57},"branches":{"total":312,"covered":163,"skipped":0,"pct":52.24}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/MainMenu.js": {"lines":{"total":138,"covered":123,"skipped":0,"pct":89.13},"functions":{"total":15,"covered":13,"skipped":0,"pct":86.66},"statements":{"total":186,"covered":166,"skipped":0,"pct":89.24},"branches":{"total":44,"covered":33,"skipped":0,"pct":75}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/contextmenu.js": {"lines":{"total":25,"covered":24,"skipped":0,"pct":96},"functions":{"total":8,"covered":8,"skipped":0,"pct":100},"statements":{"total":38,"covered":36,"skipped":0,"pct":94.73},"branches":{"total":13,"covered":12,"skipped":0,"pct":92.3}}
|
||||
,"/Users/jfh/Documents/GitHub/svgedit/src/editor/locale.js": {"lines":{"total":18,"covered":17,"skipped":0,"pct":94.44},"functions":{"total":60,"covered":5,"skipped":0,"pct":8.33},"statements":{"total":143,"covered":32,"skipped":0,"pct":22.37},"branches":{"total":10,"covered":9,"skipped":0,"pct":90}}
|
||||
}
|
||||
|
||||
@@ -1,65 +1,22 @@
|
||||
# Creating a new svg-edit release
|
||||
|
||||
## Prepare
|
||||
|
||||
1. `npm test` - Ensure build steps occur and tests are passing (note that
|
||||
accessibility tests are currently failing).
|
||||
1. `npm publish --dry-run` to run the preparatory scripts to ensure the
|
||||
necessary files are updated and also to see which files will be
|
||||
included once published and taking into account `.npmignore`
|
||||
(use `npm pack --dry-run` to see the files without the preparatory
|
||||
steps).
|
||||
1. `npm test` - Must pass before version bump (accessibility tests are currently failing; address or accept the known failure before proceeding).
|
||||
1. `npm run build` - Must pass before version bump; builds all workspaces and the main editor from the root.
|
||||
|
||||
## Update the main project
|
||||
|
||||
1. Update `version` in `package.json` (and `package-lock.json` (via `npm i`)).
|
||||
1. Update the `CHANGES.md` file with a summary of all changes (adding the
|
||||
version of the new release).
|
||||
1. Add new release info to `Recent news` section in README
|
||||
1. For major version changes, add a separate document for that version
|
||||
to `docs/versions/X.Y.Z.md` to summarizethe changes (higher level
|
||||
than the CHANGES file) and to indicate what is needed to update code
|
||||
to work with the breaking changes.
|
||||
1. Commit these changes `git commit -m "Updating CHANGES for release X.Y.Z"`-->.
|
||||
1. Tag the version, prefixed by "v", e.g., `v6.0.0`.
|
||||
|
||||
The above steps can be done on a fork and committed via a pull request.
|
||||
|
||||
## Create the release as a submodule
|
||||
|
||||
1. Create a branch for the release, e.g., `git branch release-v6.0.0` and
|
||||
push it to origin.
|
||||
1. While still on `master`, run the following (changing the version). This
|
||||
will add the branch to `.gitsubmodules` and have the current version in
|
||||
`package.json` point `latest` to this new release:
|
||||
`npm run add-new-release`; if you need to add a specific version (e.g.,
|
||||
an older one that was missing, use the following):
|
||||
`npm run add-release --release=6.0.0`. If you need to remove a release,
|
||||
run `npm run remove-release --release=6.0.0`
|
||||
1. Commit these changes `git commit -m "Updating for release X.Y.Z"`-->.
|
||||
1. Push to `master`.
|
||||
1. Ensure the new release is available by visiting
|
||||
<https://svg-edit.github.io/svgedit/releases/svg-edit-X.Y.Z/editor/svg-editor.html>
|
||||
(and in an ES6-Module-compliant browser,
|
||||
<https://svg-edit.github.io/svgedit/releases/svg-edit-X.Y.Z/editor/svg-editor-es.html>).
|
||||
|
||||
## Create the release on GitHub
|
||||
|
||||
1. Go to <https://github.com/SVG-Edit/svgedit/releases> and select
|
||||
`Draft a new release`.
|
||||
1. Make the release target point at the tag where the <!-- makefile and -->
|
||||
changes were updated.
|
||||
1. Write a short description of the release and include a link to the live
|
||||
version (in another tab, you may wish to see the source for a previous
|
||||
release):
|
||||
<https://svg-edit.github.io/svgedit/releases/svg-edit-X.Y.Z/editor/svg-editor.html>.
|
||||
1. Create the release!
|
||||
|
||||
You will need to be a member of the SVG-Edit GitHub group to do this step.
|
||||
1. Run `npm run version-bump` (after tests/builds are green) to bump the root and all workspace package versions together and refresh `package-lock.json`.
|
||||
1. Update the `CHANGES.md` file with a summary of all changes (adding the version of the new release).
|
||||
|
||||
## Publish to npm
|
||||
|
||||
1. `npm publish`
|
||||
1. From the repo root, run `npm run publish`. The script will:
|
||||
- Confirm the version bump is already done.
|
||||
- Confirm `CHANGES.md` has been updated.
|
||||
- Run the full release checks (`npm run test-build` → tests, docs, and build); it exits on failure.
|
||||
- Ask before creating a release commit and tag (defaults to `v<version>`); declining aborts the publish.
|
||||
- Publish all workspaces and the root package together.
|
||||
|
||||
You will need to be a member of the npm group to do this step.
|
||||
|
||||
You will need to be a member of the npm group to do this step. See above
|
||||
for `npm publish --dry-run`.
|
||||
|
||||
8
package-lock.json
generated
8
package-lock.json
generated
@@ -1,12 +1,12 @@
|
||||
{
|
||||
"name": "svgedit",
|
||||
"version": "7.3.8",
|
||||
"version": "7.4.0",
|
||||
"lockfileVersion": 3,
|
||||
"requires": true,
|
||||
"packages": {
|
||||
"": {
|
||||
"name": "svgedit",
|
||||
"version": "7.3.8",
|
||||
"version": "7.4.0",
|
||||
"license": "(MIT AND Apache-2.0 AND ISC AND LGPL-3.0-or-later AND X11)",
|
||||
"workspaces": [
|
||||
"packages/svgcanvas",
|
||||
@@ -12295,7 +12295,7 @@
|
||||
},
|
||||
"packages/react-test": {
|
||||
"name": "@svgedit/react-test",
|
||||
"version": "1.1.5",
|
||||
"version": "7.4.0",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"react": "^19.1.0",
|
||||
@@ -12307,7 +12307,7 @@
|
||||
},
|
||||
"packages/svgcanvas": {
|
||||
"name": "@svgedit/svgcanvas",
|
||||
"version": "7.2.7",
|
||||
"version": "7.4.0",
|
||||
"license": "MIT"
|
||||
}
|
||||
}
|
||||
|
||||
15
package.json
15
package.json
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "svgedit",
|
||||
"version": "7.3.8",
|
||||
"version": "7.4.0",
|
||||
"description": "Powerful SVG-Editor for your browser ",
|
||||
"main": "dist/editor/Editor.js",
|
||||
"module": "dist/editor/Editor.js",
|
||||
@@ -19,16 +19,13 @@
|
||||
"scripts": {
|
||||
"lint": "standard .",
|
||||
"pretest": "npm run lint",
|
||||
"test": "npm run test:unit && npm run test:e2e",
|
||||
"test:unit": "vitest run --coverage",
|
||||
"prebuild": "npm run build --workspace=packages/svgcanvas --workspace=packages/react-test",
|
||||
"build": "vite build",
|
||||
"test": "vitest run --coverage && node scripts/run-e2e.mjs",
|
||||
"build": "vite build packages/svgcanvas && vite build packages/react-test && vite build",
|
||||
"postbuild": "node scripts/copy-static.mjs && node scripts/build-extensions.mjs",
|
||||
"start": "vite dev --host --port 8000 --strictPort",
|
||||
"prestart": "echo svgedit is available at http://localhost:8000/src/editor/index.html",
|
||||
"start:iife": "npm run build && vite preview --host --port 8000 --strictPort --outDir dist/editor --open /iife-index.html",
|
||||
"start:e2e": "npm run build && vite preview --host --port 8000 --strictPort --outDir dist/editor",
|
||||
"test:e2e": "node scripts/run-e2e.mjs",
|
||||
"start:e2e": "vite preview --host --port 8000 --strictPort --outDir dist/editor",
|
||||
"open-docs-no-start": "open-cli http://localhost:8000/docs/jsdoc/",
|
||||
"open-docs": "run-p start open-docs-no-start",
|
||||
"build-docs-remove": "rimraf \"docs/jsdoc/\"",
|
||||
@@ -37,7 +34,9 @@
|
||||
"build-and-open-docs-no-start": "run-s build-docs open-docs-no-start",
|
||||
"build-and-open-docs": "run-s build-docs open-docs",
|
||||
"remark": "remark -q -f .",
|
||||
"prepublishOnly": "run-s build-docs build"
|
||||
"version-bump": "node scripts/version-bump.mjs",
|
||||
"publish": "node scripts/publish.mjs",
|
||||
"test-build": "run-s test build-docs build"
|
||||
},
|
||||
"repository": {
|
||||
"type": "git",
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@svgedit/react-test",
|
||||
"version": "1.1.5",
|
||||
"version": "7.4.0",
|
||||
"description": "",
|
||||
"main": "dist/index.js",
|
||||
"scripts": {
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "@svgedit/svgcanvas",
|
||||
"version": "7.2.7",
|
||||
"version": "7.4.0",
|
||||
"description": "SVG Canvas",
|
||||
"main": "dist/svgcanvas.js",
|
||||
"author": "Narendra Sisodiya",
|
||||
|
||||
@@ -1,6 +1 @@
|
||||
## To publish this package
|
||||
1. update the version number in package.json
|
||||
2. update the CHANGES.md
|
||||
3. move to the package directory (packages/svgcanvas)
|
||||
4. run 'npm publish' (that will automate the build)
|
||||
5. create a commit with above changes called 'release x.y.z'
|
||||
see docs/ReleaseInstructions.md
|
||||
|
||||
@@ -15,6 +15,6 @@ export default defineConfig({
|
||||
command: 'npm run start:e2e',
|
||||
url: 'http://localhost:8000/index.html',
|
||||
reuseExistingServer: !process.env.CI,
|
||||
timeout: 60000
|
||||
timeout: 180 * 1000
|
||||
}
|
||||
})
|
||||
|
||||
10
publish.md
10
publish.md
@@ -1,9 +1 @@
|
||||
## To publish this package
|
||||
1. Make sure that @svgedit/packages is published if a new version is made (see publish.md in its corresponding folder)
|
||||
2. modify package.json to update:
|
||||
- The new version of svgcanvas (if any)
|
||||
- The new version of svgedit
|
||||
2. run 'npm install' to update the corresponding package-lock.json
|
||||
3. update the CHANGES.md
|
||||
4. run 'npm publish' (that will automate the build)
|
||||
5. create a commit with above changes called 'release x.y.z'
|
||||
see docs/ReleaseInstructions.md
|
||||
|
||||
136
scripts/publish.mjs
Normal file
136
scripts/publish.mjs
Normal file
@@ -0,0 +1,136 @@
|
||||
#!/usr/bin/env node
|
||||
import { execSync } from 'node:child_process'
|
||||
import { readdirSync, readFileSync } from 'node:fs'
|
||||
import { join } from 'node:path'
|
||||
import readline from 'node:readline'
|
||||
|
||||
const rootDir = process.cwd()
|
||||
const rootPackagePath = join(rootDir, 'package.json')
|
||||
const packageLockPath = join(rootDir, 'package-lock.json')
|
||||
const changesPath = join(rootDir, 'CHANGES.md')
|
||||
|
||||
function readJson (path) {
|
||||
return JSON.parse(readFileSync(path, 'utf8'))
|
||||
}
|
||||
|
||||
async function prompt (question) {
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
})
|
||||
const answer = await new Promise(resolve => rl.question(question, resolve))
|
||||
rl.close()
|
||||
return answer.trim()
|
||||
}
|
||||
|
||||
function expandWorkspaces (patterns) {
|
||||
const expanded = []
|
||||
for (const pattern of patterns) {
|
||||
if (!pattern.includes('*')) {
|
||||
expanded.push(pattern)
|
||||
continue
|
||||
}
|
||||
const [prefix, suffix] = pattern.split('*')
|
||||
const baseDir = join(rootDir, prefix || '.')
|
||||
const entries = readdirSync(baseDir, { withFileTypes: true })
|
||||
for (const entry of entries) {
|
||||
if (entry.isDirectory()) {
|
||||
expanded.push(join(prefix, entry.name, suffix))
|
||||
}
|
||||
}
|
||||
}
|
||||
return expanded
|
||||
}
|
||||
|
||||
function loadWorkspacePackagePaths () {
|
||||
const rootPackage = readJson(rootPackagePath)
|
||||
const workspacePatterns = Array.isArray(rootPackage.workspaces)
|
||||
? rootPackage.workspaces
|
||||
: rootPackage.workspaces?.packages ?? []
|
||||
return expandWorkspaces(workspacePatterns).map(path => join(rootDir, path, 'package.json'))
|
||||
}
|
||||
|
||||
function inGitRepo () {
|
||||
try {
|
||||
execSync('git rev-parse --is-inside-work-tree', { stdio: 'ignore', cwd: rootDir })
|
||||
return true
|
||||
} catch (error) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
function confirmYes (answer) {
|
||||
return /^y(es)?$/i.test(answer)
|
||||
}
|
||||
|
||||
function quoteArg (value) {
|
||||
return JSON.stringify(value)
|
||||
}
|
||||
|
||||
function run (command) {
|
||||
execSync(command, { stdio: 'inherit', cwd: rootDir })
|
||||
}
|
||||
|
||||
async function main () {
|
||||
const rootPackage = readJson(rootPackagePath)
|
||||
const workspacePackages = loadWorkspacePackagePaths()
|
||||
const releaseVersion = rootPackage.version
|
||||
const defaultReleaseName = `v${releaseVersion}`
|
||||
|
||||
console.log(`Preparing to publish ${rootPackage.name}@${releaseVersion}\n`)
|
||||
|
||||
const versionBumped = await prompt(`Has the version bump been completed (current version ${releaseVersion})? [y/N]: `)
|
||||
if (!confirmYes(versionBumped)) {
|
||||
console.log('Please run version bump before publishing. Exiting.')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const changelogUpdated = await prompt('Has CHANGES.md been updated? [y/N]: ')
|
||||
if (!confirmYes(changelogUpdated)) {
|
||||
console.log('Please update CHANGES.md before publishing. Exiting.')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
console.log('\nRunning tests, docs, and builds (test-build)...')
|
||||
try {
|
||||
run('npm run test-build')
|
||||
} catch (error) {
|
||||
console.error('Tests/builds failed. Aborting publish.')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const doCommit = await prompt('\nCreate git commit and tag for this release before publishing? [y/N]: ')
|
||||
if (!confirmYes(doCommit)) {
|
||||
console.log('Publish aborted by user.')
|
||||
process.exit(0)
|
||||
}
|
||||
|
||||
if (!inGitRepo()) {
|
||||
console.error('Git repository not detected; cannot create commit/tag.')
|
||||
process.exit(1)
|
||||
}
|
||||
|
||||
const releaseNameInput = await prompt(`Release name for commit/tag (default ${defaultReleaseName}): `)
|
||||
const releaseName = releaseNameInput || defaultReleaseName
|
||||
|
||||
console.log('\nCreating commit and tag...')
|
||||
const filesToStage = [
|
||||
changesPath,
|
||||
rootPackagePath,
|
||||
packageLockPath,
|
||||
...workspacePackages
|
||||
]
|
||||
run(`git add ${filesToStage.map(quoteArg).join(' ')}`)
|
||||
run(`git commit -m ${quoteArg(releaseName)}`)
|
||||
run(`git tag ${quoteArg(releaseName)}`)
|
||||
|
||||
console.log('\nPublishing packages to npm...')
|
||||
run('npm publish --workspaces --include-workspace-root')
|
||||
|
||||
console.log(`\nDone. Published ${releaseName}.`)
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
})
|
||||
@@ -37,6 +37,14 @@ const ensureBrowser = async () => {
|
||||
}
|
||||
}
|
||||
|
||||
const ensureBuild = async () => {
|
||||
const distIndex = join(process.cwd(), 'dist', 'editor', 'index.html')
|
||||
if (existsSync(distIndex)) return
|
||||
|
||||
console.log('Building dist/editor for Playwright preview (missing build output)...')
|
||||
await run('npm', ['run', 'build'])
|
||||
}
|
||||
|
||||
const seedNycFromVitest = async () => {
|
||||
const vitestCoverage = join(process.cwd(), 'coverage', 'coverage-final.json')
|
||||
if (existsSync(vitestCoverage)) {
|
||||
@@ -48,6 +56,7 @@ const seedNycFromVitest = async () => {
|
||||
|
||||
if (await hasPlaywright()) {
|
||||
await ensureBrowser()
|
||||
await ensureBuild()
|
||||
await run('rimraf', ['.nyc_output/*'], { shell: true })
|
||||
await seedNycFromVitest()
|
||||
await run('npx', ['playwright', 'test'])
|
||||
|
||||
153
scripts/version-bump.mjs
Normal file
153
scripts/version-bump.mjs
Normal file
@@ -0,0 +1,153 @@
|
||||
#!/usr/bin/env node
|
||||
import { execSync } from 'node:child_process'
|
||||
import { readdirSync, readFileSync, writeFileSync } from 'node:fs'
|
||||
import { join } from 'node:path'
|
||||
import readline from 'node:readline'
|
||||
|
||||
const rootDir = process.cwd()
|
||||
const rootPackagePath = join(rootDir, 'package.json')
|
||||
|
||||
function readJson (path) {
|
||||
return JSON.parse(readFileSync(path, 'utf8'))
|
||||
}
|
||||
|
||||
function writeJson (path, data) {
|
||||
writeFileSync(path, JSON.stringify(data, null, 2) + '\n')
|
||||
}
|
||||
|
||||
function parseSemver (version) {
|
||||
const match = /^(\d+)\.(\d+)\.(\d+)$/.exec(version.trim())
|
||||
if (!match) return null
|
||||
return match.slice(1).map(Number)
|
||||
}
|
||||
|
||||
function bumpVersion (version, type) {
|
||||
const parsed = parseSemver(version)
|
||||
if (!parsed) throw new Error(`Invalid semver: ${version}`)
|
||||
const [major, minor, patch] = parsed
|
||||
if (type === 'patch') return `${major}.${minor}.${patch + 1}`
|
||||
if (type === 'minor') return `${major}.${minor + 1}.0`
|
||||
if (type === 'major') return `${major + 1}.0.0`
|
||||
throw new Error(`Unknown bump type: ${type}`)
|
||||
}
|
||||
|
||||
function isGreaterVersion (a, b) {
|
||||
const pa = parseSemver(a)
|
||||
const pb = parseSemver(b)
|
||||
if (!pa || !pb) return false
|
||||
for (let i = 0; i < 3; i += 1) {
|
||||
if (pa[i] > pb[i]) return true
|
||||
if (pa[i] < pb[i]) return false
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
function expandWorkspaces (patterns) {
|
||||
const expanded = []
|
||||
for (const pattern of patterns) {
|
||||
if (!pattern.includes('*')) {
|
||||
expanded.push(pattern)
|
||||
continue
|
||||
}
|
||||
const [prefix, suffix] = pattern.split('*')
|
||||
const baseDir = join(rootDir, prefix || '.')
|
||||
const entries = readdirSync(baseDir, { withFileTypes: true })
|
||||
for (const entry of entries) {
|
||||
if (entry.isDirectory()) {
|
||||
expanded.push(join(prefix, entry.name, suffix))
|
||||
}
|
||||
}
|
||||
}
|
||||
return expanded
|
||||
}
|
||||
|
||||
async function prompt (question) {
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
})
|
||||
const answer = await new Promise(resolve => rl.question(question, resolve))
|
||||
rl.close()
|
||||
return answer.trim()
|
||||
}
|
||||
|
||||
function loadPackages () {
|
||||
const rootPackage = readJson(rootPackagePath)
|
||||
const workspacePatterns = Array.isArray(rootPackage.workspaces)
|
||||
? rootPackage.workspaces
|
||||
: rootPackage.workspaces?.packages ?? []
|
||||
const workspacePaths = expandWorkspaces(workspacePatterns)
|
||||
const workspaces = workspacePaths.map(path => {
|
||||
const packagePath = join(rootDir, path, 'package.json')
|
||||
return { path, packagePath, pkg: readJson(packagePath) }
|
||||
})
|
||||
return { rootPackage, workspaces }
|
||||
}
|
||||
|
||||
async function chooseVersion (current) {
|
||||
const suggestions = {
|
||||
patch: bumpVersion(current, 'patch'),
|
||||
minor: bumpVersion(current, 'minor'),
|
||||
major: bumpVersion(current, 'major')
|
||||
}
|
||||
console.log('\nSuggested bumps:')
|
||||
console.log(`- patch: ${suggestions.patch}`)
|
||||
console.log(`- minor: ${suggestions.minor}`)
|
||||
console.log(`- major: ${suggestions.major}`)
|
||||
while (true) {
|
||||
const answer = await prompt(`\nNew version [p/m/M/custom] (default patch: ${suggestions.patch}): `)
|
||||
const trimmed = answer.trim()
|
||||
const lower = trimmed.toLowerCase()
|
||||
const chosen = !trimmed
|
||||
? suggestions.patch
|
||||
: lower === 'p' || lower === 'patch'
|
||||
? suggestions.patch
|
||||
: lower === 'm' || lower === 'minor'
|
||||
? suggestions.minor
|
||||
: trimmed === 'M' || lower === 'major'
|
||||
? suggestions.major
|
||||
: trimmed
|
||||
if (!parseSemver(chosen)) {
|
||||
console.log(`Invalid semver: ${chosen}. Expected format x.y.z`)
|
||||
continue
|
||||
}
|
||||
if (!isGreaterVersion(chosen, current)) {
|
||||
console.log(`Version must be greater than current (${current}).`)
|
||||
continue
|
||||
}
|
||||
return chosen
|
||||
}
|
||||
}
|
||||
|
||||
async function main () {
|
||||
const { rootPackage, workspaces } = loadPackages()
|
||||
console.log('Current versions:')
|
||||
console.log(`- ${rootPackage.name} (root): ${rootPackage.version}`)
|
||||
for (const ws of workspaces) {
|
||||
console.log(`- ${ws.pkg.name} (${ws.path}): ${ws.pkg.version}`)
|
||||
}
|
||||
|
||||
const newVersion = await chooseVersion(rootPackage.version)
|
||||
|
||||
console.log(`\nUpdating all packages to ${newVersion}...`)
|
||||
rootPackage.version = newVersion
|
||||
writeJson(rootPackagePath, rootPackage)
|
||||
for (const ws of workspaces) {
|
||||
ws.pkg.version = newVersion
|
||||
writeJson(ws.packagePath, ws.pkg)
|
||||
}
|
||||
|
||||
console.log('Refreshing package-lock.json...')
|
||||
execSync('npm install --package-lock-only --workspaces --include-workspace-root', {
|
||||
stdio: 'inherit',
|
||||
cwd: rootDir
|
||||
})
|
||||
|
||||
console.log('\nDone.')
|
||||
console.log(`\nMake sure to update any relevant documentation and changelogs for version ${newVersion}...`)
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
console.error(err)
|
||||
process.exit(1)
|
||||
})
|
||||
@@ -2,7 +2,6 @@
|
||||
* @file
|
||||
* @module
|
||||
* @author Qscy qscy2011@sina.com
|
||||
* @LastEditors Qscy qscy2011@sina.com
|
||||
*/
|
||||
export default {
|
||||
name: '图层视图',
|
||||
|
||||
Reference in New Issue
Block a user