# Node.js
**/node

# 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/

# 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
