forked from sheetjs/docs.sheetjs.com
		
	
		
			
	
	
		
			123 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			123 lines
		
	
	
		
			4.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
|  | --- | ||
|  | sidebar_position: 7 | ||
|  | hide_table_of_contents: true | ||
|  | --- | ||
|  | 
 | ||
|  | # Contributing
 | ||
|  | 
 | ||
|  | Due to the precarious nature of the Open Specifications Promise, it is very | ||
|  | important to ensure code is cleanroom.  [Contribution Notes](https://raw.githubusercontent.com/SheetJS/sheetjs/master/CONTRIBUTING.md) | ||
|  | 
 | ||
|  | <details> | ||
|  |   <summary><b>File organization</b> (click to show)</summary> | ||
|  | 
 | ||
|  | At a high level, the final script is a concatenation of the individual files in | ||
|  | the `bits` folder.  Running `make` should reproduce the final output on all | ||
|  | platforms. | ||
|  | 
 | ||
|  | Folders: | ||
|  | 
 | ||
|  | | folder       | contents                                                      | | ||
|  | |:-------------|:--------------------------------------------------------------| | ||
|  | | `bits`       | raw source files that make up the final script                | | ||
|  | | `bin`        | server-side bin scripts (`xlsx.njs`)                          | | ||
|  | | `dist`       | dist files for web browsers and nonstandard JS environments   | | ||
|  | | `demos`      | demo projects for platforms like ExtendScript and Webpack     | | ||
|  | | `tests`      | browser tests (run `make ctest` to rebuild)                   | | ||
|  | | `types`      | typescript definitions and tests                              | | ||
|  | | `misc`       | miscellaneous supporting scripts                              | | ||
|  | | `test_files` | test files (pulled from the test files repository)            | | ||
|  | 
 | ||
|  | </details> | ||
|  | 
 | ||
|  | After cloning the repo, running `make help` will display a list of commands. | ||
|  | 
 | ||
|  | ## Platform-Specific Details
 | ||
|  | 
 | ||
|  | import Tabs from '@theme/Tabs'; | ||
|  | import TabItem from '@theme/TabItem'; | ||
|  | 
 | ||
|  | <Tabs> | ||
|  |   <TabItem value="osx" label="OSX/Linux"> | ||
|  | 
 | ||
|  | The `xlsx.js` file is constructed from the files in the `bits` subdirectory. The | ||
|  | build script (run `make`) will concatenate the individual bits to produce the | ||
|  | script.  Before submitting a contribution, ensure that running make will produce | ||
|  | the `xlsx.js` file exactly.  The simplest way to test is to add the script: | ||
|  | 
 | ||
|  | ```bash | ||
|  | $ git add xlsx.js | ||
|  | $ make clean | ||
|  | $ make | ||
|  | $ git diff xlsx.js | ||
|  | ``` | ||
|  | 
 | ||
|  | To produce the dist files, run `make dist`.  The dist files are updated in each | ||
|  | version release and *should not be committed between versions*. | ||
|  | 
 | ||
|  |   </TabItem> | ||
|  |   <TabItem value="win" label="Windows"> | ||
|  | 
 | ||
|  | The included `make.cmd` script will build `xlsx.js` from the `bits` directory. | ||
|  | Building is as simple as: | ||
|  | 
 | ||
|  | ```cmd | ||
|  | > make
 | ||
|  | ``` | ||
|  | 
 | ||
|  | To prepare development environment: | ||
|  | 
 | ||
|  | ```cmd | ||
|  | > make init
 | ||
|  | ``` | ||
|  | 
 | ||
|  | The full list of commands available in Windows are displayed in `make help`: | ||
|  | 
 | ||
|  | ``` | ||
|  | make init -- install deps and global modules | ||
|  | make lint -- run eslint linter | ||
|  | make test -- run mocha test suite | ||
|  | make misc -- run smaller test suite | ||
|  | make book -- rebuild README and summary | ||
|  | make help -- display this message | ||
|  | ``` | ||
|  | 
 | ||
|  | As explained in [Test Files](./testing#test-files), on Windows the release ZIP file must | ||
|  | be downloaded and extracted.  If Bash on Windows is available, it is possible | ||
|  | to run the OSX/Linux workflow.  The following steps prepares the environment: | ||
|  | 
 | ||
|  | ```bash | ||
|  | # Install support programs for the build and test commands
 | ||
|  | sudo apt-get install make git subversion mercurial | ||
|  | 
 | ||
|  | # Install nodejs and NPM within the WSL
 | ||
|  | wget -qO- https://deb.nodesource.com/setup_8.x | sudo bash | ||
|  | sudo apt-get install nodejs | ||
|  | 
 | ||
|  | # Install dev dependencies
 | ||
|  | sudo npm install -g mocha voc blanket xlsjs | ||
|  | ``` | ||
|  | 
 | ||
|  |   </TabItem> | ||
|  | </Tabs> | ||
|  | 
 | ||
|  | ### Tests
 | ||
|  | 
 | ||
|  | The `test_misc` target (`make test_misc` on Linux/OSX / `make misc` on Windows) | ||
|  | runs the targeted feature tests.  It should take 5-10 seconds to perform feature | ||
|  | tests without testing against the entire test battery.  New features should be | ||
|  | accompanied with tests for the relevant file formats and features. | ||
|  | 
 | ||
|  | For tests involving the read side, an appropriate feature test would involve | ||
|  | reading an existing file and checking the resulting workbook object.  If a | ||
|  | parameter is involved, files should be read with different values to verify that | ||
|  | the feature is working as expected. | ||
|  | 
 | ||
|  | For tests involving a new write feature which can already be parsed, appropriate | ||
|  | feature tests would involve writing a workbook with the feature and then opening | ||
|  | and verifying that the feature is preserved. | ||
|  | 
 | ||
|  | For tests involving a new write feature without an existing read ability, please | ||
|  | add a feature test to the kitchen sink `tests/write.js`. | ||
|  | 
 |