# Node.js
**/node

# Python
**/*.pyc

# Logs
logs
*.log
*.log.*
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# nyc test coverage
.nyc_output

# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# Bower dependency directory (https://bower.io/)
bower_components

# node-waf configuration
.lock-wscript

# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release

# Dependency directories
node_modules/
jspm_packages/
dist/
dist10/

# TypeScript v1 declaration files
typings/

# Optional npm cache directory
.npm

# Optional eslint cache
.eslintcache

# Optional REPL history
.node_repl_history

# Output of 'npm pack'
*.tgz

# Yarn Integrity file
.yarn-integrity

# dotenv environment variables file
.env
.env.test

# parcel-bundler cache (https://parceljs.org/)
.cache

# next.js build output
.next

# nuxt.js build output
.nuxt

# vuepress build output
.vuepress/dist

# Serverless directories
.serverless/

# FuseBox cache
.fusebox/

# DynamoDB Local files
.dynamodb/

# Microservices

.classpath
.settings/

# Target dirs in all projects
**/target-ide/*
**/target/*
**/logs/*
**/tokens/*

# Added for Intellij IDEA IDE
**/*.ipr
**/*.iws
**/debug-logs/*
**/.idea/*
**/*.iml
**/*.project
**/.springBeans

**/*versionsBackup
**/blackDuckHub*
**/*.jsonld
**/.checkstyle
**/.gitignore

**/*.log
**/*py.class
**/.DS_Store

# To Remove Kotlin Script Generated Jars
**/*cba-kts.jar

# Added for Intellij IDEA IDE
**/*.ipr
**/*.iws
**/debug-logs/*
**/.idea/*
**/*.iml
**/*.project
**/.springBeans

# Target dirs in all projects
**/target-ide/*
**/target/*
**/logs/*
**/tokens/*

# Public site
*/**/package-lock.json
cds-ui/server/public

# Python generated class
**/*py.class

MacOS
**/.DS_Store

# To Remove Kotlin Script Generated Jars
**/*cba-kts.jar
/target/
