#
#  Licensed to the Apache Software Foundation (ASF) under one
#  or more contributor license agreements.  See the NOTICE file
#  distributed with this work for additional information
#  regarding copyright ownership.  The ASF licenses this file
#  to you under the Apache License, Version 2.0 (the
#  "License"); you may not use this file except in compliance
#  with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing,
#  software distributed under the License is distributed on an
#  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
#  KIND, either express or implied.  See the License for the
#  specific language governing permissions and limitations
#  under the License.
#

[feature name=sling]
# Dependencies
[artifacts]
  org.apache.sling/org.apache.sling.scripting.sightly.runtime
  org.apache.sling/org.apache.sling.scripting.sightly.compiler
  org.apache.sling/org.apache.sling.scripting.sightly.compiler.java
  org.apache.sling/org.apache.sling.scripting.sightly
  org.apache.sling/org.apache.sling.scripting.sightly.js.provider
  org.apache.sling/org.apache.sling.scripting.sightly.models.provider
  org.apache.sling/org.apache.sling.scripting.sightly.testing-content

# additional configuration for testing
[configurations]

  org.apache.sling.commons.log.LogManager.factory.config-2ef75700-a318-4eae-bed4-86777e1bdfd2
    org.apache.sling.commons.log.pattern="{0,date,dd.MM.yyyy\ HH:mm:ss.SSS}\ *{4}*\ [{2}]\ {3}\ {5}"
    org.apache.sling.commons.log.names=["org.apache.sling.scripting.sightly.js.impl.jsapi.ProxyAsyncScriptableFactory"]
    org.apache.sling.commons.log.file="logs/error.log"
    org.apache.sling.commons.log.level="error"

  org.apache.sling.jcr.resource.internal.JcrResourceResolverFactoryImpl
    resource.resolver.searchpath=["/apps", "/libs", "/sightlytck/scripts"]

[:repoinit]
  create path (sling:Folder) /sightlytck/scripts
  set ACL for sling-scripting
    allow   jcr:read    on /sightlytck/scripts
  end
