Compare commits
	
		
			1 Commits
		
	
	
		
			nightly-v2
			...
			achalmers/
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 078ffa02b0 | 
| @ -1,3 +1,3 @@ | |||||||
| [codespell] | [codespell] | ||||||
| ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,atleast,ue,afterall,ser | ignore-words-list: crate,everytime,inout,co-ordinate,ot,nwo,absolutey,atleast,ue,afterall | ||||||
| skip: **/target,node_modules,build,dist,./out,**/Cargo.lock,./docs/kcl/*.md,.yarn.lock,**/yarn.lock,./openapi/*.json,./packages/codemirror-lang-kcl/test/all.test.ts,tsconfig.tsbuildinfo | skip: **/target,node_modules,build,**/Cargo.lock,./docs/kcl/*.md,.yarn.lock,**/yarn.lock,./openapi/*.json,./src/lib/machine-api.d.ts | ||||||
|  | |||||||
							
								
								
									
										28
									
								
								.eslintrc
									
									
									
									
									
								
							
							
						
						| @ -5,32 +5,16 @@ | |||||||
|     }, |     }, | ||||||
|     "plugins": [ |     "plugins": [ | ||||||
|       "css-modules", |       "css-modules", | ||||||
|       "jest", |  | ||||||
|       "jsx-a11y", |  | ||||||
|       "react", |  | ||||||
|       "react-hooks", |  | ||||||
|       "suggest-no-throw", |       "suggest-no-throw", | ||||||
|       "testing-library", |  | ||||||
|       "@typescript-eslint" |  | ||||||
|     ], |     ], | ||||||
|     "extends": [ |     "extends": [ | ||||||
|       "plugin:css-modules/recommended", |       "react-app", | ||||||
|       "plugin:jsx-a11y/recommended", |       "react-app/jest", | ||||||
|       "plugin:react-hooks/recommended" |       "plugin:css-modules/recommended" | ||||||
|     ], |     ], | ||||||
|     "rules": { |     "rules": { | ||||||
|       "@typescript-eslint/no-floating-promises": "error", |       "@typescript-eslint/no-floating-promises": "error", | ||||||
|       "@typescript-eslint/no-misused-promises": "error", |       "@typescript-eslint/no-misused-promises": "error", | ||||||
|       "jsx-a11y/click-events-have-key-events": "off", |  | ||||||
|       "jsx-a11y/no-autofocus": "off", |  | ||||||
|       "jsx-a11y/no-noninteractive-element-interactions": "off", |  | ||||||
|       "no-restricted-globals": [ |  | ||||||
|         "error", |  | ||||||
|         { |  | ||||||
|           "name": "isNaN", |  | ||||||
|           "message": "Use Number.isNaN() instead." |  | ||||||
|         } |  | ||||||
|       ], |  | ||||||
|       "semi": [ |       "semi": [ | ||||||
|         "error", |         "error", | ||||||
|         "never" |         "never" | ||||||
| @ -41,9 +25,6 @@ | |||||||
|     "overrides": [ |     "overrides": [ | ||||||
|       { |       { | ||||||
|         "files": ["e2e/**/*.ts"], // Update the pattern based on your file structure |         "files": ["e2e/**/*.ts"], // Update the pattern based on your file structure | ||||||
|         "extends": [ |  | ||||||
|           "plugin:testing-library/react" |  | ||||||
|         ], |  | ||||||
|         "rules": { |         "rules": { | ||||||
|           "suggest-no-throw/suggest-no-throw": "off", |           "suggest-no-throw/suggest-no-throw": "off", | ||||||
|           "testing-library/prefer-screen-queries": "off", |           "testing-library/prefer-screen-queries": "off", | ||||||
| @ -52,9 +33,6 @@ | |||||||
|       }, |       }, | ||||||
|       { |       { | ||||||
|         "files": ["src/**/*.test.ts"], |         "files": ["src/**/*.test.ts"], | ||||||
|         "extends": [ |  | ||||||
|           "plugin:testing-library/react" |  | ||||||
|         ], |  | ||||||
|         "rules": { |         "rules": { | ||||||
|           "suggest-no-throw/suggest-no-throw": "off", |           "suggest-no-throw/suggest-no-throw": "off", | ||||||
|         } |         } | ||||||
|  | |||||||
							
								
								
									
										59
									
								
								.github/ci-cd-scripts/playwright-browser-chrome.sh
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						| @ -0,0 +1,59 @@ | |||||||
|  | # bash strict mode | ||||||
|  | set -euo pipefail | ||||||
|  |  | ||||||
|  | if [[ ! -f "test-results/.last-run.json" ]]; then | ||||||
|  |     # if no last run artifact, than run plawright normally | ||||||
|  |     echo "run playwright normally" | ||||||
|  |     if [[ "$3" == ubuntu-latest* ]]; then | ||||||
|  |         yarn test:playwright:browser:chrome:ubuntu -- --shard=$1/$2 || true | ||||||
|  |     elif [[ "$3" == windows-latest* ]]; then | ||||||
|  |         yarn test:playwright:browser:chrome:windows -- --shard=$1/$2 || true | ||||||
|  |     else | ||||||
|  |         echo "Do not run playwright. Unable to detect os runtime." | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  |     # # send to axiom | ||||||
|  |     node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1 | ||||||
|  | fi | ||||||
|  |  | ||||||
|  | retry=1 | ||||||
|  | max_retrys=4 | ||||||
|  |  | ||||||
|  | # retry failed tests, doing our own retries because using inbuilt playwright retries causes connection issues | ||||||
|  | while [[ $retry -le $max_retrys ]]; do | ||||||
|  |     if [[ -f "test-results/.last-run.json" ]]; then | ||||||
|  |         failed_tests=$(jq '.failedTests | length' test-results/.last-run.json) | ||||||
|  |         if [[ $failed_tests -gt 0 ]]; then | ||||||
|  |             echo "retried=true" >>$GITHUB_OUTPUT | ||||||
|  |             echo "run playwright with last failed tests and retry $retry" | ||||||
|  |             if [[ "$3" == ubuntu-latest* ]]; then | ||||||
|  |                 yarn test:playwright:browser:chrome:ubuntu -- --last-failed || true | ||||||
|  |             elif [[ "$3" == windows-latest* ]]; then | ||||||
|  |                 yarn test:playwright:browser:chrome:windows -- --last-failed || true | ||||||
|  |             else | ||||||
|  |                 echo "Do not run playwright. Unable to detect os runtime." | ||||||
|  |                 exit 1 | ||||||
|  |             fi | ||||||
|  |             # send to axiom | ||||||
|  |             node playwrightProcess.mjs | tee /tmp/github-actions.log > /dev/null 2>&1 | ||||||
|  |             retry=$((retry + 1)) | ||||||
|  |         else | ||||||
|  |             echo "retried=false" >>$GITHUB_OUTPUT | ||||||
|  |             exit 0 | ||||||
|  |         fi | ||||||
|  |     else | ||||||
|  |         echo "retried=false" >>$GITHUB_OUTPUT | ||||||
|  |         exit 0 | ||||||
|  |     fi | ||||||
|  | done | ||||||
|  |  | ||||||
|  | echo "retried=false" >>$GITHUB_OUTPUT | ||||||
|  |  | ||||||
|  | if [[ -f "test-results/.last-run.json" ]]; then | ||||||
|  |     failed_tests=$(jq '.failedTests | length' test-results/.last-run.json) | ||||||
|  |     if [[ $failed_tests -gt 0 ]]; then | ||||||
|  |         # if it still fails after 3 retrys, then fail the job | ||||||
|  |         exit 1 | ||||||
|  |     fi | ||||||
|  | fi | ||||||
|  | exit 0 | ||||||
							
								
								
									
										22
									
								
								.github/ci-cd-scripts/playwright-electron.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,17 +1,15 @@ | |||||||
| #!/bin/bash |  | ||||||
|  |  | ||||||
| # bash strict mode | # bash strict mode | ||||||
| set -euo pipefail | set -euo pipefail | ||||||
|  |  | ||||||
| if [[ ! -f "test-results/.last-run.json" ]]; then | if [[ ! -f "test-results/.last-run.json" ]]; then | ||||||
|     # if no last run artifact, than run plawright normally |     # if no last run artifact, than run plawright normally | ||||||
|     echo "run playwright normally" |     echo "run playwright normally" | ||||||
|         if [[ "$3" == *ubuntu* ]]; then |         if [[ "$1" == ubuntu-latest* ]]; then | ||||||
|             xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:playwright:electron:ubuntu -- --shard=$1/$2 || true |             xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:playwright:electron:ubuntu || true | ||||||
|         elif [[ "$3" == *windows* ]]; then |         elif [[ "$1" == windows-latest* ]]; then | ||||||
|             yarn test:playwright:electron:windows -- --shard=$1/$2 || true |             yarn test:playwright:electron:windows || true | ||||||
|         elif [[ "$3" == *macos* ]]; then |         elif [[ "$1" == macos-14* ]]; then | ||||||
|             yarn test:playwright:electron:macos  -- --shard=$1/$2 || true |             yarn test:playwright:electron:macos || true | ||||||
|         else |         else | ||||||
|             echo "Do not run playwright. Unable to detect os runtime." |             echo "Do not run playwright. Unable to detect os runtime." | ||||||
|             exit 1 |             exit 1 | ||||||
| @ -21,7 +19,7 @@ if [[ ! -f "test-results/.last-run.json" ]]; then | |||||||
| fi | fi | ||||||
|  |  | ||||||
| retry=1 | retry=1 | ||||||
| max_retrys=5 | max_retrys=4 | ||||||
|  |  | ||||||
| # retry failed tests, doing our own retries because using inbuilt playwright retries causes connection issues | # retry failed tests, doing our own retries because using inbuilt playwright retries causes connection issues | ||||||
| while [[ $retry -le $max_retrys ]]; do | while [[ $retry -le $max_retrys ]]; do | ||||||
| @ -30,11 +28,11 @@ while [[ $retry -le $max_retrys ]]; do | |||||||
|         if [[ $failed_tests -gt 0 ]]; then |         if [[ $failed_tests -gt 0 ]]; then | ||||||
|             echo "retried=true" >>$GITHUB_OUTPUT |             echo "retried=true" >>$GITHUB_OUTPUT | ||||||
|             echo "run playwright with last failed tests and retry $retry" |             echo "run playwright with last failed tests and retry $retry" | ||||||
|             if [[ "$3" == *ubuntu* ]]; then |             if [[ "$1" == ubuntu-latest* ]]; then | ||||||
|                 xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:playwright:electron:ubuntu -- --last-failed || true |                 xvfb-run --auto-servernum --server-args="-screen 0 1280x960x24" -- yarn test:playwright:electron:ubuntu -- --last-failed || true | ||||||
|             elif [[ "$3" == *windows* ]]; then |             elif [[ "$1" == windows-latest* ]]; then | ||||||
|                 yarn test:playwright:electron:windows -- --last-failed || true |                 yarn test:playwright:electron:windows -- --last-failed || true | ||||||
|             elif [[ "$3" == *macos* ]]; then |             elif [[ "$1" == macos-14* ]]; then | ||||||
|                 yarn test:playwright:electron:macos -- --last-failed || true |                 yarn test:playwright:electron:macos -- --last-failed || true | ||||||
|             else |             else | ||||||
|                 echo "Do not run playwright. Unable to detect os runtime." |                 echo "Do not run playwright. Unable to detect os runtime." | ||||||
|  | |||||||
							
								
								
									
										55
									
								
								.github/dependabot.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -5,37 +5,24 @@ | |||||||
|  |  | ||||||
| version: 2 | version: 2 | ||||||
| updates: | updates: | ||||||
|   - package-ecosystem: 'npm' # See documentation for possible values |     - package-ecosystem: 'npm' # See documentation for possible values | ||||||
|     directories: |       directory: '/' # Location of package manifests | ||||||
|       - '/' |       schedule: | ||||||
|       - '/packages/codemirror-lang-kcl/' |           interval: 'weekly' | ||||||
|       - '/packages/codemirror-lsp-client/' |       reviewers: | ||||||
|     schedule: |           - franknoirot | ||||||
|       interval: weekly |           - irev-dev | ||||||
|       day: monday |     - package-ecosystem: 'github-actions' # See documentation for possible values | ||||||
|     reviewers: |       directory: '/' # Location of package manifests | ||||||
|       - franknoirot |       schedule: | ||||||
|       - irev-dev |           interval: 'weekly' | ||||||
|   - package-ecosystem: 'github-actions' # See documentation for possible values |       reviewers: | ||||||
|     directory: '/' # Location of package manifests |           - adamchalmers | ||||||
|     schedule: |           - jessfraz | ||||||
|       interval: weekly |     - package-ecosystem: 'cargo' # See documentation for possible values | ||||||
|       day: monday |       directory: '/src/wasm-lib/' # Location of package manifests | ||||||
|     reviewers: |       schedule: | ||||||
|       - adamchalmers |           interval: 'weekly' | ||||||
|       - jessfraz |       reviewers: | ||||||
|   - package-ecosystem: 'cargo' # See documentation for possible values |           - adamchalmers | ||||||
|     directory: '/src/wasm-lib/' # Location of package manifests |           - jessfraz | ||||||
|     schedule: |  | ||||||
|       interval: weekly |  | ||||||
|       day: monday |  | ||||||
|     reviewers: |  | ||||||
|       - adamchalmers |  | ||||||
|       - jessfraz |  | ||||||
|     groups: |  | ||||||
|       serde-dependencies: |  | ||||||
|         patterns: |  | ||||||
|           - "serde*" |  | ||||||
|       wasm-bindgen-deps: |  | ||||||
|         patterns: |  | ||||||
|           - "wasm-bindgen*" |  | ||||||
|  | |||||||
							
								
								
									
										2
									
								
								.github/workflows/build-and-store-wasm.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -27,7 +27,7 @@ jobs: | |||||||
|  |  | ||||||
|  |  | ||||||
|       # Upload the WASM bundle as an artifact |       # Upload the WASM bundle as an artifact | ||||||
|       - uses: actions/upload-artifact@v4 |       - uses: actions/upload-artifact@v3 | ||||||
|         with: |         with: | ||||||
|           name: wasm-bundle |           name: wasm-bundle | ||||||
|           path: src/wasm-lib/pkg |           path: src/wasm-lib/pkg | ||||||
|  | |||||||
							
								
								
									
										59
									
								
								.github/workflows/build-apps.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -126,13 +126,7 @@ jobs: | |||||||
|           node-version-file: '.nvmrc' |           node-version-file: '.nvmrc' | ||||||
|           cache: 'yarn' # Set this to npm, yarn or pnpm. |           cache: 'yarn' # Set this to npm, yarn or pnpm. | ||||||
|  |  | ||||||
|       - name: yarn install |       - run: yarn install | ||||||
|         # Windows is picky sometimes and fails on fetch. Step takes about ~30s |  | ||||||
|         uses: nick-fields/retry@v3.0.0 |  | ||||||
|         with: |  | ||||||
|           timeout_minutes: 2 |  | ||||||
|           max_attempts: 3 |  | ||||||
|           command: yarn install |  | ||||||
|  |  | ||||||
|       - run: yarn tronb:vite |       - run: yarn tronb:vite | ||||||
|  |  | ||||||
| @ -171,6 +165,7 @@ jobs: | |||||||
|       - name: Build the app (release) |       - name: Build the app (release) | ||||||
|         if: ${{ env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true' }} |         if: ${{ env.IS_RELEASE == 'true' || env.IS_NIGHTLY == 'true' }} | ||||||
|         env: |         env: | ||||||
|  |           PUBLISH_FOR_PULL_REQUEST: true | ||||||
|           APPLE_ID: ${{ secrets.APPLE_ID }} |           APPLE_ID: ${{ secrets.APPLE_ID }} | ||||||
|           APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} |           APPLE_PASSWORD: ${{ secrets.APPLE_PASSWORD }} | ||||||
|           APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }} |           APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_PASSWORD }} | ||||||
| @ -178,14 +173,9 @@ jobs: | |||||||
|           CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }} |           CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }} | ||||||
|           CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} |           CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | ||||||
|           CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }} |           CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }} | ||||||
|  |           CSC_FOR_PULL_REQUEST: true | ||||||
|           WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }} |           WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }} | ||||||
|           DEBUG: "electron-notarize*" |         run: yarn electron-builder --config --publish always | ||||||
|         # TODO: Fix electron-notarize flakes. The logs above should help gather more data on failures |  | ||||||
|         uses: nick-fields/retry@v3.0.0 |  | ||||||
|         with: |  | ||||||
|           timeout_minutes: 10 |  | ||||||
|           max_attempts: 3 |  | ||||||
|           command: yarn electron-builder --config --publish always |  | ||||||
|  |  | ||||||
|       - name: List artifacts in out/ |       - name: List artifacts in out/ | ||||||
|         run: ls -R out |         run: ls -R out | ||||||
| @ -239,14 +229,9 @@ jobs: | |||||||
|           CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }} |           CSC_LINK: ${{ secrets.APPLE_CERTIFICATE }} | ||||||
|           CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} |           CSC_KEY_PASSWORD: ${{ secrets.APPLE_CERTIFICATE_PASSWORD }} | ||||||
|           CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }} |           CSC_KEYCHAIN: ${{ secrets.APPLE_SIGNING_IDENTITY }} | ||||||
|  |           CSC_FOR_PULL_REQUEST: true | ||||||
|           WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }} |           WINDOWS_CERTIFICATE_THUMBPRINT: ${{ secrets.WINDOWS_CERTIFICATE_THUMBPRINT }} | ||||||
|           DEBUG: "electron-notarize*" |         run: yarn electron-builder --config --publish always | ||||||
|         # TODO: Fix electron-notarize flakes. The logs above should help gather more data on failures |  | ||||||
|         uses: nick-fields/retry@v3.0.0 |  | ||||||
|         with: |  | ||||||
|           timeout_minutes: 10 |  | ||||||
|           max_attempts: 3 |  | ||||||
|           command: yarn electron-builder --config --publish always |  | ||||||
|  |  | ||||||
|       - uses: actions/upload-artifact@v4 |       - uses: actions/upload-artifact@v4 | ||||||
|         if: ${{ env.IS_RELEASE == 'true' }} |         if: ${{ env.IS_RELEASE == 'true' }} | ||||||
| @ -377,17 +362,6 @@ jobs: | |||||||
|       - name: List artifacts |       - name: List artifacts | ||||||
|         run: "ls -R out" |         run: "ls -R out" | ||||||
|  |  | ||||||
|       - name: Set more complete nightly release notes |  | ||||||
|         if: ${{ env.IS_NIGHTLY == 'true' }} |  | ||||||
|         run: | |  | ||||||
|           # Note: preferred going this way instead of a full clone in the checkout step, |  | ||||||
|           # see https://github.com/actions/checkout/issues/1471 |  | ||||||
|           git fetch --prune --unshallow --tags |  | ||||||
|           export TAG="nightly-${VERSION}" |  | ||||||
|           export PREVIOUS_TAG=$(git describe --tags --match="nightly-v[0-9]*" --abbrev=0) |  | ||||||
|           export NOTES=$(./scripts/get-nightly-changelog.sh) |  | ||||||
|           yarn files:set-notes |  | ||||||
|  |  | ||||||
|       - name: Authenticate to Google Cloud |       - name: Authenticate to Google Cloud | ||||||
|         if: ${{ env.IS_NIGHTLY == 'true' }} |         if: ${{ env.IS_NIGHTLY == 'true' }} | ||||||
|         uses: 'google-github-actions/auth@v2.1.7' |         uses: 'google-github-actions/auth@v2.1.7' | ||||||
| @ -409,17 +383,12 @@ jobs: | |||||||
|           parent: false |           parent: false | ||||||
|           destination: 'dl.kittycad.io/releases/modeling-app/nightly' |           destination: 'dl.kittycad.io/releases/modeling-app/nightly' | ||||||
|  |  | ||||||
|       - name: Invalidate bucket cache on latest*.yml and last_download.json files |       - name: Create draft release | ||||||
|         if: ${{ env.IS_NIGHTLY == 'true' }} |         uses: softprops/action-gh-release@v2 | ||||||
|         run: yarn files:invalidate-bucket:nightly |         if: ${{ env.IS_RELEASE == 'true' }} | ||||||
|  |  | ||||||
|       - name: Tag nightly commit |  | ||||||
|         if: ${{ env.IS_NIGHTLY == 'true' }} |  | ||||||
|         uses: actions/github-script@v7 |  | ||||||
|         with: |         with: | ||||||
|           script: | |           name: ${{ env.VERSION }} | ||||||
|             const { VERSION } = process.env           |           tag_name: ${{ env.VERSION }} | ||||||
|             const { owner, repo } = context.repo |           draft: true | ||||||
|             const { sha } = context |           generate_release_notes: true | ||||||
|             const ref = `refs/tags/nightly-${VERSION}` |           files: 'out/Zoo*' | ||||||
|             github.rest.git.createRef({ owner, repo, sha, ref }) |  | ||||||
|  | |||||||
							
								
								
									
										44
									
								
								.github/workflows/cargo-bench.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,44 @@ | |||||||
|  | on: | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - main | ||||||
|  |     paths: | ||||||
|  |       - '**.rs' | ||||||
|  |       - '**/Cargo.toml' | ||||||
|  |       - '**/Cargo.lock' | ||||||
|  |       - '**/rust-toolchain.toml' | ||||||
|  |       - .github/workflows/cargo-bench.yml | ||||||
|  |   pull_request: | ||||||
|  |     paths: | ||||||
|  |       - '**.rs' | ||||||
|  |       - '**/Cargo.toml' | ||||||
|  |       - '**/Cargo.lock' | ||||||
|  |       - '**/rust-toolchain.toml' | ||||||
|  |       - .github/workflows/cargo-bench.yml | ||||||
|  |   workflow_dispatch: | ||||||
|  | permissions: read-all | ||||||
|  | concurrency: | ||||||
|  |   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | ||||||
|  |   cancel-in-progress: true | ||||||
|  | name: cargo bench | ||||||
|  | jobs: | ||||||
|  |   cargo-bench: | ||||||
|  |     name: Benchmark with iai | ||||||
|  |     runs-on: ubuntu-latest-8-cores | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v4 | ||||||
|  |       - uses: dtolnay/rust-toolchain@stable | ||||||
|  |       - name: Install dependencies | ||||||
|  |         run: | | ||||||
|  |           cargo install cargo-criterion | ||||||
|  |           sudo apt update | ||||||
|  |           sudo apt install -y valgrind | ||||||
|  |       - name: Rust Cache | ||||||
|  |         uses: Swatinem/rust-cache@v2.6.1 | ||||||
|  |       - name: Benchmark kcl library | ||||||
|  |         shell: bash | ||||||
|  |         run: |- | ||||||
|  |           cd src/wasm-lib/kcl; cargo bench --all-features -- iai | ||||||
|  |         env: | ||||||
|  |           KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								.github/workflows/cargo-test.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -2,8 +2,28 @@ on: | |||||||
|   push: |   push: | ||||||
|     branches: |     branches: | ||||||
|       - main |       - main | ||||||
|  |     paths: | ||||||
|  |       - 'src/wasm-lib/**.rs' | ||||||
|  |       - 'src/wasm-lib/**.hbs' | ||||||
|  |       - 'src/wasm-lib/**.gen' | ||||||
|  |       - 'src/wasm-lib/**.snap' | ||||||
|  |       - '**/Cargo.toml' | ||||||
|  |       - '**/Cargo.lock' | ||||||
|  |       - '**/rust-toolchain.toml' | ||||||
|  |       - 'src/wasm-lib/**.kcl' | ||||||
|  |       - .github/workflows/cargo-test.yml | ||||||
|  |  | ||||||
|   pull_request: |   pull_request: | ||||||
|  |     paths: | ||||||
|  |       - 'src/wasm-lib/**.rs' | ||||||
|  |       - 'src/wasm-lib/**.hbs' | ||||||
|  |       - 'src/wasm-lib/**.gen' | ||||||
|  |       - 'src/wasm-lib/**.snap' | ||||||
|  |       - '**/Cargo.toml' | ||||||
|  |       - '**/Cargo.lock' | ||||||
|  |       - '**/rust-toolchain.toml' | ||||||
|  |       - 'src/wasm-lib/**.kcl' | ||||||
|  |       - .github/workflows/cargo-test.yml | ||||||
|   workflow_dispatch: |   workflow_dispatch: | ||||||
| permissions: read-all | permissions: read-all | ||||||
| concurrency: | concurrency: | ||||||
| @ -51,7 +71,7 @@ jobs: | |||||||
|           KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} |           KITTYCAD_API_TOKEN: ${{secrets.KITTYCAD_API_TOKEN}} | ||||||
|           RUST_MIN_STACK: 10485760000 |           RUST_MIN_STACK: 10485760000 | ||||||
|       - name: Upload to codecov.io |       - name: Upload to codecov.io | ||||||
|         uses: codecov/codecov-action@v5 |         uses: codecov/codecov-action@v4 | ||||||
|         with: |         with: | ||||||
|           token: ${{secrets.CODECOV_TOKEN}} |           token: ${{secrets.CODECOV_TOKEN}} | ||||||
|           fail_ci_if_error: true |           fail_ci_if_error: true | ||||||
|  | |||||||
							
								
								
									
										32
									
								
								.github/workflows/codemirror-lang-kcl.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -1,32 +0,0 @@ | |||||||
| name: CodeMirror Lang KCL |  | ||||||
|  |  | ||||||
| on: |  | ||||||
|   pull_request: |  | ||||||
|   push: |  | ||||||
|     branches: |  | ||||||
|       - main |  | ||||||
|  |  | ||||||
| concurrency: |  | ||||||
|   group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} |  | ||||||
|   cancel-in-progress: true |  | ||||||
|  |  | ||||||
| jobs: |  | ||||||
|   yarn-unit-test: |  | ||||||
|     runs-on: ubuntu-latest |  | ||||||
|     steps: |  | ||||||
|       - uses: actions/checkout@v4 |  | ||||||
|  |  | ||||||
|       - uses: actions/setup-node@v4 |  | ||||||
|         with: |  | ||||||
|           node-version-file: '.nvmrc' |  | ||||||
|           cache: 'yarn' |  | ||||||
|  |  | ||||||
|       - run: yarn install |  | ||||||
|         working-directory: packages/codemirror-lang-kcl |  | ||||||
|  |  | ||||||
|       - run: yarn tsc |  | ||||||
|         working-directory: packages/codemirror-lang-kcl |  | ||||||
|  |  | ||||||
|       - name: run unit tests |  | ||||||
|         run: yarn test |  | ||||||
|         working-directory: packages/codemirror-lang-kcl |  | ||||||
							
								
								
									
										168
									
								
								.github/workflows/e2e-tests.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -33,19 +33,20 @@ jobs: | |||||||
|             rust: |             rust: | ||||||
|               - 'src/wasm-lib/**' |               - 'src/wasm-lib/**' | ||||||
|  |  | ||||||
|   electron: |   browser: | ||||||
|     timeout-minutes: 60 |     timeout-minutes: ${{ matrix.os == 'macos-14' && 60 || 50 }} | ||||||
|     name: playwright:electron:${{ matrix.os }} ${{ matrix.shardIndex }} ${{ matrix.shardTotal }} |     name: playwright:browser:${{ matrix.os }} ${{ matrix.shardIndex }} ${{ matrix.shardTotal }} | ||||||
|     strategy: |     strategy: | ||||||
|       fail-fast: false |       fail-fast: false | ||||||
|       matrix: |       matrix: | ||||||
|         # TODO: enable self-hosted-windows-8-cores once available |         os: [ubuntu-latest-8-cores, windows-latest-8-cores] | ||||||
|         os: [namespace-profile-ubuntu-8-cores, namespace-profile-macos-8-cores, windows-16-cores] |  | ||||||
|         shardIndex: [1, 2, 3, 4] |         shardIndex: [1, 2, 3, 4] | ||||||
|         shardTotal: [4] |         shardTotal: [4] | ||||||
|     runs-on: ${{ matrix.os }} |     runs-on: ${{ matrix.os }} | ||||||
|     needs: check-rust-changes |     needs: check-rust-changes | ||||||
|     steps: |     steps: | ||||||
|  |     - name: Tune GitHub-hosted runner network | ||||||
|  |       uses: smorimoto/tune-github-hosted-runner-network@v1 | ||||||
|     - uses: actions/checkout@v4 |     - uses: actions/checkout@v4 | ||||||
|     - uses: actions/setup-node@v4 |     - uses: actions/setup-node@v4 | ||||||
|       with: |       with: | ||||||
| @ -67,7 +68,7 @@ jobs: | |||||||
|     - name: Download Wasm Cache |     - name: Download Wasm Cache | ||||||
|       id: download-wasm |       id: download-wasm | ||||||
|       if: needs.check-rust-changes.outputs.rust-changed == 'false' |       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||||
|       uses: dawidd6/action-download-artifact@v7 |       uses: dawidd6/action-download-artifact@v6 | ||||||
|       continue-on-error: true |       continue-on-error: true | ||||||
|       with: |       with: | ||||||
|         github_token: ${{secrets.GITHUB_TOKEN}} |         github_token: ${{secrets.GITHUB_TOKEN}} | ||||||
| @ -100,8 +101,7 @@ jobs: | |||||||
|         echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH |         echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH | ||||||
|     - name: Install vector |     - name: Install vector | ||||||
|       shell: bash |       shell: bash | ||||||
|       # TODO: figure out what to do with this, it's failing |       if:  ${{ !startsWith(matrix.os, 'windows') }} | ||||||
|       if: false |  | ||||||
|       run: | |       run: | | ||||||
|         curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh |         curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh | ||||||
|         chmod +x /tmp/vector.sh |         chmod +x /tmp/vector.sh | ||||||
| @ -123,16 +123,13 @@ jobs: | |||||||
|       if: steps.download-wasm.outcome == 'failure' |       if: steps.download-wasm.outcome == 'failure' | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: yarn build:wasm |       run: yarn build:wasm | ||||||
|     - name: build electron |     - name: build web | ||||||
|  |       run: yarn build:local | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: yarn tron:package |  | ||||||
|     - name: Run ubuntu/chrome snapshots |     - name: Run ubuntu/chrome snapshots | ||||||
|       if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 }} |  | ||||||
|       shell: bash |       shell: bash | ||||||
|       # TODO: break this in its own job, for now it's not slowing down the overall execution as ubuntu is the quickest, |  | ||||||
|       # but we could do better. This forces a large 1/1 shard of all 20 snapshot tests that runs in about 3 minutes. |  | ||||||
|       run: | |       run: | | ||||||
|         PLATFORM=web yarn playwright test --config=playwright.config.ts --retries="3" --update-snapshots --grep=@snapshot  --shard=1/1 |         yarn playwright test --project="Google Chrome" --config=playwright.ci.config.ts --retries="3" --update-snapshots --grep=@snapshot  --shard=${{ matrix.shardIndex }}/${{ matrix.shardTotal }} | ||||||
|       env: |       env: | ||||||
|         CI: true |         CI: true | ||||||
|         NODE_ENV: development |         NODE_ENV: development | ||||||
| @ -153,7 +150,6 @@ jobs: | |||||||
|       continue-on-error: true |       continue-on-error: true | ||||||
|       run: rm -r test-results |       run: rm -r test-results | ||||||
|     - name: check for changes |     - name: check for changes | ||||||
|       if: ${{ matrix.os == 'namespace-profile-ubuntu-8-cores' && matrix.shardIndex == 1 }} |  | ||||||
|       shell: bash |       shell: bash | ||||||
|       id: git-check |       id: git-check | ||||||
|       run: | |       run: | | ||||||
| @ -190,12 +186,12 @@ jobs: | |||||||
|       with: |       with: | ||||||
|         name: test-results-${{ matrix.os }}-${{ matrix.shardIndex }}-${{ github.sha }} |         name: test-results-${{ matrix.os }}-${{ matrix.shardIndex }}-${{ github.sha }} | ||||||
|         path: test-results/ |         path: test-results/ | ||||||
|     - name: Run playwright/electron flow (with retries) |     - name: Run playwright/chrome flow (with retries) | ||||||
|       id: retry |       id: retry | ||||||
|       if: ${{ !cancelled() && (success() || failure()) }} |       if: ${{ !cancelled() && (success() || failure()) }} | ||||||
|       shell: bash |       shell: bash | ||||||
|       run: | |       run: | | ||||||
|         .github/ci-cd-scripts/playwright-electron.sh ${{matrix.shardIndex}} ${{matrix.shardTotal}} ${{matrix.os}} |         .github/ci-cd-scripts/playwright-browser-chrome.sh ${{matrix.shardIndex}} ${{matrix.shardTotal}} ${{matrix.os}} | ||||||
|       env: |       env: | ||||||
|         CI: true |         CI: true | ||||||
|         FAIL_ON_CONSOLE_ERRORS: true |         FAIL_ON_CONSOLE_ERRORS: true | ||||||
| @ -203,6 +199,11 @@ jobs: | |||||||
|         VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} |         VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||||
|         VITE_KC_SKIP_AUTH: true |         VITE_KC_SKIP_AUTH: true | ||||||
|         token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} |         token: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||||
|  |     - name: send to axiom | ||||||
|  |       if: always() | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         node playwrightProcess.mjs | tee /tmp/github-actions.log | ||||||
|     - uses: actions/upload-artifact@v4 |     - uses: actions/upload-artifact@v4 | ||||||
|       if: always() |       if: always() | ||||||
|       with: |       with: | ||||||
| @ -220,3 +221,136 @@ jobs: | |||||||
|         retention-days: 30 |         retention-days: 30 | ||||||
|         overwrite: true |         overwrite: true | ||||||
|  |  | ||||||
|  |  | ||||||
|  |   electron: | ||||||
|  |     name: playwright:electron:${{matrix.os}} | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         os: [ubuntu-latest-8-cores, windows-latest-8-cores, macos-14-large] | ||||||
|  |     timeout-minutes: 60 | ||||||
|  |     runs-on: ${{ matrix.os }} | ||||||
|  |     needs: check-rust-changes | ||||||
|  |     steps: | ||||||
|  |     - name: Tune GitHub-hosted runner network | ||||||
|  |       uses: smorimoto/tune-github-hosted-runner-network@v1 | ||||||
|  |     - uses: actions/checkout@v4 | ||||||
|  |     - uses: actions/setup-node@v4 | ||||||
|  |       with: | ||||||
|  |         node-version-file: '.nvmrc' | ||||||
|  |         cache: 'yarn' | ||||||
|  |     - uses: KittyCAD/action-install-cli@main | ||||||
|  |     - name: Install dependencies | ||||||
|  |       shell: bash | ||||||
|  |       run: yarn | ||||||
|  |     - name: Cache Playwright Browsers | ||||||
|  |       uses: actions/cache@v4 | ||||||
|  |       with: | ||||||
|  |         path: | | ||||||
|  |           ~/.cache/ms-playwright/ | ||||||
|  |         key: ${{ runner.os }}-playwright-${{ hashFiles('yarn.lock') }} | ||||||
|  |     - name: Install Playwright Browsers | ||||||
|  |       shell: bash | ||||||
|  |       run: yarn playwright install chromium --with-deps | ||||||
|  |     - name: Download Wasm Cache | ||||||
|  |       id: download-wasm | ||||||
|  |       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||||
|  |       uses: dawidd6/action-download-artifact@v6 | ||||||
|  |       continue-on-error: true | ||||||
|  |       with: | ||||||
|  |         github_token: ${{secrets.GITHUB_TOKEN}} | ||||||
|  |         name: wasm-bundle | ||||||
|  |         workflow: build-and-store-wasm.yml | ||||||
|  |         branch: main | ||||||
|  |         path: src/wasm-lib/pkg | ||||||
|  |     - name: copy wasm blob | ||||||
|  |       if: needs.check-rust-changes.outputs.rust-changed == 'false' | ||||||
|  |       shell: bash | ||||||
|  |       run: cp src/wasm-lib/pkg/wasm_lib_bg.wasm public | ||||||
|  |       continue-on-error: true | ||||||
|  |     - name: Setup Rust | ||||||
|  |       uses: dtolnay/rust-toolchain@stable | ||||||
|  |     - name: Cache Wasm (because rust diff) | ||||||
|  |       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||||
|  |       uses: Swatinem/rust-cache@v2 | ||||||
|  |       with: | ||||||
|  |         workspaces: './src/wasm-lib' | ||||||
|  |     - name: OR Cache Wasm (because wasm cache failed) | ||||||
|  |       if: steps.download-wasm.outcome == 'failure' | ||||||
|  |       uses: Swatinem/rust-cache@v2 | ||||||
|  |       with: | ||||||
|  |         workspaces: './src/wasm-lib' | ||||||
|  |     - name: install good sed | ||||||
|  |       if:  ${{ startsWith(matrix.os, 'macos') }} | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         brew install gnu-sed | ||||||
|  |         echo "/opt/homebrew/opt/gnu-sed/libexec/gnubin" >> $GITHUB_PATH | ||||||
|  |     - name: Install vector | ||||||
|  |       if:  ${{ startsWith(matrix.os, 'ubuntu') }} | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         curl --proto '=https' --tlsv1.2 -sSfL https://sh.vector.dev > /tmp/vector.sh | ||||||
|  |         chmod +x /tmp/vector.sh | ||||||
|  |         /tmp/vector.sh -y -no-modify-path | ||||||
|  |         mkdir -p /tmp/vector | ||||||
|  |         cp .github/workflows/vector.toml /tmp/vector.toml | ||||||
|  |         sed -i "s#GITHUB_WORKFLOW#${GITHUB_WORKFLOW}#g" /tmp/vector.toml | ||||||
|  |         sed -i "s#GITHUB_REPOSITORY#${GITHUB_REPOSITORY}#g" /tmp/vector.toml | ||||||
|  |         sed -i "s#GITHUB_SHA#${GITHUB_SHA}#g" /tmp/vector.toml | ||||||
|  |         sed -i "s#GITHUB_REF_NAME#${GITHUB_REF_NAME}#g" /tmp/vector.toml | ||||||
|  |         sed -i "s#GH_ACTIONS_AXIOM_TOKEN#${{secrets.GH_ACTIONS_AXIOM_TOKEN}}#g" /tmp/vector.toml | ||||||
|  |         cat /tmp/vector.toml | ||||||
|  |         ${HOME}/.vector/bin/vector --config /tmp/vector.toml & | ||||||
|  |     - name: Build Wasm (because rust diff) | ||||||
|  |       if: needs.check-rust-changes.outputs.rust-changed == 'true' | ||||||
|  |       shell: bash | ||||||
|  |       run: yarn build:wasm | ||||||
|  |     - name: OR Build Wasm (because wasm cache failed) | ||||||
|  |       if: steps.download-wasm.outcome == 'failure' | ||||||
|  |       shell: bash | ||||||
|  |       run: yarn build:wasm | ||||||
|  |     - name: build electron | ||||||
|  |       shell: bash | ||||||
|  |       run: yarn tron:package | ||||||
|  |     - uses: actions/download-artifact@v4 | ||||||
|  |       if: ${{ !cancelled() && (success() || failure()) }} | ||||||
|  |       continue-on-error: true | ||||||
|  |       with: | ||||||
|  |         name: test-results-electron-${{ matrix.os }}-${{ github.sha }} | ||||||
|  |         path: test-results/ | ||||||
|  |     - name: Run electron tests (with retries) | ||||||
|  |       id: retry | ||||||
|  |       if: ${{ !cancelled() && (success() || failure()) }} | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         .github/ci-cd-scripts/playwright-electron.sh ${{ matrix.os }} | ||||||
|  |       env: | ||||||
|  |         CI: true | ||||||
|  |         FAIL_ON_CONSOLE_ERRORS: true | ||||||
|  |         NODE_ENV: development | ||||||
|  |         VITE_KC_DEV_TOKEN: ${{ secrets.KITTYCAD_API_TOKEN_DEV }} | ||||||
|  |         VITE_KC_SKIP_AUTH: true | ||||||
|  |         IS_UBUNTU: ${{ startsWith(matrix.os, 'ubuntu') && 'true' || 'false' }} | ||||||
|  |         #DEBUG: 'pw:browser*' | ||||||
|  |     - name: send to axiom | ||||||
|  |       if: ${{ !cancelled() && (success() || failure()) && !startsWith(matrix.os, 'windows') }} | ||||||
|  |       shell: bash | ||||||
|  |       run: | | ||||||
|  |         node playwrightProcess.mjs | tee /tmp/github-actions.log | ||||||
|  |     - uses: actions/upload-artifact@v4 | ||||||
|  |       if: ${{ !cancelled() && (success() || failure()) }} | ||||||
|  |       with: | ||||||
|  |         name: test-results-electron-${{ matrix.os }}-${{ github.sha }} | ||||||
|  |         path: test-results/ | ||||||
|  |         include-hidden-files: true | ||||||
|  |         retention-days: 30 | ||||||
|  |         overwrite: true | ||||||
|  |     - uses: actions/upload-artifact@v4 | ||||||
|  |       if: ${{ !cancelled() && (success() || failure()) }} | ||||||
|  |       with: | ||||||
|  |         name: playwright-report-electron-${{ matrix.os }}-${{ github.sha }} | ||||||
|  |         path: playwright-report/ | ||||||
|  |         include-hidden-files: true | ||||||
|  |         retention-days: 30 | ||||||
|  |         overwrite: true | ||||||
|  | |||||||
							
								
								
									
										12
									
								
								.github/workflows/publish-apps-release.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -126,13 +126,11 @@ jobs: | |||||||
|           destination: 'dl.kittycad.io/releases/modeling-app' |           destination: 'dl.kittycad.io/releases/modeling-app' | ||||||
|  |  | ||||||
|       - name: Invalidate bucket cache on latest*.yml and last_download.json files |       - name: Invalidate bucket cache on latest*.yml and last_download.json files | ||||||
|         run: yarn files:invalidate-bucket |         run: | | ||||||
|  |           gcloud compute url-maps invalidate-cdn-cache dl-url-map --path="/releases/modeling-app/last_download.json" --async | ||||||
|       - name: Upload release files to Github |           gcloud compute url-maps invalidate-cdn-cache dl-url-map --path="/releases/modeling-app/latest-linux-arm64.yml" --async | ||||||
|         if: ${{ github.event_name == 'release' }} |           gcloud compute url-maps invalidate-cdn-cache dl-url-map --path="/releases/modeling-app/latest-mac.yml" --async | ||||||
|         uses: softprops/action-gh-release@v2 |           gcloud compute url-maps invalidate-cdn-cache dl-url-map --path="/releases/modeling-app/latest.yml" --async | ||||||
|         with: |  | ||||||
|           files: 'out/Zoo*' |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   announce_release: |   announce_release: | ||||||
|  | |||||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						| @ -61,7 +61,6 @@ Mac_App_Distribution.provisionprofile | |||||||
| *.tsbuildinfo | *.tsbuildinfo | ||||||
| src/wasm-lib/pkg | src/wasm-lib/pkg | ||||||
|  |  | ||||||
| .eslintcache |  | ||||||
| venv | venv | ||||||
| .vite/ | .vite/ | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										43
									
								
								INSTALL.md
									
									
									
									
									
								
							
							
						
						| @ -1,43 +0,0 @@ | |||||||
| # Setting Up Zoo Modeling App |  | ||||||
|  |  | ||||||
| Compared to other CAD software, getting Zoo Modeling App up and running is quick and straightforward across platforms. It's about 100MB to download and is quick to install. |  | ||||||
|  |  | ||||||
| ## Windows |  | ||||||
|  |  | ||||||
| 1. Download the [Zoo Modeling App installer](https://zoo.dev/modeling-app/download) for Windows and for your processor type. |  | ||||||
|  |  | ||||||
| 2. Once downloaded, run the installer `Zoo Modeling App-{version}-{arch}-win.exe` which should take a few seconds. |  | ||||||
|  |  | ||||||
| 3. The installation happens at `C:\Program Files\Zoo Modeling App`. A shortcut in the start menu is also created so you can run the app easily by clicking on it. |  | ||||||
|  |  | ||||||
| ## macOS |  | ||||||
|  |  | ||||||
| 1. Download the [Zoo Modeling App installer](https://zoo.dev/modeling-app/download) for macOS and for your processor type. |  | ||||||
|  |  | ||||||
| 2. Once downloaded, open the disk image `Zoo Modeling App-{version}-{arch}-mac.dmg` and drag the applications to your `Applications` directory. |  | ||||||
|  |  | ||||||
| 3. You can then open your `Applications` directory and double-click on `Zoo Modeling App` to open. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Linux  |  | ||||||
|  |  | ||||||
| 1. Download the [Zoo Modeling App installer](https://zoo.dev/modeling-app/download) for Linux and for your processor type. |  | ||||||
|  |  | ||||||
| 2. Install the dependencies needed to run the [AppImage format](https://appimage.org/). |  | ||||||
|     -  On Ubuntu, install the FUSE library with these commands in a terminal. |  | ||||||
|        ```bash |  | ||||||
|        sudo apt update |  | ||||||
|        sudo apt install libfuse2 |  | ||||||
|        ``` |  | ||||||
|     - Optionally, follow [these steps](https://github.com/probonopd/go-appimage/blob/master/src/appimaged/README.md#initial-setup) to install `appimaged`. It is a daemon that makes interacting with AppImage files more seamless.  |  | ||||||
|     - Once installed, copy the downloaded `Zoo Modeling App-{version}-{arch}-linux.AppImage` to the directory of your choice, for instance `~/Applications`. |  | ||||||
|  |  | ||||||
|    - `appimaged` should automatically find it and make it executable. If not, run: |  | ||||||
|      ```bash |  | ||||||
|      chmod a+x ~/Applications/Zoo\ Modeling\ App-{version}-{arch}-linux.AppImage |  | ||||||
|      ``` |  | ||||||
|  |  | ||||||
| 3. You can double-click on the AppImage to run it, or in a terminal with this command: |  | ||||||
|    ```bash |  | ||||||
|     ~/Applications/Zoo\ Modeling\ App-{version}-{arch}-linux.AppImage |  | ||||||
|    ``` |  | ||||||
							
								
								
									
										77
									
								
								README.md
									
									
									
									
									
								
							
							
						
						| @ -99,7 +99,7 @@ yarn tron:start | |||||||
|  |  | ||||||
| This will start the application and hot-reload on changes. | This will start the application and hot-reload on changes. | ||||||
|  |  | ||||||
| Devtools can be opened with the usual Cmd-Opt-I (Mac) or Ctrl-Shift-I (Linux and Windows). | Devtools can be opened with the usual Cmd/Ctrl-Shift-I. | ||||||
|  |  | ||||||
| To build, run `yarn tron:package`. | To build, run `yarn tron:package`. | ||||||
|  |  | ||||||
| @ -136,7 +136,7 @@ https://github.com/KittyCAD/modeling-app/issues/new | |||||||
|  |  | ||||||
| #### 2. Push a new tag | #### 2. Push a new tag | ||||||
|  |  | ||||||
| Create a new tag and push it to the repo. The `semantic-release.sh` script will automatically bump the minor part, which we use the most. For instance going from `v0.27.0` to `v0.28.0`. | Create a new tag and push it to the repo (eg. `v0.28.0` for `$VERSION`) | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| VERSION=$(./scripts/semantic-release.sh) | VERSION=$(./scripts/semantic-release.sh) | ||||||
| @ -146,14 +146,16 @@ git push origin --tags | |||||||
|  |  | ||||||
| This will trigger the `build-apps` workflow, set the version, build & sign the apps, and generate release files as well as updater-test artifacts. | This will trigger the `build-apps` workflow, set the version, build & sign the apps, and generate release files as well as updater-test artifacts. | ||||||
|  |  | ||||||
| The workflow should be listed right away [in this list](https://github.com/KittyCAD/modeling-app/actions/workflows/build-apps.yml?query=event%3Apush)). | Once the workflow succeeds, a draft release will be created at https://github.com/KittyCAD/modeling-app/releases. | ||||||
|  |  | ||||||
| #### 3. Manually test artifacts | #### 3. Manually test artifacts from the Cut Release PR | ||||||
|  |  | ||||||
| ##### Release builds | ##### Release builds | ||||||
|  |  | ||||||
| The release builds can be found under the `out-{arch}-{platform}` zip files, at the very bottom of the `build-apps` summary page for the workflow (triggered by the tag in 2.). | The release builds can be found under the `out-{arch}-{platform}` zip files, at the very bottom of the `build-apps` summary page for the workflow (triggered by the tag in 2.). | ||||||
|  |  | ||||||
|  | Alternatively, the draft release will also include these builds. | ||||||
|  |  | ||||||
| Manually test against this [list](https://github.com/KittyCAD/modeling-app/issues/3588) across Windows, MacOS, Linux and posting results as comments in the issue. | Manually test against this [list](https://github.com/KittyCAD/modeling-app/issues/3588) across Windows, MacOS, Linux and posting results as comments in the issue. | ||||||
|  |  | ||||||
| ##### Updater-test builds | ##### Updater-test builds | ||||||
| @ -176,11 +178,9 @@ If the prompt doesn't show up, start the app in command line to grab the electro | |||||||
|  |  | ||||||
| #### 4. Publish the release | #### 4. Publish the release | ||||||
|  |  | ||||||
| Head over to https://github.com/KittyCAD/modeling-app/releases/new, pick the newly created tag and type it in the _Release title_ field as well. | Head over to https://github.com/KittyCAD/modeling-app/releases, paste in the changelog discussed in the issue, and publish the draft release created by the `build-apps` workflow from step 2. | ||||||
|  |  | ||||||
| Hit _Generate release notes_ as a starting point to discuss the changelog in the issue. Once done, make sure _Set as the latest release_ is checked, and hit _Publish release_.  | A new Action kicks in at https://github.com/KittyCAD/modeling-app/actions, which can be found under `release` event filter. On success, the files will be uploaded to the public bucket and the announcement on Discord will be sent.  | ||||||
|  |  | ||||||
| A new `publish-apps-release` will kick in and you should be able to find it [here](https://github.com/KittyCAD/modeling-app/actions?query=event%3Arelease). On success, the files will be uploaded to the public bucket as well as to the GitHub release, and the announcement on Discord will be sent.  |  | ||||||
|  |  | ||||||
| #### 5. Close the issue | #### 5. Close the issue | ||||||
|  |  | ||||||
| @ -337,47 +337,13 @@ For individual testing: | |||||||
| yarn test abstractSyntaxTree -t "unexpected closed curly brace" --silent=false | yarn test abstractSyntaxTree -t "unexpected closed curly brace" --silent=false | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testing Library E2E](https://testing-library.com/docs/react-testing-library/intro) tests, in interactive mode by default. | Which will run our suite of [Vitest unit](https://vitest.dev/) and [React Testing Library E2E](https://testing-library.com/docs/react-testing-library/intro/) tests, in interactive mode by default. | ||||||
|  |  | ||||||
| ### Rust tests | ### Rust tests | ||||||
|  |  | ||||||
| **Dependencies** |  | ||||||
|  |  | ||||||
| - `KITTYCAD_API_TOKEN` |  | ||||||
| - `cargo-nextest` |  | ||||||
| - `just` |  | ||||||
|  |  | ||||||
| #### Setting KITTYCAD_API_TOKEN |  | ||||||
| Use the production zoo.dev token, set this environment variable before running the tests |  | ||||||
|  |  | ||||||
| #### Installing cargonextest |  | ||||||
|  |  | ||||||
| ``` |  | ||||||
| cd src/wasm-lib |  | ||||||
| cargo search cargo-nextest |  | ||||||
| cargo install cargo-nextest |  | ||||||
| ``` |  | ||||||
|  |  | ||||||
| #### just |  | ||||||
| install [`just`](https://github.com/casey/just?tab=readme-ov-file#pre-built-binaries) |  | ||||||
|  |  | ||||||
| #### Running the tests |  | ||||||
|  |  | ||||||
| ```bash | ```bash | ||||||
| # With just |  | ||||||
| # Make sure KITTYCAD_API_TOKEN=<prod zoo.dev token> is set |  | ||||||
| # Make sure you installed cargo-nextest |  | ||||||
| # Make sure you installed just |  | ||||||
| cd src/wasm-lib | cd src/wasm-lib | ||||||
| just test | KITTYCAD_API_TOKEN=XXX cargo test -- --test-threads=1 | ||||||
| ``` |  | ||||||
|  |  | ||||||
| ```bash |  | ||||||
| # Without just |  | ||||||
| # Make sure KITTYCAD_API_TOKEN=<prod zoo.dev token> is set |  | ||||||
| # Make sure you installed cargo-nextest |  | ||||||
| cd src/wasm-lib |  | ||||||
| export RUST_BRACKTRACE="full" && cargo nextest run --workspace --test-threads=1 |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| Where `XXX` is an API token from the production engine (NOT the dev environment). | Where `XXX` is an API token from the production engine (NOT the dev environment). | ||||||
| @ -422,6 +388,23 @@ yarn test:unit:local | |||||||
|  |  | ||||||
| #### E2E Tests | #### E2E Tests | ||||||
|  |  | ||||||
|  | **Playwright Browser** | ||||||
|  |  | ||||||
|  | These E2E tests run in a browser (without electron). | ||||||
|  | There are tests that are skipped if they are ran in a windows OS or Linux OS. We can use playwright tags to implement test skipping. | ||||||
|  |  | ||||||
|  | Breaking down the command `yarn test:playwright:browser:chrome:windows` | ||||||
|  | - The application is `playwright` | ||||||
|  | - The runtime is a `browser` | ||||||
|  | - The specific `browser` is `chrome` | ||||||
|  | - The test should run in a `windows` environment. It will skip tests that are broken or flaky in the windows OS. | ||||||
|  |  | ||||||
|  | ``` | ||||||
|  | yarn test:playwright:browser:chrome | ||||||
|  | yarn test:playwright:browser:chrome:windows | ||||||
|  | yarn test:playwright:browser:chrome:ubuntu | ||||||
|  | ``` | ||||||
|  |  | ||||||
| **Playwright Electron** | **Playwright Electron** | ||||||
|  |  | ||||||
| These E2E tests run in electron. There are tests that are skipped if they are ran in a windows, linux, or macos environment. We can use playwright tags to implement test skipping. | These E2E tests run in electron. There are tests that are skipped if they are ran in a windows, linux, or macos environment. We can use playwright tags to implement test skipping. | ||||||
| @ -467,9 +450,3 @@ PS: for the debug panel, the following JSON is useful for snapping the camera | |||||||
| ## KCL | ## KCL | ||||||
|  |  | ||||||
| For how to contribute to KCL, [see our KCL README](https://github.com/KittyCAD/modeling-app/tree/main/src/wasm-lib/kcl). | For how to contribute to KCL, [see our KCL README](https://github.com/KittyCAD/modeling-app/tree/main/src/wasm-lib/kcl). | ||||||
|  |  | ||||||
| ### Logging |  | ||||||
|  |  | ||||||
| To display logging (to the terminal or console) set `ZOO_LOG=1`. This will log some warnings and simple performance metrics. To view these in test runs, use `-- --nocapture`. |  | ||||||
|  |  | ||||||
| To enable memory metrics, build with `--features dhat-heap`. |  | ||||||
|  | |||||||
| Before Width: | Height: | Size: 119 KiB After Width: | Height: | Size: 176 KiB | 
| Before Width: | Height: | Size: 259 KiB After Width: | Height: | Size: 157 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/icon.ico
									
									
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 114 KiB After Width: | Height: | Size: 183 KiB | 
							
								
								
									
										
											BIN
										
									
								
								assets/icon.png
									
									
									
									
									
								
							
							
						
						| Before Width: | Height: | Size: 113 KiB After Width: | Height: | Size: 113 KiB | 
| @ -22,5 +22,3 @@ once fixed in engine will just start working here with no language changes. | |||||||
|  |  | ||||||
| - **Chamfers**: Chamfers cannot intersect, you will get an error. Only simple | - **Chamfers**: Chamfers cannot intersect, you will get an error. Only simple | ||||||
|     chamfer cases work currently. |     chamfer cases work currently. | ||||||
|  |  | ||||||
| - **Appearance**: Changing the appearance on a loft does not work. |  | ||||||
|  | |||||||
| @ -58,7 +58,7 @@ mountingPlate = extrude(thickness, mountingPlateSketch) | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| // Sketch on the face of a chamfer. | // Sketch on the face of a chamfer. | ||||||
| fn cube(pos, scale) { | fn cube = (pos, scale) => { | ||||||
|   sg = startSketchOn('XY') |   sg = startSketchOn('XY') | ||||||
|     |> startProfileAt(pos, %) |     |> startProfileAt(pos, %) | ||||||
|     |> line([0, scale], %) |     |> line([0, scale], %) | ||||||
|  | |||||||
| @ -19,7 +19,6 @@ layout: manual | |||||||
| * [`angledLineThatIntersects`](kcl/angledLineThatIntersects) | * [`angledLineThatIntersects`](kcl/angledLineThatIntersects) | ||||||
| * [`angledLineToX`](kcl/angledLineToX) | * [`angledLineToX`](kcl/angledLineToX) | ||||||
| * [`angledLineToY`](kcl/angledLineToY) | * [`angledLineToY`](kcl/angledLineToY) | ||||||
| * [`appearance`](kcl/appearance) |  | ||||||
| * [`arc`](kcl/arc) | * [`arc`](kcl/arc) | ||||||
| * [`arcTo`](kcl/arcTo) | * [`arcTo`](kcl/arcTo) | ||||||
| * [`asin`](kcl/asin) | * [`asin`](kcl/asin) | ||||||
| @ -30,12 +29,10 @@ layout: manual | |||||||
| * [`assertLessThan`](kcl/assertLessThan) | * [`assertLessThan`](kcl/assertLessThan) | ||||||
| * [`assertLessThanOrEq`](kcl/assertLessThanOrEq) | * [`assertLessThanOrEq`](kcl/assertLessThanOrEq) | ||||||
| * [`atan`](kcl/atan) | * [`atan`](kcl/atan) | ||||||
| * [`atan2`](kcl/atan2) |  | ||||||
| * [`bezierCurve`](kcl/bezierCurve) | * [`bezierCurve`](kcl/bezierCurve) | ||||||
| * [`ceil`](kcl/ceil) | * [`ceil`](kcl/ceil) | ||||||
| * [`chamfer`](kcl/chamfer) | * [`chamfer`](kcl/chamfer) | ||||||
| * [`circle`](kcl/circle) | * [`circle`](kcl/circle) | ||||||
| * [`circleThreePoint`](kcl/circleThreePoint) |  | ||||||
| * [`close`](kcl/close) | * [`close`](kcl/close) | ||||||
| * [`cm`](kcl/cm) | * [`cm`](kcl/cm) | ||||||
| * [`cos`](kcl/cos) | * [`cos`](kcl/cos) | ||||||
| @ -48,11 +45,11 @@ layout: manual | |||||||
| * [`getOppositeEdge`](kcl/getOppositeEdge) | * [`getOppositeEdge`](kcl/getOppositeEdge) | ||||||
| * [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge) | * [`getPreviousAdjacentEdge`](kcl/getPreviousAdjacentEdge) | ||||||
| * [`helix`](kcl/helix) | * [`helix`](kcl/helix) | ||||||
| * [`helixRevolutions`](kcl/helixRevolutions) |  | ||||||
| * [`hole`](kcl/hole) | * [`hole`](kcl/hole) | ||||||
| * [`hollow`](kcl/hollow) | * [`hollow`](kcl/hollow) | ||||||
| * [`import`](kcl/import) | * [`import`](kcl/import) | ||||||
| * [`inch`](kcl/inch) | * [`inch`](kcl/inch) | ||||||
|  | * [`int`](kcl/int) | ||||||
| * [`lastSegX`](kcl/lastSegX) | * [`lastSegX`](kcl/lastSegX) | ||||||
| * [`lastSegY`](kcl/lastSegY) | * [`lastSegY`](kcl/lastSegY) | ||||||
| * [`legAngX`](kcl/legAngX) | * [`legAngX`](kcl/legAngX) | ||||||
| @ -81,7 +78,6 @@ layout: manual | |||||||
| * [`pi`](kcl/pi) | * [`pi`](kcl/pi) | ||||||
| * [`polar`](kcl/polar) | * [`polar`](kcl/polar) | ||||||
| * [`polygon`](kcl/polygon) | * [`polygon`](kcl/polygon) | ||||||
| * [`pop`](kcl/pop) |  | ||||||
| * [`pow`](kcl/pow) | * [`pow`](kcl/pow) | ||||||
| * [`profileStart`](kcl/profileStart) | * [`profileStart`](kcl/profileStart) | ||||||
| * [`profileStartX`](kcl/profileStartX) | * [`profileStartX`](kcl/profileStartX) | ||||||
| @ -103,8 +99,8 @@ layout: manual | |||||||
| * [`sin`](kcl/sin) | * [`sin`](kcl/sin) | ||||||
| * [`sqrt`](kcl/sqrt) | * [`sqrt`](kcl/sqrt) | ||||||
| * [`startProfileAt`](kcl/startProfileAt) | * [`startProfileAt`](kcl/startProfileAt) | ||||||
|  | * [`startSketchAt`](kcl/startSketchAt) | ||||||
| * [`startSketchOn`](kcl/startSketchOn) | * [`startSketchOn`](kcl/startSketchOn) | ||||||
| * [`sweep`](kcl/sweep) |  | ||||||
| * [`tan`](kcl/tan) | * [`tan`](kcl/tan) | ||||||
| * [`tangentToEnd`](kcl/tangentToEnd) | * [`tangentToEnd`](kcl/tangentToEnd) | ||||||
| * [`tangentialArc`](kcl/tangentialArc) | * [`tangentialArc`](kcl/tangentialArc) | ||||||
|  | |||||||
| @ -4,8 +4,6 @@ excerpt: "Convert a number to an integer." | |||||||
| layout: manual | layout: manual | ||||||
| --- | --- | ||||||
|  |  | ||||||
| **WARNING:** This function is deprecated. |  | ||||||
|  |  | ||||||
| Convert a number to an integer. | Convert a number to an integer. | ||||||
|  |  | ||||||
| DEPRECATED use floor(), ceil(), or round(). | DEPRECATED use floor(), ceil(), or round(). | ||||||
| @ -39,7 +37,7 @@ assertEqual(n, 3, 0.0001, "5/2 = 2.5, rounded up makes 3") | |||||||
| startSketchOn('XZ') | startSketchOn('XZ') | ||||||
|   |> circle({ center = [0, 0], radius = 2 }, %) |   |> circle({ center = [0, 0], radius = 2 }, %) | ||||||
|   |> extrude(5, %) |   |> extrude(5, %) | ||||||
|   |> patternTransform(n, fn(id) { |   |> patternTransform(n, (id) => { | ||||||
|     return { translate = [4 * id, 0, 0] } |     return { translate = [4 * id, 0, 0] } | ||||||
|   }, %) |   }, %) | ||||||
| ``` | ``` | ||||||
|  | |||||||
| @ -29,7 +29,7 @@ map(array: [KclValue], map_fn: FunctionParam) -> [KclValue] | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| r = 10 // radius | r = 10 // radius | ||||||
| fn drawCircle(id) { | fn drawCircle = (id) => { | ||||||
|   return startSketchOn("XY") |   return startSketchOn("XY") | ||||||
|     |> circle({ center = [id * 2 * r, 0], radius = r }, %) |     |> circle({ center = [id * 2 * r, 0], radius = r }, %) | ||||||
| } | } | ||||||
| @ -45,7 +45,7 @@ circles = map([1..3], drawCircle) | |||||||
| ```js | ```js | ||||||
| r = 10 // radius | r = 10 // radius | ||||||
| // Call `map`, using an anonymous function instead of a named one. | // Call `map`, using an anonymous function instead of a named one. | ||||||
| circles = map([1..3], fn(id) { | circles = map([1..3], (id) => { | ||||||
|   return startSketchOn("XY") |   return startSketchOn("XY") | ||||||
|     |> circle({ center = [id * 2 * r, 0], radius = r }, %) |     |> circle({ center = [id * 2 * r, 0], radius = r }, %) | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ to other modules. | |||||||
|  |  | ||||||
| ``` | ``` | ||||||
| // util.kcl | // util.kcl | ||||||
| export fn increment(x) { | export fn increment = (x) => { | ||||||
|   return x + 1 |   return x + 1 | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
| @ -37,11 +37,11 @@ Multiple functions can be exported in a file. | |||||||
|  |  | ||||||
| ``` | ``` | ||||||
| // util.kcl | // util.kcl | ||||||
| export fn increment(x) { | export fn increment = (x) => { | ||||||
|   return x + 1 |   return x + 1 | ||||||
| } | } | ||||||
|  |  | ||||||
| export fn decrement(x) { | export fn decrement = (x) => { | ||||||
|   return x - 1 |   return x - 1 | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ Just like patternTransform, but works on 2D sketches not 3D solids. | |||||||
|  |  | ||||||
|  |  | ||||||
| ```js | ```js | ||||||
| patternTransform2d(total_instances: integer, transform_function: FunctionParam, solid_set: SketchSet) -> [Sketch] | patternTransform2d(total_instances: u32, transform_function: FunctionParam, solid_set: SketchSet) -> [Sketch] | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -17,7 +17,7 @@ patternTransform2d(total_instances: integer, transform_function: FunctionParam, | |||||||
|  |  | ||||||
| | Name | Type | Description | Required | | | Name | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `total_instances` | `integer` |  | Yes | | | `total_instances` | `u32` |  | Yes | | ||||||
| | `transform_function` | `FunctionParam` |  | Yes | | | `transform_function` | `FunctionParam` |  | Yes | | ||||||
| | `solid_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | A sketch or a group of sketches. | Yes | | | `solid_set` | [`SketchSet`](/docs/kcl/types/SketchSet) | A sketch or a group of sketches. | Yes | | ||||||
|  |  | ||||||
| @ -30,7 +30,7 @@ patternTransform2d(total_instances: integer, transform_function: FunctionParam, | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| // Each instance will be shifted along the X axis. | // Each instance will be shifted along the X axis. | ||||||
| fn transform(id) { | fn transform = (id) => { | ||||||
|   return { translate = [4 * id, 0] } |   return { translate = [4 * id, 0] } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
| @ -30,20 +30,20 @@ reduce(array: [KclValue], start: KclValue, reduce_fn: FunctionParam) -> KclValue | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| // This function adds two numbers. | // This function adds two numbers. | ||||||
| fn add(a, b) { | fn add = (a, b) => { | ||||||
|   return a + b |   return a + b | ||||||
| } | } | ||||||
|  |  | ||||||
| // This function adds an array of numbers. | // This function adds an array of numbers. | ||||||
| // It uses the `reduce` function, to call the `add` function on every | // It uses the `reduce` function, to call the `add` function on every | ||||||
| // element of the `arr` parameter. The starting value is 0. | // element of the `arr` parameter. The starting value is 0. | ||||||
| fn sum(arr) { | fn sum = (arr) => { | ||||||
|   return reduce(arr, 0, add) |   return reduce(arr, 0, add) | ||||||
| } | } | ||||||
|  |  | ||||||
| /* The above is basically like this pseudo-code: | /* The above is basically like this pseudo-code: | ||||||
| fn sum(arr): | fn sum(arr): | ||||||
|     sumSoFar = 0 |     let sumSoFar = 0 | ||||||
|     for i in arr: |     for i in arr: | ||||||
|         sumSoFar = add(sumSoFar, i) |         sumSoFar = add(sumSoFar, i) | ||||||
|     return sumSoFar */ |     return sumSoFar */ | ||||||
| @ -61,7 +61,7 @@ assertEqual(sum([1, 2, 3]), 6, 0.00001, "1 + 2 + 3 summed is 6") | |||||||
| // an anonymous `add` function as its parameter, instead of declaring a | // an anonymous `add` function as its parameter, instead of declaring a | ||||||
| // named function outside. | // named function outside. | ||||||
| arr = [1, 2, 3] | arr = [1, 2, 3] | ||||||
| sum = reduce(arr, 0, fn(i, result_so_far) { | sum = reduce(arr, 0, (i, result_so_far) => { | ||||||
|   return i + result_so_far |   return i + result_so_far | ||||||
| }) | }) | ||||||
|  |  | ||||||
| @ -74,18 +74,17 @@ assertEqual(sum, 6, 0.00001, "1 + 2 + 3 summed is 6") | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| // Declare a function that sketches a decagon. | // Declare a function that sketches a decagon. | ||||||
| fn decagon(radius) { | fn decagon = (radius) => { | ||||||
|   // Each side of the decagon is turned this many degrees from the previous angle. |   // Each side of the decagon is turned this many degrees from the previous angle. | ||||||
|   stepAngle = 1 / 10 * tau() |   stepAngle = 1 / 10 * tau() | ||||||
|  |  | ||||||
|   // Start the decagon sketch at this point. |   // Start the decagon sketch at this point. | ||||||
|   startOfDecagonSketch = startSketchOn('XY') |   startOfDecagonSketch = startSketchAt([cos(0) * radius, sin(0) * radius]) | ||||||
|     |> startProfileAt([cos(0) * radius, sin(0) * radius], %) |  | ||||||
|  |  | ||||||
|     // Use a `reduce` to draw the remaining decagon sides. |   // Use a `reduce` to draw the remaining decagon sides. | ||||||
|     // For each number in the array 1..10, run the given function, |   // For each number in the array 1..10, run the given function, | ||||||
|   // which takes a partially-sketched decagon and adds one more edge to it. |   // which takes a partially-sketched decagon and adds one more edge to it. | ||||||
|   fullDecagon = reduce([1..10], startOfDecagonSketch, fn(i, partialDecagon) { |   fullDecagon = reduce([1..10], startOfDecagonSketch, (i, partialDecagon) => { | ||||||
|     // Draw one edge of the decagon. |     // Draw one edge of the decagon. | ||||||
|     x = cos(stepAngle * i) * radius |     x = cos(stepAngle * i) * radius | ||||||
|     y = sin(stepAngle * i) * radius |     y = sin(stepAngle * i) * radius | ||||||
| @ -97,15 +96,14 @@ fn decagon(radius) { | |||||||
|  |  | ||||||
| /* The `decagon` above is basically like this pseudo-code: | /* The `decagon` above is basically like this pseudo-code: | ||||||
| fn decagon(radius): | fn decagon(radius): | ||||||
|     stepAngle = (1/10) * tau() |     let stepAngle = (1/10) * tau() | ||||||
|     plane = startSketchOn('XY') |     let startOfDecagonSketch = startSketchAt([(cos(0)*radius), (sin(0) * radius)]) | ||||||
|     startOfDecagonSketch = startProfileAt([(cos(0)*radius), (sin(0) * radius)], plane) |  | ||||||
|  |  | ||||||
|     // Here's the reduce part. |     // Here's the reduce part. | ||||||
|     partialDecagon = startOfDecagonSketch |     let partialDecagon = startOfDecagonSketch | ||||||
|     for i in [1..10]: |     for i in [1..10]: | ||||||
|         x = cos(stepAngle * i) * radius |         let x = cos(stepAngle * i) * radius | ||||||
|         y = sin(stepAngle * i) * radius |         let y = sin(stepAngle * i) * radius | ||||||
|         partialDecagon = lineTo([x, y], partialDecagon) |         partialDecagon = lineTo([x, y], partialDecagon) | ||||||
|     fullDecagon = partialDecagon // it's now full |     fullDecagon = partialDecagon // it's now full | ||||||
|     return fullDecagon */ |     return fullDecagon */ | ||||||
|  | |||||||
| @ -28,8 +28,7 @@ segEnd(tag: TagIdentifier) -> [number] | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| w = 15 | w = 15 | ||||||
| cube = startSketchOn('XY') | cube = startSketchAt([0, 0]) | ||||||
|   |> startProfileAt([0, 0], %) |  | ||||||
|   |> line([w, 0], %, $line1) |   |> line([w, 0], %, $line1) | ||||||
|   |> line([0, w], %, $line2) |   |> line([0, w], %, $line2) | ||||||
|   |> line([-w, 0], %, $line3) |   |> line([-w, 0], %, $line3) | ||||||
| @ -37,9 +36,8 @@ cube = startSketchOn('XY') | |||||||
|   |> close(%) |   |> close(%) | ||||||
|   |> extrude(5, %) |   |> extrude(5, %) | ||||||
|  |  | ||||||
| fn cylinder(radius, tag) { | fn cylinder = (radius, tag) => { | ||||||
|   return startSketchOn('XY') |   return startSketchAt([0, 0]) | ||||||
|     |> startProfileAt([0, 0], %) |  | ||||||
|     |> circle({ |     |> circle({ | ||||||
|          radius = radius, |          radius = radius, | ||||||
|          center = segEnd(tag) |          center = segEnd(tag) | ||||||
|  | |||||||
| @ -28,8 +28,7 @@ segStart(tag: TagIdentifier) -> [number] | |||||||
|  |  | ||||||
| ```js | ```js | ||||||
| w = 15 | w = 15 | ||||||
| cube = startSketchOn('XY') | cube = startSketchAt([0, 0]) | ||||||
|   |> startProfileAt([0, 0], %) |  | ||||||
|   |> line([w, 0], %, $line1) |   |> line([w, 0], %, $line1) | ||||||
|   |> line([0, w], %, $line2) |   |> line([0, w], %, $line2) | ||||||
|   |> line([-w, 0], %, $line3) |   |> line([-w, 0], %, $line3) | ||||||
| @ -37,9 +36,8 @@ cube = startSketchOn('XY') | |||||||
|   |> close(%) |   |> close(%) | ||||||
|   |> extrude(5, %) |   |> extrude(5, %) | ||||||
|  |  | ||||||
| fn cylinder(radius, tag) { | fn cylinder = (radius, tag) => { | ||||||
|   return startSketchOn('XY') |   return startSketchAt([0, 0]) | ||||||
|     |> startProfileAt([0, 0], %) |  | ||||||
|     |> circle({ |     |> circle({ | ||||||
|          radius = radius, |          radius = radius, | ||||||
|          center = segStart(tag) |          center = segStart(tag) | ||||||
|  | |||||||
| @ -4,8 +4,6 @@ excerpt: "Start a new 2-dimensional sketch at a given point on the 'XY' plane." | |||||||
| layout: manual | layout: manual | ||||||
| --- | --- | ||||||
|  |  | ||||||
| **WARNING:** This function is deprecated. |  | ||||||
|  |  | ||||||
| Start a new 2-dimensional sketch at a given point on the 'XY' plane. | Start a new 2-dimensional sketch at a given point on the 'XY' plane. | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										61911
									
								
								docs/kcl/std.json
									
									
									
									
									
								
							
							
						
						| @ -41,7 +41,7 @@ If you want to get a value from an array you can use the index like so: | |||||||
| An object is defined with `{}` braces. Here is an example object: | An object is defined with `{}` braces. Here is an example object: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| myObj = { a = 0, b = "thing" } | myObj = {a: 0, b: "thing"} | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| We support two different ways of getting properties from objects, you can call | We support two different ways of getting properties from objects, you can call | ||||||
| @ -54,7 +54,7 @@ We also have support for defining your own functions. Functions can take in any | |||||||
| type of argument. Below is an example of the syntax: | type of argument. Below is an example of the syntax: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| fn myFn(x) { | fn myFn = (x) => { | ||||||
|   return x |   return x | ||||||
| } | } | ||||||
| ``` | ``` | ||||||
| @ -90,12 +90,12 @@ startSketchOn('XZ') | |||||||
|   |> startProfileAt(origin, %) |   |> startProfileAt(origin, %) | ||||||
|   |> angledLine([0, 191.26], %, $rectangleSegmentA001) |   |> angledLine([0, 191.26], %, $rectangleSegmentA001) | ||||||
|   |> angledLine([ |   |> angledLine([ | ||||||
|        segAng(rectangleSegmentA001) - 90, |        segAng(rectangleSegmentA001, %) - 90, | ||||||
|        196.99 |        196.99 | ||||||
|      ], %, $rectangleSegmentB001) |      ], %, $rectangleSegmentB001) | ||||||
|   |> angledLine([ |   |> angledLine([ | ||||||
|        segAng(rectangleSegmentA001), |        segAng(rectangleSegmentA001, %), | ||||||
|        -segLen(rectangleSegmentA001) |        -segLen(rectangleSegmentA001, %) | ||||||
|      ], %, $rectangleSegmentC001) |      ], %, $rectangleSegmentC001) | ||||||
|   |> lineTo([profileStartX(%), profileStartY(%)], %) |   |> lineTo([profileStartX(%), profileStartY(%)], %) | ||||||
|   |> close(%) |   |> close(%) | ||||||
| @ -118,20 +118,20 @@ use the tag `rectangleSegmentA001` in any function or expression in the file. | |||||||
| However if the code was written like this: | However if the code was written like this: | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| fn rect(origin) { | fn rect = (origin) => { | ||||||
|   return startSketchOn('XZ') |   return startSketchOn('XZ') | ||||||
|     |> startProfileAt(origin, %) |   |> startProfileAt(origin, %) | ||||||
|     |> angledLine([0, 191.26], %, $rectangleSegmentA001) |   |> angledLine([0, 191.26], %, $rectangleSegmentA001) | ||||||
|     |> angledLine([ |   |> angledLine([ | ||||||
|          segAng(rectangleSegmentA001) - 90, |        segAng(rectangleSegmentA001, %) - 90, | ||||||
|          196.99 |        196.99 | ||||||
|        ], %, $rectangleSegmentB001) |      ], %, $rectangleSegmentB001) | ||||||
|     |> angledLine([ |   |> angledLine([ | ||||||
|          segAng(rectangleSegmentA001), |        segAng(rectangleSegmentA001, %), | ||||||
|          -segLen(rectangleSegmentA001) |        -segLen(rectangleSegmentA001, %) | ||||||
|        ], %, $rectangleSegmentC001) |      ], %, $rectangleSegmentC001) | ||||||
|     |> lineTo([profileStartX(%), profileStartY(%)], %) |   |> lineTo([profileStartX(%), profileStartY(%)], %) | ||||||
|     |> close(%) |   |> close(%) | ||||||
| } | } | ||||||
|  |  | ||||||
| rect([0, 0]) | rect([0, 0]) | ||||||
| @ -146,31 +146,28 @@ Tags are accessible through the sketch group they are declared in. | |||||||
| For example the following code works. | For example the following code works. | ||||||
|  |  | ||||||
| ``` | ``` | ||||||
| fn rect(origin) { | fn rect = (origin) => { | ||||||
|   return startSketchOn('XZ') |   return startSketchOn('XZ') | ||||||
|     |> startProfileAt(origin, %) |   |> startProfileAt(origin, %) | ||||||
|     |> angledLine([0, 191.26], %, $rectangleSegmentA001) |   |> angledLine([0, 191.26], %, $rectangleSegmentA001) | ||||||
|     |> angledLine([ |   |> angledLine([ | ||||||
|          segAng(rectangleSegmentA001) - 90, |        segAng(rectangleSegmentA001, %) - 90, | ||||||
|          196.99 |        196.99 | ||||||
|        ], %, $rectangleSegmentB001) |      ], %, $rectangleSegmentB001) | ||||||
|     |> angledLine([ |   |> angledLine([ | ||||||
|          segAng(rectangleSegmentA001), |        segAng(rectangleSegmentA001, %), | ||||||
|          -segLen(rectangleSegmentA001) |        -segLen(rectangleSegmentA001, %) | ||||||
|        ], %, $rectangleSegmentC001) |      ], %, $rectangleSegmentC001) | ||||||
|     |> lineTo([profileStartX(%), profileStartY(%)], %) |   |> lineTo([profileStartX(%), profileStartY(%)], %) | ||||||
|     |> close(%) |   |> close(%) | ||||||
| } | } | ||||||
|  |  | ||||||
| rect([0, 0]) | rect([0, 0]) | ||||||
| myRect = rect([20, 0]) | myRect = rect([20, 0]) | ||||||
|  |  | ||||||
| myRect | myRect  | ||||||
|   |> extrude(10, %) |   |> extrude(10, %) | ||||||
|   |> fillet({ |   |> fillet({radius: 0.5, tags: [myRect.tags.rectangleSegmentA001]}, %) | ||||||
|        radius = 0.5, |  | ||||||
|        tags = [myRect.tags.rectangleSegmentA001] |  | ||||||
|      }, %) |  | ||||||
| ``` | ``` | ||||||
|  |  | ||||||
| See how we use the tag `rectangleSegmentA001` in the `fillet` function outside | See how we use the tag `rectangleSegmentA001` in the `fillet` function outside | ||||||
|  | |||||||
| @ -13,18 +13,13 @@ Data to draw an angled line. | |||||||
|  |  | ||||||
| An angle and length with explicitly named parameters | An angle and length with explicitly named parameters | ||||||
|  |  | ||||||
| **Type:** `object` | [`PolarCoordsData`](/docs/kcl/types/PolarCoordsData) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `angle` |`number`| The angle of the line (in degrees). | No | |  | ||||||
| | `length` |`number`| The length of the line. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
|  | |||||||
| @ -1,23 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "AppearanceData" |  | ||||||
| excerpt: "Data for appearance." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| Data for appearance. |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `color` |`string`| Color of the new material, a hex string like "#ff0000". | No | |  | ||||||
| | `metalness` |`number` (**maximum:** 100.0)| Metalness of the new material, a percentage like 95.7. | No | |  | ||||||
| | `roughness` |`number` (**maximum:** 100.0)| Roughness of the new material, a percentage like 95.7. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,42 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "Axis3dOrEdgeReference" |  | ||||||
| excerpt: "A 3D axis or tagged edge." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| A 3D axis or tagged edge. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| **This schema accepts any of the following:** |  | ||||||
|  |  | ||||||
| 3D axis and origin. |  | ||||||
|  |  | ||||||
| [`AxisAndOrigin3d`](/docs/kcl/types/AxisAndOrigin3d) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| Tagged edge. |  | ||||||
|  |  | ||||||
| [`EdgeReference`](/docs/kcl/types/EdgeReference) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,10 +1,10 @@ | |||||||
| --- | --- | ||||||
| title: "AxisAndOrigin2d" | title: "AxisAndOrigin" | ||||||
| excerpt: "A 2D axis and origin." | excerpt: "Axis and origin." | ||||||
| layout: manual | layout: manual | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| A 2D axis and origin. | Axis and origin. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| @ -1,105 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "AxisAndOrigin3d" |  | ||||||
| excerpt: "A 3D axis and origin." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| A 3D axis and origin. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| **This schema accepts exactly one of the following:** |  | ||||||
|  |  | ||||||
| X-axis. |  | ||||||
|  |  | ||||||
| **enum:** `X` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| Y-axis. |  | ||||||
|  |  | ||||||
| **enum:** `Y` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| Z-axis. |  | ||||||
|  |  | ||||||
| **enum:** `Z` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| Flip the X-axis. |  | ||||||
|  |  | ||||||
| **enum:** `-X` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| Flip the Y-axis. |  | ||||||
|  |  | ||||||
| **enum:** `-Y` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| Flip the Z-axis. |  | ||||||
|  |  | ||||||
| **enum:** `-Z` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `custom` |`object`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,19 +1,19 @@ | |||||||
| --- | --- | ||||||
| title: "Axis2dOrEdgeReference" | title: "AxisOrEdgeReference" | ||||||
| excerpt: "A 2D axis or tagged edge." | excerpt: "Axis or tagged edge." | ||||||
| layout: manual | layout: manual | ||||||
| --- | --- | ||||||
| 
 | 
 | ||||||
| A 2D axis or tagged edge. | Axis or tagged edge. | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| **This schema accepts any of the following:** | **This schema accepts any of the following:** | ||||||
| 
 | 
 | ||||||
| 2D axis and origin. | Axis and origin. | ||||||
| 
 | 
 | ||||||
| [`AxisAndOrigin2d`](/docs/kcl/types/AxisAndOrigin2d) | [`AxisAndOrigin`](/docs/kcl/types/AxisAndOrigin) | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
							
								
								
									
										161
									
								
								docs/kcl/types/BinaryOperator.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,161 @@ | |||||||
|  | --- | ||||||
|  | title: "BinaryOperator" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  | Add two numbers. | ||||||
|  |  | ||||||
|  | **enum:** `+` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Subtract two numbers. | ||||||
|  |  | ||||||
|  | **enum:** `-` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Multiply two numbers. | ||||||
|  |  | ||||||
|  | **enum:** `*` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Divide two numbers. | ||||||
|  |  | ||||||
|  | **enum:** `/` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Modulo two numbers. | ||||||
|  |  | ||||||
|  | **enum:** `%` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Raise a number to a power. | ||||||
|  |  | ||||||
|  | **enum:** `^` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Are two numbers equal? | ||||||
|  |  | ||||||
|  | **enum:** `==` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Are two numbers not equal? | ||||||
|  |  | ||||||
|  | **enum:** `!=` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Is left greater than right | ||||||
|  |  | ||||||
|  | **enum:** `>` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Is left greater than or equal to right | ||||||
|  |  | ||||||
|  | **enum:** `>=` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Is left less than right | ||||||
|  |  | ||||||
|  | **enum:** `<` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Is left less than or equal to right | ||||||
|  |  | ||||||
|  | **enum:** `<=` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										161
									
								
								docs/kcl/types/BinaryPart.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,161 @@ | |||||||
|  | --- | ||||||
|  | title: "BinaryPart" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `Literal`|  | No | | ||||||
|  | | `value` |[`LiteralValue`](/docs/kcl/types/LiteralValue)|  | No | | ||||||
|  | | `raw` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)|  | No | | ||||||
|  | | `name` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `BinaryExpression`|  | No | | ||||||
|  | | `operator` |[`BinaryOperator`](/docs/kcl/types/BinaryOperator)|  | No | | ||||||
|  | | `left` |[`BinaryPart`](/docs/kcl/types/BinaryPart)|  | No | | ||||||
|  | | `right` |[`BinaryPart`](/docs/kcl/types/BinaryPart)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `CallExpression`|  | No | | ||||||
|  | | `callee` |[`Identifier`](/docs/kcl/types/Identifier)|  | No | | ||||||
|  | | `arguments` |`[` [`Expr`](/docs/kcl/types/Expr) `]`|  | No | | ||||||
|  | | `optional` |`boolean`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `UnaryExpression`|  | No | | ||||||
|  | | `operator` |[`UnaryOperator`](/docs/kcl/types/UnaryOperator)|  | No | | ||||||
|  | | `argument` |[`BinaryPart`](/docs/kcl/types/BinaryPart)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `MemberExpression`|  | No | | ||||||
|  | | `object` |[`MemberObject`](/docs/kcl/types/MemberObject)|  | No | | ||||||
|  | | `property` |[`LiteralIdentifier`](/docs/kcl/types/LiteralIdentifier)|  | No | | ||||||
|  | | `computed` |`boolean`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `IfExpression`|  | No | | ||||||
|  | | `cond` |[`Expr`](/docs/kcl/types/Expr)|  | No | | ||||||
|  | | `then_val` |[`Program`](/docs/kcl/types/Program)|  | No | | ||||||
|  | | `else_ifs` |`[` [`ElseIf`](/docs/kcl/types/ElseIf) `]`|  | No | | ||||||
|  | | `final_else` |[`Program`](/docs/kcl/types/Program)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										97
									
								
								docs/kcl/types/BodyItem.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,97 @@ | |||||||
|  | --- | ||||||
|  | title: "BodyItem" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `ImportStatement`|  | No | | ||||||
|  | | `items` |`[` [`ImportItem`](/docs/kcl/types/ImportItem) `]`|  | No | | ||||||
|  | | `path` |`string`|  | No | | ||||||
|  | | `raw_path` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `ExpressionStatement`|  | No | | ||||||
|  | | `expression` |[`Expr`](/docs/kcl/types/Expr)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `VariableDeclaration`|  | No | | ||||||
|  | | `declarations` |`[` [`VariableDeclarator`](/docs/kcl/types/VariableDeclarator) `]`|  | No | | ||||||
|  | | `visibility` |[`ItemVisibility`](/docs/kcl/types/ItemVisibility)|  | No | | ||||||
|  | | `kind` |[`VariableKind`](/docs/kcl/types/VariableKind)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `ReturnStatement`|  | No | | ||||||
|  | | `argument` |[`Expr`](/docs/kcl/types/Expr)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,23 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "CircleThreePointData" |  | ||||||
| excerpt: "Data for drawing a 3-point circle" |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| Data for drawing a 3-point circle |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `p1` |`[number, number]`| Point one for circle derivation. | No | |  | ||||||
| | `p2` |`[number, number]`| Point two for circle derivation. | No | |  | ||||||
| | `p3` |`[number, number]`| Point three for circle derivation. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								docs/kcl/types/CommentStyle.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,41 @@ | |||||||
|  | --- | ||||||
|  | title: "CommentStyle" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  | Like // foo | ||||||
|  |  | ||||||
|  | **enum:** `line` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Like /* foo */ | ||||||
|  |  | ||||||
|  | **enum:** `block` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								docs/kcl/types/ElseIf.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | |||||||
|  | --- | ||||||
|  | title: "ElseIf" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `cond` |[`Expr`](/docs/kcl/types/Expr)|  | No | | ||||||
|  | | `then_val` |[`Program`](/docs/kcl/types/Program)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								docs/kcl/types/EnvironmentRef.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,16 @@ | |||||||
|  | --- | ||||||
|  | title: "EnvironmentRef" | ||||||
|  | excerpt: "An index pointing to an environment." | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | An index pointing to an environment. | ||||||
|  |  | ||||||
|  | **Type:** `integer` (`uint`) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										318
									
								
								docs/kcl/types/Expr.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,318 @@ | |||||||
|  | --- | ||||||
|  | title: "Expr" | ||||||
|  | excerpt: "An expression can be evaluated to yield a single KCL value." | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | An expression can be evaluated to yield a single KCL value. | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `Literal`|  | No | | ||||||
|  | | `value` |[`LiteralValue`](/docs/kcl/types/LiteralValue)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `raw` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)|  | No | | ||||||
|  | | `name` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: [`TagDeclarator`](/docs/kcl/types#tag-declaration)|  | No | | ||||||
|  | | `value` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `BinaryExpression`|  | No | | ||||||
|  | | `operator` |[`BinaryOperator`](/docs/kcl/types/BinaryOperator)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `left` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `right` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: [`FunctionExpression`](/docs/kcl/types/FunctionExpression)|  | No | | ||||||
|  | | `params` |`[` [`Parameter`](/docs/kcl/types/Parameter) `]`|  | No | | ||||||
|  | | `body` |[`Program`](/docs/kcl/types/Program)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `CallExpression`|  | No | | ||||||
|  | | `callee` |[`Identifier`](/docs/kcl/types/Identifier)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `arguments` |`[` [`Expr`](/docs/kcl/types/Expr) `]`|  | No | | ||||||
|  | | `optional` |`boolean`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `PipeExpression`|  | No | | ||||||
|  | | `body` |`[` [`Expr`](/docs/kcl/types/Expr) `]`|  | No | | ||||||
|  | | `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `PipeSubstitution`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `ArrayExpression`|  | No | | ||||||
|  | | `elements` |`[` [`Expr`](/docs/kcl/types/Expr) `]`|  | No | | ||||||
|  | | `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `ArrayRangeExpression`|  | No | | ||||||
|  | | `startElement` |[`Expr`](/docs/kcl/types/Expr)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `endElement` |[`Expr`](/docs/kcl/types/Expr)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `endInclusive` |`boolean`| Is the `end_element` included in the range? | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `ObjectExpression`|  | No | | ||||||
|  | | `properties` |`[` [`ObjectProperty`](/docs/kcl/types/ObjectProperty) `]`|  | No | | ||||||
|  | | `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `MemberExpression`|  | No | | ||||||
|  | | `object` |[`MemberObject`](/docs/kcl/types/MemberObject)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `property` |[`LiteralIdentifier`](/docs/kcl/types/LiteralIdentifier)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `computed` |`boolean`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `UnaryExpression`|  | No | | ||||||
|  | | `operator` |[`UnaryOperator`](/docs/kcl/types/UnaryOperator)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `argument` |[`BinaryPart`](/docs/kcl/types/BinaryPart)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `IfExpression`|  | No | | ||||||
|  | | `cond` |[`Expr`](/docs/kcl/types/Expr)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `then_val` |[`Program`](/docs/kcl/types/Program)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `else_ifs` |`[` [`ElseIf`](/docs/kcl/types/ElseIf) `]`|  | No | | ||||||
|  | | `final_else` |[`Program`](/docs/kcl/types/Program)| An expression can be evaluated to yield a single KCL value. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | KCL value for an optional parameter which was not given an argument. (remember, parameters are in the function declaration, arguments are in the function call/application). | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `None`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,28 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "Face" |  | ||||||
| excerpt: "A face." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| A face. |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `id` |`string`| The id of the face. | No | |  | ||||||
| | `value` |`string`| The tag of the face. | No | |  | ||||||
| | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s X axis be? | No | |  | ||||||
| | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s Y axis be? | No | |  | ||||||
| | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | |  | ||||||
| | `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | |  | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A face. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								docs/kcl/types/FunctionExpression.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | |||||||
|  | --- | ||||||
|  | title: "FunctionExpression" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `params` |`[` [`Parameter`](/docs/kcl/types/Parameter) `]`|  | No | | ||||||
|  | | `body` |[`Program`](/docs/kcl/types/Program)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,26 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "Helix" |  | ||||||
| excerpt: "A helix." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| A helix. |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `value` |`string`| The id of the helix. | No | |  | ||||||
| | `revolutions` |`number`| Number of revolutions. | No | |  | ||||||
| | `angleStart` |`number`| Start angle (in degrees). | No | |  | ||||||
| | `ccw` |`boolean`| Is the helix rotation counter clockwise? | No | |  | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A helix. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,10 +1,10 @@ | |||||||
| --- | --- | ||||||
| title: "HelixData" | title: "HelixData" | ||||||
| excerpt: "Data for a helix." | excerpt: "Data for helices." | ||||||
| layout: manual | layout: manual | ||||||
| --- | --- | ||||||
|  |  | ||||||
| Data for a helix. | Data for helices. | ||||||
|  |  | ||||||
| **Type:** `object` | **Type:** `object` | ||||||
|  |  | ||||||
| @ -19,8 +19,6 @@ Data for a helix. | |||||||
| | `revolutions` |`number`| Number of revolutions. | No | | | `revolutions` |`number`| Number of revolutions. | No | | ||||||
| | `angleStart` |`number`| Start angle (in degrees). | No | | | `angleStart` |`number`| Start angle (in degrees). | No | | ||||||
| | `ccw` |`boolean`| Is the helix rotation counter clockwise? The default is `false`. | No | | | `ccw` |`boolean`| Is the helix rotation counter clockwise? The default is `false`. | No | | ||||||
| | `length` |`number`| Length of the helix. This is not necessary if the helix is created around an edge. If not given the length of the edge is used. | No | | | `length` |`number`| Length of the helix. If this argument is not provided, the height of the solid is used. | No | | ||||||
| | `radius` |`number`| Radius of the helix. | No | |  | ||||||
| | `axis` |[`Axis3dOrEdgeReference`](/docs/kcl/types/Axis3dOrEdgeReference)| Axis to use as mirror. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,24 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "HelixRevolutionsData" |  | ||||||
| excerpt: "Data for helix revolutions." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| Data for helix revolutions. |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `revolutions` |`number`| Number of revolutions. | No | |  | ||||||
| | `angleStart` |`number`| Start angle (in degrees). | No | |  | ||||||
| | `ccw` |`boolean`| Is the helix rotation counter clockwise? The default is `false`. | No | |  | ||||||
| | `length` |`number`| Length of the helix. If this argument is not provided, the height of the solid is used. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,26 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "HelixValue" |  | ||||||
| excerpt: "A helix." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| A helix. |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `value` |`string`| The id of the helix. | No | |  | ||||||
| | `revolutions` |`number`| Number of revolutions. | No | |  | ||||||
| | `angleStart` |`number`| Start angle (in degrees). | No | |  | ||||||
| | `ccw` |`boolean`| Is the helix rotation counter clockwise? | No | |  | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A helix. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								docs/kcl/types/Identifier.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,23 @@ | |||||||
|  | --- | ||||||
|  | title: "Identifier" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `name` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								docs/kcl/types/ImportItem.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | |||||||
|  | --- | ||||||
|  | title: "ImportItem" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `name` |[`Identifier`](/docs/kcl/types/Identifier)| Name of the item to import. | No | | ||||||
|  | | `alias` |[`Identifier`](/docs/kcl/types/Identifier)| Rename the item using an identifier after "as". | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										16
									
								
								docs/kcl/types/ItemVisibility.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,16 @@ | |||||||
|  | --- | ||||||
|  | title: "ItemVisibility" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **enum:** `default`, `export` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -12,10 +12,5 @@ KCL value for an optional parameter which was not given an argument. (remember, | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -168,6 +168,7 @@ Any KCL value. | |||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
|  | A plane. | ||||||
|  |  | ||||||
| **Type:** `object` | **Type:** `object` | ||||||
|  |  | ||||||
| @ -180,10 +181,17 @@ Any KCL value. | |||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `type` |enum: [`Plane`](/docs/kcl/types/Plane)|  | No | | | `type` |enum: [`Plane`](/docs/kcl/types/Plane)|  | No | | ||||||
| | `value` |[`Plane`](/docs/kcl/types/Plane)| Any KCL value. | No | | | `id` |`string`| The id of the plane. | No | | ||||||
|  | | `value` |[`PlaneType`](/docs/kcl/types/PlaneType)| Any KCL value. | No | | ||||||
|  | | `origin` |[`Point3d`](/docs/kcl/types/Point3d)| Origin of the plane. | No | | ||||||
|  | | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | | ||||||
|  | | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | | ||||||
|  | | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | ||||||
|  | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
|  | A face. | ||||||
|  |  | ||||||
| **Type:** `object` | **Type:** `object` | ||||||
|  |  | ||||||
| @ -195,8 +203,14 @@ Any KCL value. | |||||||
|  |  | ||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `type` |enum: [`Face`](/docs/kcl/types/Face)|  | No | | | `type` |enum: `Face`|  | No | | ||||||
| | `value` |[`Face`](/docs/kcl/types/Face)| Any KCL value. | No | | | `id` |`string`| The id of the face. | No | | ||||||
|  | | `value` |`string`| The tag of the face. | No | | ||||||
|  | | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s X axis be? | No | | ||||||
|  | | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s Y axis be? | No | | ||||||
|  | | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | ||||||
|  | | `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | | ||||||
|  | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
| @ -232,6 +246,7 @@ Any KCL value. | |||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
|  | An solid is a collection of extrude surfaces. | ||||||
|  |  | ||||||
| **Type:** `object` | **Type:** `object` | ||||||
|  |  | ||||||
| @ -244,7 +259,14 @@ Any KCL value. | |||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `type` |enum: [`Solid`](/docs/kcl/types/Solid)|  | No | | | `type` |enum: [`Solid`](/docs/kcl/types/Solid)|  | No | | ||||||
| | `value` |[`Solid`](/docs/kcl/types/Solid)| Any KCL value. | No | | | `id` |`string`| The id of the solid. | No | | ||||||
|  | | `value` |`[` [`ExtrudeSurface`](/docs/kcl/types/ExtrudeSurface) `]`| The extrude surfaces. | No | | ||||||
|  | | `sketch` |[`Sketch`](/docs/kcl/types/Sketch)| The sketch. | No | | ||||||
|  | | `height` |`number`| The height of the solid. | No | | ||||||
|  | | `startCapId` |`string`| The id of the extrusion start cap | No | | ||||||
|  | | `endCapId` |`string`| The id of the extrusion end cap | No | | ||||||
|  | | `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | | ||||||
|  | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
| @ -263,22 +285,6 @@ Any KCL value. | |||||||
| | `value` |`[` [`Solid`](/docs/kcl/types/Solid) `]`|  | No | | | `value` |`[` [`Solid`](/docs/kcl/types/Solid) `]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: [`Helix`](/docs/kcl/types/Helix)|  | No | |  | ||||||
| | `value` |[`Helix`](/docs/kcl/types/Helix)| Any KCL value. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- | ---- | ||||||
| Data for an imported geometry. | Data for an imported geometry. | ||||||
|  |  | ||||||
| @ -311,6 +317,7 @@ Data for an imported geometry. | |||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `type` |enum: `Function`|  | No | | | `type` |enum: `Function`|  | No | | ||||||
|  | | `expression` |[`FunctionExpression`](/docs/kcl/types/FunctionExpression)| Any KCL value. | No | | ||||||
| | `memory` |[`ProgramMemory`](/docs/kcl/types/ProgramMemory)| Any KCL value. | No | | | `memory` |[`ProgramMemory`](/docs/kcl/types/ProgramMemory)| Any KCL value. | No | | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | ||||||
|  |  | ||||||
| @ -323,23 +330,6 @@ Data for an imported geometry. | |||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `Module`|  | No | |  | ||||||
| | `value` |[`ModuleId`](/docs/kcl/types/ModuleId)| Any KCL value. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties | ## Properties | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
|  | |||||||
							
								
								
									
										56
									
								
								docs/kcl/types/LiteralIdentifier.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,56 @@ | |||||||
|  | --- | ||||||
|  | title: "LiteralIdentifier" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)|  | No | | ||||||
|  | | `name` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `Literal`|  | No | | ||||||
|  | | `value` |[`LiteralValue`](/docs/kcl/types/LiteralValue)|  | No | | ||||||
|  | | `raw` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										47
									
								
								docs/kcl/types/LiteralValue.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,47 @@ | |||||||
|  | --- | ||||||
|  | title: "LiteralValue" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts any of the following:** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `number` (`double`) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `string` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `boolean` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										57
									
								
								docs/kcl/types/MemberObject.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,57 @@ | |||||||
|  | --- | ||||||
|  | title: "MemberObject" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `MemberExpression`|  | No | | ||||||
|  | | `object` |[`MemberObject`](/docs/kcl/types/MemberObject)|  | No | | ||||||
|  | | `property` |[`LiteralIdentifier`](/docs/kcl/types/LiteralIdentifier)|  | No | | ||||||
|  | | `computed` |`boolean`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: [`Identifier`](/docs/kcl/types/Identifier)|  | No | | ||||||
|  | | `name` |`string`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -16,6 +16,6 @@ Data for a mirror. | |||||||
|  |  | ||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `axis` |[`Axis2dOrEdgeReference`](/docs/kcl/types/Axis2dOrEdgeReference)| Axis to use as mirror. | No | | | `axis` |[`AxisOrEdgeReference`](/docs/kcl/types/AxisOrEdgeReference)| Axis to use as mirror. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,16 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "ModuleId" |  | ||||||
| excerpt: "Identifier of a source file.  Uses a u32 to keep the size small." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| Identifier of a source file.  Uses a u32 to keep the size small. |  | ||||||
|  |  | ||||||
| **Type:** `integer` (`uint32`) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										22
									
								
								docs/kcl/types/NonCodeMeta.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,22 @@ | |||||||
|  | --- | ||||||
|  | title: "NonCodeMeta" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `nonCodeNodes` |`object`|  | No | | ||||||
|  | | `startNodes` |`[` [`NonCodeNode`](/docs/kcl/types/NonCodeNode) `]`|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								docs/kcl/types/NonCodeNode.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,23 @@ | |||||||
|  | --- | ||||||
|  | title: "NonCodeNode" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `value` |[`NonCodeValue`](/docs/kcl/types/NonCodeValue)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										86
									
								
								docs/kcl/types/NonCodeValue.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,86 @@ | |||||||
|  | --- | ||||||
|  | title: "NonCodeValue" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  | An inline comment. Here are examples: `1 + 1 // This is an inline comment`. `1 + 1 /* Here's another */`. | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `inlineComment`|  | No | | ||||||
|  | | `value` |`string`|  | No | | ||||||
|  | | `style` |[`CommentStyle`](/docs/kcl/types/CommentStyle)|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | A block comment. An example of this is the following: ```python,no_run /* This is a block comment */ 1 + 1 ``` Now this is important. The block comment is attached to the next line. This is always the case. Also the block comment doesn't have a new line above it. If it did it would be a `NewLineBlockComment`. | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `blockComment`|  | No | | ||||||
|  | | `value` |`string`|  | No | | ||||||
|  | | `style` |[`CommentStyle`](/docs/kcl/types/CommentStyle)|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | A block comment that has a new line above it. The user explicitly added a new line above the block comment. | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `newLineBlockComment`|  | No | | ||||||
|  | | `value` |`string`|  | No | | ||||||
|  | | `style` |[`CommentStyle`](/docs/kcl/types/CommentStyle)|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `type` |enum: `newLine`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								docs/kcl/types/ObjectProperty.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | |||||||
|  | --- | ||||||
|  | title: "ObjectProperty" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `key` |[`Identifier`](/docs/kcl/types/Identifier)|  | No | | ||||||
|  | | `value` |[`Expr`](/docs/kcl/types/Expr)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										23
									
								
								docs/kcl/types/Parameter.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,23 @@ | |||||||
|  | --- | ||||||
|  | title: "Parameter" | ||||||
|  | excerpt: "Parameter of a KCL function." | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | Parameter of a KCL function. | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `identifier` |[`Identifier`](/docs/kcl/types/Identifier)| The parameter's label or name. | No | | ||||||
|  | | `optional` |`boolean`| Is the parameter optional? | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -22,7 +22,6 @@ A plane. | |||||||
| | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | | | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | | ||||||
| | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | | | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | | ||||||
| | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A plane. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										26
									
								
								docs/kcl/types/Program.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,26 @@ | |||||||
|  | --- | ||||||
|  | title: "Program" | ||||||
|  | excerpt: "A KCL program top level, or function body." | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | A KCL program top level, or function body. | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `body` |`[` [`BodyItem`](/docs/kcl/types/BodyItem) `]`|  | No | | ||||||
|  | | `nonCodeMeta` |[`NonCodeMeta`](/docs/kcl/types/NonCodeMeta)| A KCL program top level, or function body. | No | | ||||||
|  | | `shebang` |[`Shebang`](/docs/kcl/types/Shebang)|  | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -17,7 +17,7 @@ Data for revolution surfaces. | |||||||
| | Property | Type | Description | Required | | | Property | Type | Description | Required | | ||||||
| |----------|------|-------------|----------| | |----------|------|-------------|----------| | ||||||
| | `angle` |`number` (**maximum:** 360.0) (**minimum:** -360.0)| Angle to revolve (in degrees). Default is 360. | No | | | `angle` |`number` (**maximum:** 360.0) (**minimum:** -360.0)| Angle to revolve (in degrees). Default is 360. | No | | ||||||
| | `axis` |[`Axis2dOrEdgeReference`](/docs/kcl/types/Axis2dOrEdgeReference)| Axis of revolution. | No | | | `axis` |[`AxisOrEdgeReference`](/docs/kcl/types/AxisOrEdgeReference)| Axis of revolution. | No | | ||||||
| | `tolerance` |`number`| Tolerance for the revolve operation. | No | | | `tolerance` |`number`| Tolerance for the revolve operation. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
							
								
								
									
										23
									
								
								docs/kcl/types/Shebang.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,23 @@ | |||||||
|  | --- | ||||||
|  | title: "Shebang" | ||||||
|  | excerpt: "A shebang. This is a special type of comment that is at the top of the file. It looks like this: ```python,no_run #!/usr/bin/env python ```" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  | A shebang. This is a special type of comment that is at the top of the file. It looks like this: ```python,no_run #!/usr/bin/env python ``` | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `content` |`string`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -21,7 +21,6 @@ A sketch is a collection of paths. | |||||||
| | `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | | | `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | | ||||||
| | `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | | | `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | | ||||||
| | `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | | | `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A sketch is a collection of paths. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -30,7 +30,6 @@ A sketch is a collection of paths. | |||||||
| | `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | | | `on` |[`SketchSurface`](/docs/kcl/types/SketchSurface)| What the sketch is on (can be a plane or a face). | No | | ||||||
| | `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | | | `start` |[`BasePath`](/docs/kcl/types/BasePath)| The starting path. | No | | ||||||
| | `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | | | `tags` |`object`| Tag identifiers that have been declared in this sketch. | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A sketch or a group of sketches. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -31,7 +31,6 @@ A plane. | |||||||
| | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | | | `xAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s X axis be? | No | | ||||||
| | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | | | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the plane’s Y axis be? | No | | ||||||
| | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A sketch type. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -55,7 +54,6 @@ A face. | |||||||
| | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s Y axis be? | No | | | `yAxis` |[`Point3d`](/docs/kcl/types/Point3d)| What should the face’s Y axis be? | No | | ||||||
| | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | | `zAxis` |[`Point3d`](/docs/kcl/types/Point3d)| The z-axis (normal). | No | | ||||||
| | `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | | | `solid` |[`Solid`](/docs/kcl/types/Solid)| The solid the face is on. | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A sketch type. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -23,7 +23,6 @@ An solid is a collection of extrude surfaces. | |||||||
| | `startCapId` |`string`| The id of the extrusion start cap | No | | | `startCapId` |`string`| The id of the extrusion start cap | No | | ||||||
| | `endCapId` |`string`| The id of the extrusion end cap | No | | | `endCapId` |`string`| The id of the extrusion end cap | No | | ||||||
| | `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | | | `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| An solid is a collection of extrude surfaces. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -32,7 +32,6 @@ An solid is a collection of extrude surfaces. | |||||||
| | `startCapId` |`string`| The id of the extrusion start cap | No | | | `startCapId` |`string`| The id of the extrusion start cap | No | | ||||||
| | `endCapId` |`string`| The id of the extrusion end cap | No | | | `endCapId` |`string`| The id of the extrusion end cap | No | | ||||||
| | `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | | | `edgeCuts` |`[` [`EdgeCut`](/docs/kcl/types/EdgeCut) `]`| Chamfers or fillets on this solid. | No | | ||||||
| | `units` |[`UnitLen`](/docs/kcl/types/UnitLen)| A solid or a group of solids. | No | |  | ||||||
| | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | | `__meta` |`[` [`Metadata`](/docs/kcl/types/Metadata) `]`| Metadata. | No | | ||||||
|  |  | ||||||
|  |  | ||||||
|  | |||||||
| @ -1,23 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "SweepData" |  | ||||||
| excerpt: "Data for a sweep." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| Data for a sweep. |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `path` |[`SweepPath`](/docs/kcl/types/SweepPath)| The path to sweep along. | No | |  | ||||||
| | `sectional` |`boolean`| If true, the sweep will be broken up into sub-sweeps (extrusions, revolves, sweeps) based on the trajectory path components. | No | |  | ||||||
| | `tolerance` |`number`| Tolerance for the sweep operation. | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,42 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "SweepPath" |  | ||||||
| excerpt: "A path to sweep along." |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
| A path to sweep along. |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| **This schema accepts any of the following:** |  | ||||||
|  |  | ||||||
| A path to sweep along. |  | ||||||
|  |  | ||||||
| [`Sketch`](/docs/kcl/types/Sketch) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
| A path to sweep along. |  | ||||||
|  |  | ||||||
| [`Helix`](/docs/kcl/types/Helix) |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										15
									
								
								docs/kcl/types/Uint.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,15 @@ | |||||||
|  | --- | ||||||
|  | title: "Uint" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `integer` (`uint32`) | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								docs/kcl/types/UnaryOperator.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,41 @@ | |||||||
|  | --- | ||||||
|  | title: "UnaryOperator" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  | Negate a number. | ||||||
|  |  | ||||||
|  | **enum:** `-` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Negate a boolean. | ||||||
|  |  | ||||||
|  | **enum:** `!` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,107 +0,0 @@ | |||||||
| --- |  | ||||||
| title: "UnitLen" |  | ||||||
| excerpt: "" |  | ||||||
| layout: manual |  | ||||||
| --- |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| **This schema accepts exactly one of the following:** |  | ||||||
|  |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `Mm`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `Cm`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `M`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `Inches`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `Feet`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
| **Type:** `object` |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ## Properties |  | ||||||
|  |  | ||||||
| | Property | Type | Description | Required | |  | ||||||
| |----------|------|-------------|----------| |  | ||||||
| | `type` |enum: `Yards`|  | No | |  | ||||||
|  |  | ||||||
|  |  | ||||||
| ---- |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										24
									
								
								docs/kcl/types/VariableDeclarator.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,24 @@ | |||||||
|  | --- | ||||||
|  | title: "VariableDeclarator" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **Type:** `object` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ## Properties | ||||||
|  |  | ||||||
|  | | Property | Type | Description | Required | | ||||||
|  | |----------|------|-------------|----------| | ||||||
|  | | `id` |[`Identifier`](/docs/kcl/types/Identifier)| The identifier of the variable. | No | | ||||||
|  | | `init` |[`Expr`](/docs/kcl/types/Expr)| The value of the variable. | No | | ||||||
|  | | `digest` |`[, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`, `integer`]`|  | No | | ||||||
|  | | `start` |`integer`|  | No | | ||||||
|  | | `end` |`integer`|  | No | | ||||||
|  |  | ||||||
|  |  | ||||||
							
								
								
									
										41
									
								
								docs/kcl/types/VariableKind.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						| @ -0,0 +1,41 @@ | |||||||
|  | --- | ||||||
|  | title: "VariableKind" | ||||||
|  | excerpt: "" | ||||||
|  | layout: manual | ||||||
|  | --- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | **This schema accepts exactly one of the following:** | ||||||
|  |  | ||||||
|  | Declare a named constant. | ||||||
|  |  | ||||||
|  | **enum:** `const` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  | Declare a function. | ||||||
|  |  | ||||||
|  | **enum:** `fn` | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  | ---- | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
|  |  | ||||||
| @ -1,11 +1,22 @@ | |||||||
| import { test, expect } from './zoo-test' | import { test, expect } from '@playwright/test' | ||||||
|  |  | ||||||
|  | import { setupElectron, tearDown } from './test-utils' | ||||||
|  |  | ||||||
|  | test.afterEach(async ({ page }, testInfo) => { | ||||||
|  |   await tearDown(page, testInfo) | ||||||
|  | }) | ||||||
|  |  | ||||||
| test.describe('Electron app header tests', () => { | test.describe('Electron app header tests', () => { | ||||||
|   test( |   test( | ||||||
|     'Open Command Palette button has correct shortcut', |     'Open Command Palette button has correct shortcut', | ||||||
|     { tag: '@electron' }, |     { tag: '@electron' }, | ||||||
|     async ({ page }, testInfo) => { |     async ({ browserName }, testInfo) => { | ||||||
|       await page.setBodyDimensions({ width: 1200, height: 500 }) |       const { electronApp, page } = await setupElectron({ | ||||||
|  |         testInfo, | ||||||
|  |         folderSetupFn: async () => {}, | ||||||
|  |       }) | ||||||
|  |  | ||||||
|  |       await page.setViewportSize({ width: 1200, height: 500 }) | ||||||
|  |  | ||||||
|       // No space before the shortcut since it checks textContent. |       // No space before the shortcut since it checks textContent. | ||||||
|       let text |       let text | ||||||
| @ -23,14 +34,21 @@ test.describe('Electron app header tests', () => { | |||||||
|       const commandsButton = page.getByRole('button', { name: 'Commands' }) |       const commandsButton = page.getByRole('button', { name: 'Commands' }) | ||||||
|       await expect(commandsButton).toBeVisible() |       await expect(commandsButton).toBeVisible() | ||||||
|       await expect(commandsButton).toHaveText(text) |       await expect(commandsButton).toHaveText(text) | ||||||
|  |  | ||||||
|  |       await electronApp.close() | ||||||
|     } |     } | ||||||
|   ) |   ) | ||||||
|  |  | ||||||
|   test( |   test( | ||||||
|     'User settings has correct shortcut', |     'User settings has correct shortcut', | ||||||
|     { tag: '@electron' }, |     { tag: '@electron' }, | ||||||
|     async ({ page }, testInfo) => { |     async ({ browserName }, testInfo) => { | ||||||
|       await page.setBodyDimensions({ width: 1200, height: 500 }) |       const { electronApp, page } = await setupElectron({ | ||||||
|  |         testInfo, | ||||||
|  |         folderSetupFn: async () => {}, | ||||||
|  |       }) | ||||||
|  |  | ||||||
|  |       await page.setViewportSize({ width: 1200, height: 500 }) | ||||||
|  |  | ||||||
|       // Open the user sidebar menu. |       // Open the user sidebar menu. | ||||||
|       await page.getByTestId('user-sidebar-toggle').click() |       await page.getByTestId('user-sidebar-toggle').click() | ||||||
| @ -41,6 +59,8 @@ test.describe('Electron app header tests', () => { | |||||||
|       const userSettingsButton = page.getByTestId('user-settings') |       const userSettingsButton = page.getByTestId('user-settings') | ||||||
|       await expect(userSettingsButton).toBeVisible() |       await expect(userSettingsButton).toBeVisible() | ||||||
|       await expect(userSettingsButton).toHaveText(text) |       await expect(userSettingsButton).toHaveText(text) | ||||||
|  |  | ||||||
|  |       await electronApp.close() | ||||||
|     } |     } | ||||||
|   ) |   ) | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -1,26 +1,29 @@ | |||||||
| import { test, expect, Page } from './zoo-test' | import { test, expect, Page } from '@playwright/test' | ||||||
| import { | import { | ||||||
|   getUtils, |   getUtils, | ||||||
|   TEST_COLORS, |   TEST_COLORS, | ||||||
|  |   setup, | ||||||
|  |   tearDown, | ||||||
|   commonPoints, |   commonPoints, | ||||||
|   PERSIST_MODELING_CONTEXT, |   PERSIST_MODELING_CONTEXT, | ||||||
| } from './test-utils' | } from './test-utils' | ||||||
| import { HomePageFixture } from './fixtures/homePageFixture' |  | ||||||
|  | test.beforeEach(async ({ context, page }, testInfo) => { | ||||||
|  |   await setup(context, page, testInfo) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | test.afterEach(async ({ page }, testInfo) => { | ||||||
|  |   await tearDown(page, testInfo) | ||||||
|  | }) | ||||||
|  |  | ||||||
| test.setTimeout(120000) | test.setTimeout(120000) | ||||||
|  |  | ||||||
| async function doBasicSketch( | async function doBasicSketch(page: Page, openPanes: string[]) { | ||||||
|   page: Page, |  | ||||||
|   homePage: HomePageFixture, |  | ||||||
|   openPanes: string[] |  | ||||||
| ) { |  | ||||||
|   const u = await getUtils(page) |   const u = await getUtils(page) | ||||||
|   await page.setBodyDimensions({ width: 1200, height: 500 }) |   await page.setViewportSize({ width: 1200, height: 500 }) | ||||||
|   const PUR = 400 / 37.5 //pixeltoUnitRatio |   const PUR = 400 / 37.5 //pixeltoUnitRatio | ||||||
|  |  | ||||||
|   await homePage.goToModelingScene() |   await u.waitForAuthSkipAppStart() | ||||||
|   await u.waitForPageLoad() |  | ||||||
|   await page.waitForTimeout(1000) |  | ||||||
|   await u.openDebugPanel() |   await u.openDebugPanel() | ||||||
|  |  | ||||||
|   // If we have the code pane open, we should see the code. |   // If we have the code pane open, we should see the code. | ||||||
| @ -145,11 +148,13 @@ async function doBasicSketch( | |||||||
| } | } | ||||||
|  |  | ||||||
| test.describe('Basic sketch', () => { | test.describe('Basic sketch', () => { | ||||||
|   test.fixme('code pane open at start', async ({ page, homePage }) => { |   test('code pane open at start', { tag: ['@skipWin'] }, async ({ page }) => { | ||||||
|     await doBasicSketch(page, homePage, ['code']) |     // Skip on windows it is being weird. | ||||||
|  |     test.skip(process.platform === 'win32', 'Skip on windows') | ||||||
|  |     await doBasicSketch(page, ['code']) | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   test('code pane closed at start', async ({ page, homePage }) => { |   test('code pane closed at start', async ({ page }) => { | ||||||
|     // Load the app with the code panes |     // Load the app with the code panes | ||||||
|     await page.addInitScript(async (persistModelingContext) => { |     await page.addInitScript(async (persistModelingContext) => { | ||||||
|       localStorage.setItem( |       localStorage.setItem( | ||||||
| @ -157,6 +162,6 @@ test.describe('Basic sketch', () => { | |||||||
|         JSON.stringify({ openPanes: [] }) |         JSON.stringify({ openPanes: [] }) | ||||||
|       ) |       ) | ||||||
|     }, PERSIST_MODELING_CONTEXT) |     }, PERSIST_MODELING_CONTEXT) | ||||||
|     await doBasicSketch(page, homePage, []) |     await doBasicSketch(page, []) | ||||||
|   }) |   }) | ||||||
| }) | }) | ||||||
|  | |||||||
| @ -1,21 +1,27 @@ | |||||||
| import { test, expect, Page } from './zoo-test' | import { test, expect } from '@playwright/test' | ||||||
| import { HomePageFixture } from './fixtures/homePageFixture' | import { getUtils, setup, tearDown } from './test-utils' | ||||||
| import { getUtils } from './test-utils' |  | ||||||
| import { EngineCommand } from 'lang/std/artifactGraph' | import { EngineCommand } from 'lang/std/artifactGraph' | ||||||
| import { uuidv4 } from 'lib/utils' | import { uuidv4 } from 'lib/utils' | ||||||
|  |  | ||||||
|  | test.beforeEach(async ({ context, page }, testInfo) => { | ||||||
|  |   await setup(context, page, testInfo) | ||||||
|  | }) | ||||||
|  |  | ||||||
|  | test.afterEach(async ({ page }, testInfo) => { | ||||||
|  |   await tearDown(page, testInfo) | ||||||
|  | }) | ||||||
|  |  | ||||||
| test.describe('Can create sketches on all planes and their back sides', () => { | test.describe('Can create sketches on all planes and their back sides', () => { | ||||||
|   const sketchOnPlaneAndBackSideTest = async ( |   const sketchOnPlaneAndBackSideTest = async ( | ||||||
|     page: Page, |     page: any, | ||||||
|     homePage: HomePageFixture, |  | ||||||
|     plane: string, |     plane: string, | ||||||
|     clickCoords: { x: number; y: number } |     clickCoords: { x: number; y: number } | ||||||
|   ) => { |   ) => { | ||||||
|     const u = await getUtils(page) |     const u = await getUtils(page) | ||||||
|     const PUR = 400 / 37.5 //pixeltoUnitRatio |     const PUR = 400 / 37.5 //pixeltoUnitRatio | ||||||
|     await page.setBodyDimensions({ width: 1200, height: 500 }) |     await page.setViewportSize({ width: 1200, height: 500 }) | ||||||
|  |  | ||||||
|     await homePage.goToModelingScene() |     await u.waitForAuthSkipAppStart() | ||||||
|     await u.openDebugPanel() |     await u.openDebugPanel() | ||||||
|  |  | ||||||
|     const coord = |     const coord = | ||||||
| @ -77,39 +83,32 @@ test.describe('Can create sketches on all planes and their back sides', () => { | |||||||
|     await u.clearCommandLogs() |     await u.clearCommandLogs() | ||||||
|     await u.removeCurrentCode() |     await u.removeCurrentCode() | ||||||
|   } |   } | ||||||
|   test('XY', async ({ page, homePage }) => { |   test('XY', async ({ page }) => { | ||||||
|     await sketchOnPlaneAndBackSideTest( |     await sketchOnPlaneAndBackSideTest( | ||||||
|       page, |       page, | ||||||
|       homePage, |  | ||||||
|       'XY', |       'XY', | ||||||
|       { x: 600, y: 388 } // red plane |       { x: 600, y: 388 } // red plane | ||||||
|       // { x: 600, y: 400 }, // red plane // clicks grid helper and that causes problems, should fix so that these coords work too. |       // { x: 600, y: 400 }, // red plane // clicks grid helper and that causes problems, should fix so that these coords work too. | ||||||
|     ) |     ) | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   test('YZ', async ({ page, homePage }) => { |   test('YZ', async ({ page }) => { | ||||||
|     await sketchOnPlaneAndBackSideTest(page, homePage, 'YZ', { x: 700, y: 250 }) // green plane |     await sketchOnPlaneAndBackSideTest(page, 'YZ', { x: 700, y: 250 }) // green plane | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   test('XZ', async ({ page, homePage }) => { |   test('XZ', async ({ page }) => { | ||||||
|     await sketchOnPlaneAndBackSideTest(page, homePage, '-XZ', { x: 700, y: 80 }) // blue plane |     await sketchOnPlaneAndBackSideTest(page, '-XZ', { x: 700, y: 80 }) // blue plane | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   test('-XY', async ({ page, homePage }) => { |   test('-XY', async ({ page }) => { | ||||||
|     await sketchOnPlaneAndBackSideTest(page, homePage, '-XY', { |     await sketchOnPlaneAndBackSideTest(page, '-XY', { x: 600, y: 118 }) // back of red plane | ||||||
|       x: 600, |  | ||||||
|       y: 118, |  | ||||||
|     }) // back of red plane |  | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   test('-YZ', async ({ page, homePage }) => { |   test('-YZ', async ({ page }) => { | ||||||
|     await sketchOnPlaneAndBackSideTest(page, homePage, '-YZ', { |     await sketchOnPlaneAndBackSideTest(page, '-YZ', { x: 700, y: 219 }) // back of green plane | ||||||
|       x: 700, |  | ||||||
|       y: 219, |  | ||||||
|     }) // back of green plan |  | ||||||
|   }) |   }) | ||||||
|  |  | ||||||
|   test('-XZ', async ({ page, homePage }) => { |   test('-XZ', async ({ page }) => { | ||||||
|     await sketchOnPlaneAndBackSideTest(page, homePage, 'XZ', { x: 700, y: 427 }) // back of blue plane |     await sketchOnPlaneAndBackSideTest(page, 'XZ', { x: 700, y: 427 }) // back of blue plane | ||||||
|   }) |   }) | ||||||
| }) | }) | ||||||
|  | |||||||
