diff --git a/example/.gitignore b/example/.gitignore
new file mode 100644
index 0000000..3648019
--- /dev/null
+++ b/example/.gitignore
@@ -0,0 +1,10 @@
+node_modules/
+build/
+bundle/
+xcuserdata
+.gradle
+.idea/
+Pods/
+*.lock
+*.xcworkspace/xcshareddata/xcdebugger/
+package-lock.json
\ No newline at end of file
diff --git a/example/.vscode/tasks.json b/example/.vscode/tasks.json
new file mode 100644
index 0000000..4a3a62d
--- /dev/null
+++ b/example/.vscode/tasks.json
@@ -0,0 +1,26 @@
+{
+ "version": "2.0.0",
+ "tasks": [
+ {
+ "label": "Doric Build",
+ "type": "shell",
+ "command": "doric build",
+ "group": "build",
+ "problemMatcher": []
+ },
+ {
+ "label": "Doric Clean",
+ "type": "shell",
+ "command": "doric clean",
+ "group": "build",
+ "problemMatcher": []
+ },
+ {
+ "label": "Doric Dev",
+ "type": "shell",
+ "command": "doric dev",
+ "group": "build",
+ "problemMatcher": []
+ }
+ ]
+}
\ No newline at end of file
diff --git a/example/android/app/build.gradle b/example/android/app/build.gradle
new file mode 100644
index 0000000..793a3b5
--- /dev/null
+++ b/example/android/app/build.gradle
@@ -0,0 +1,65 @@
+import groovy.json.JsonSlurper
+
+apply plugin: 'com.android.application'
+
+def model = new JsonSlurper().parse(new File(project.rootDir.getParent() + File.separator + "package.json"))
+def doricSDKVersion = model.dependencies.doric.replace("^", "")
+
+println("Doric Version:" + doricSDKVersion)
+
+android {
+ compileSdkVersion 29
+ buildToolsVersion "29.0.2"
+ defaultConfig {
+ applicationId "pub.doric.android.example"
+ minSdkVersion 16
+ targetSdkVersion 29
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+
+ sourceSets {
+ main {
+ assets.srcDirs = [project.getRootDir().getParent() + "/bundle"]
+ }
+ }
+
+ dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'androidx.appcompat:appcompat:1.1.0'
+ implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
+ implementation "pub.doric:core:$doricSDKVersion"
+ implementation "pub.doric:devkit:$doricSDKVersion"
+ }
+}
+
+afterEvaluate {
+ buildJSBundle.exec()
+}
+
+task buildJSBundle(type: Exec) {
+ workingDir project.rootDir.getParent()
+ commandLine 'npm', 'run', 'build'
+}
+
+def nodeModuleDir = new File(rootDir.getParent() + File.separator + "node_modules")
+if (nodeModuleDir.isDirectory()) {
+ nodeModuleDir.listFiles().each {
+ if (new File(it.getAbsolutePath() + File.separator + "__doric_library__").exists()) {
+ println("Find doric plugin library ${it.name} in ${it}")
+ def name = it.name
+ android {
+ dependencies {
+ implementation project(":${name}")
+ }
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/example/android/app/proguard-rules.pro b/example/android/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/example/android/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/example/android/app/src/main/AndroidManifest.xml b/example/android/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..d413fe4
--- /dev/null
+++ b/example/android/app/src/main/AndroidManifest.xml
@@ -0,0 +1,23 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example/android/app/src/main/java/pub/doric/android/MainActivity.java b/example/android/app/src/main/java/pub/doric/android/MainActivity.java
new file mode 100644
index 0000000..d0e30f2
--- /dev/null
+++ b/example/android/app/src/main/java/pub/doric/android/MainActivity.java
@@ -0,0 +1,40 @@
+package pub.doric.android;
+
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.TextView;
+
+import androidx.appcompat.app.AppCompatActivity;
+import pub.doric.DoricFragment;
+import pub.doric.devkit.DoricDev;
+import pub.doric.navbar.BaseDoricNavBar;
+
+public class MainActivity extends AppCompatActivity {
+ private final String BUNDLE_NAME = "example";
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ String source = "assets://src/" + BUNDLE_NAME + ".js";
+ getIntent().putExtra("source", source);
+ getIntent().putExtra("alias", BUNDLE_NAME);
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ this.getSupportFragmentManager().beginTransaction().add(R.id.container, new DoricFragment()).commit();
+ BaseDoricNavBar doricNavBar = findViewById(R.id.doric_nav_bar);
+ doricNavBar.setBackIconVisible(false);
+
+ TextView textView = new TextView(this);
+ textView.setText("Devkit");
+ textView.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ DoricDev.getInstance().openDevMode();
+ }
+ });
+ textView.setLayoutParams(new ViewGroup.LayoutParams(
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ ViewGroup.LayoutParams.WRAP_CONTENT));
+ doricNavBar.setRight(textView);
+ }
+}
diff --git a/example/android/app/src/main/java/pub/doric/android/MainApplication.java b/example/android/app/src/main/java/pub/doric/android/MainApplication.java
new file mode 100644
index 0000000..340ffd0
--- /dev/null
+++ b/example/android/app/src/main/java/pub/doric/android/MainApplication.java
@@ -0,0 +1,13 @@
+package pub.doric.android;
+
+import android.app.Application;
+
+import pub.doric.Doric;
+
+public class MainApplication extends Application {
+ @Override
+ public void onCreate() {
+ super.onCreate();
+ Doric.init(this);
+ }
+}
diff --git a/example/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/example/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..1f6bb29
--- /dev/null
+++ b/example/android/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/android/app/src/main/res/drawable/ic_launcher_background.xml b/example/android/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..0d025f9
--- /dev/null
+++ b/example/android/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/android/app/src/main/res/layout/activity_main.xml b/example/android/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..11345c5
--- /dev/null
+++ b/example/android/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/example/android/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..898f3ed
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..dffca36
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..64ba76f
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..dae5e08
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..e5ed465
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..14ed0af
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b0907ca
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..d8ae031
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..2c18de9
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..beed3cd
Binary files /dev/null and b/example/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/example/android/app/src/main/res/values/colors.xml b/example/android/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..69b2233
--- /dev/null
+++ b/example/android/app/src/main/res/values/colors.xml
@@ -0,0 +1,6 @@
+
+
+ #008577
+ #00574B
+ #D81B60
+
diff --git a/example/android/app/src/main/res/values/strings.xml b/example/android/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..d75426c
--- /dev/null
+++ b/example/android/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+
+ example
+
diff --git a/example/android/app/src/main/res/values/styles.xml b/example/android/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..0eb88fe
--- /dev/null
+++ b/example/android/app/src/main/res/values/styles.xml
@@ -0,0 +1,11 @@
+
+
+
+
+
+
diff --git a/example/android/app/src/main/res/xml/network_security_config.xml b/example/android/app/src/main/res/xml/network_security_config.xml
new file mode 100644
index 0000000..dca93c0
--- /dev/null
+++ b/example/android/app/src/main/res/xml/network_security_config.xml
@@ -0,0 +1,4 @@
+
+
+
+
\ No newline at end of file
diff --git a/example/android/build.gradle b/example/android/build.gradle
new file mode 100644
index 0000000..97c353b
--- /dev/null
+++ b/example/android/build.gradle
@@ -0,0 +1,28 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+ repositories {
+ google()
+ jcenter()
+
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.5.3'
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ mavenCentral()
+ maven { url 'https://jitpack.io' }
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/example/android/gradle.properties b/example/android/gradle.properties
new file mode 100644
index 0000000..199d16e
--- /dev/null
+++ b/example/android/gradle.properties
@@ -0,0 +1,20 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Automatically convert third-party libraries to use AndroidX
+android.enableJetifier=true
+
diff --git a/example/android/gradle/wrapper/gradle-wrapper.jar b/example/android/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..f6b961f
Binary files /dev/null and b/example/android/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/example/android/gradle/wrapper/gradle-wrapper.properties b/example/android/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..6cceef1
--- /dev/null
+++ b/example/android/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Thu Dec 05 19:41:10 CST 2019
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-6.0.1-all.zip
diff --git a/example/android/gradlew b/example/android/gradlew
new file mode 100755
index 0000000..cccdd3d
--- /dev/null
+++ b/example/android/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/example/android/gradlew.bat b/example/android/gradlew.bat
new file mode 100644
index 0000000..e95643d
--- /dev/null
+++ b/example/android/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/example/android/settings.gradle b/example/android/settings.gradle
new file mode 100644
index 0000000..2460e7f
--- /dev/null
+++ b/example/android/settings.gradle
@@ -0,0 +1,13 @@
+include ':app'
+rootProject.name='example'
+
+def nodeModuleDir = new File(rootDir.getParent() + File.separator + "node_modules")
+if (nodeModuleDir.isDirectory()) {
+ nodeModuleDir.listFiles().each {
+ if (new File(it.getAbsolutePath() + File.separator + "__doric_library__").exists()) {
+ println("Find doric plugin library ${it.name} in ${it}")
+ include ":${it.name}"
+ project(":${it.name}").projectDir = file(it.getAbsolutePath() + File.separator + "android")
+ }
+ }
+}
diff --git a/example/assets/logo_doric.png b/example/assets/logo_doric.png
new file mode 100644
index 0000000..3071529
Binary files /dev/null and b/example/assets/logo_doric.png differ
diff --git a/example/iOS/App/AppDelegate.h b/example/iOS/App/AppDelegate.h
new file mode 100644
index 0000000..8ec7241
--- /dev/null
+++ b/example/iOS/App/AppDelegate.h
@@ -0,0 +1,6 @@
+#import
+
+@interface AppDelegate : UIResponder
+@property (strong, nonatomic) UIWindow *window;
+@end
+
diff --git a/example/iOS/App/AppDelegate.m b/example/iOS/App/AppDelegate.m
new file mode 100644
index 0000000..8e4fd62
--- /dev/null
+++ b/example/iOS/App/AppDelegate.m
@@ -0,0 +1,38 @@
+#import "AppDelegate.h"
+#import
+#if __has_include()
+#import
+#import
+#endif
+
+@interface AppDelegate ()
+@end
+
+@implementation AppDelegate
+
+- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
+#if __has_include()
+ [SDImageCodersManager.sharedManager addCoder:SDImageWebPCoder.sharedCoder];
+#endif
+ return YES;
+}
+
+
+#pragma mark - UISceneSession lifecycle
+
+
+- (UISceneConfiguration *)application:(UIApplication *)application configurationForConnectingSceneSession:(UISceneSession *)connectingSceneSession options:(UISceneConnectionOptions *)options {
+ // Called when a new scene session is being created.
+ // Use this method to select a configuration to create the new scene with.
+ return [[UISceneConfiguration alloc] initWithName:@"Default Configuration" sessionRole:connectingSceneSession.role];
+}
+
+
+- (void)application:(UIApplication *)application didDiscardSceneSessions:(NSSet *)sceneSessions {
+ // Called when the user discards a scene session.
+ // If any sessions were discarded while the application was not running, this will be called shortly after application:didFinishLaunchingWithOptions.
+ // Use this method to release any resources that were specific to the discarded scenes, as they will not return.
+}
+
+
+@end
diff --git a/example/iOS/App/Assets.xcassets/AppIcon.appiconset/Contents.json b/example/iOS/App/Assets.xcassets/AppIcon.appiconset/Contents.json
new file mode 100644
index 0000000..d8db8d6
--- /dev/null
+++ b/example/iOS/App/Assets.xcassets/AppIcon.appiconset/Contents.json
@@ -0,0 +1,98 @@
+{
+ "images" : [
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "20x20",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "29x29",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "40x40",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "iphone",
+ "size" : "60x60",
+ "scale" : "3x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "20x20",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "29x29",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "40x40",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "1x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "76x76",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ipad",
+ "size" : "83.5x83.5",
+ "scale" : "2x"
+ },
+ {
+ "idiom" : "ios-marketing",
+ "size" : "1024x1024",
+ "scale" : "1x"
+ }
+ ],
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/example/iOS/App/Assets.xcassets/Contents.json b/example/iOS/App/Assets.xcassets/Contents.json
new file mode 100644
index 0000000..da4a164
--- /dev/null
+++ b/example/iOS/App/Assets.xcassets/Contents.json
@@ -0,0 +1,6 @@
+{
+ "info" : {
+ "version" : 1,
+ "author" : "xcode"
+ }
+}
\ No newline at end of file
diff --git a/example/iOS/App/Base.lproj/LaunchScreen.storyboard b/example/iOS/App/Base.lproj/LaunchScreen.storyboard
new file mode 100644
index 0000000..865e932
--- /dev/null
+++ b/example/iOS/App/Base.lproj/LaunchScreen.storyboard
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/example/iOS/App/Info.plist b/example/iOS/App/Info.plist
new file mode 100644
index 0000000..edbd4f3
--- /dev/null
+++ b/example/iOS/App/Info.plist
@@ -0,0 +1,67 @@
+
+
+
+
+ CFBundleDevelopmentRegion
+ $(DEVELOPMENT_LANGUAGE)
+ CFBundleExecutable
+ $(EXECUTABLE_NAME)
+ CFBundleIdentifier
+ $(PRODUCT_BUNDLE_IDENTIFIER)
+ CFBundleInfoDictionaryVersion
+ 6.0
+ CFBundleName
+ $(PRODUCT_NAME)
+ CFBundlePackageType
+ $(PRODUCT_BUNDLE_PACKAGE_TYPE)
+ CFBundleShortVersionString
+ 1.0
+ CFBundleVersion
+ 1
+ LSRequiresIPhoneOS
+
+ NSAppTransportSecurity
+
+ NSAllowsArbitraryLoads
+
+
+ NSCameraUsageDescription
+ Request to open camera
+ UIApplicationSceneManifest
+
+ UIApplicationSupportsMultipleScenes
+
+ UISceneConfigurations
+
+ UIWindowSceneSessionRoleApplication
+
+
+ UISceneConfigurationName
+ Default Configuration
+ UISceneDelegateClassName
+ SceneDelegate
+
+
+
+
+ UILaunchStoryboardName
+ LaunchScreen
+ UIRequiredDeviceCapabilities
+
+ armv7
+
+ UISupportedInterfaceOrientations
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+ UISupportedInterfaceOrientations~ipad
+
+ UIInterfaceOrientationPortrait
+ UIInterfaceOrientationPortraitUpsideDown
+ UIInterfaceOrientationLandscapeLeft
+ UIInterfaceOrientationLandscapeRight
+
+
+
diff --git a/example/iOS/App/SceneDelegate.h b/example/iOS/App/SceneDelegate.h
new file mode 100644
index 0000000..a58e9f2
--- /dev/null
+++ b/example/iOS/App/SceneDelegate.h
@@ -0,0 +1,4 @@
+#import
+
+@interface SceneDelegate : UIResponder
+@end
diff --git a/example/iOS/App/SceneDelegate.m b/example/iOS/App/SceneDelegate.m
new file mode 100644
index 0000000..45b6dd5
--- /dev/null
+++ b/example/iOS/App/SceneDelegate.m
@@ -0,0 +1,81 @@
+#import "SceneDelegate.h"
+#import
+
+#if DEBUG
+
+#import
+
+#endif
+
+@interface SceneDelegate ()
+@end
+
+@implementation SceneDelegate
+- (void)scene:(UIScene *)scene willConnectToSession:(UISceneSession *)session options:(UISceneConnectionOptions *)connectionOptions {
+ UIWindowScene *windowScene = (UIWindowScene *) scene;
+ NSString *bundleName = @"example";
+ DoricViewController *doricViewController = [[DoricViewController alloc] initWithSource:[NSString stringWithFormat:@"assets://src/%@.js", bundleName]
+ alias:bundleName
+ extra:@""];
+ doricViewController.view.backgroundColor = [UIColor whiteColor];
+#if DEBUG
+ UIBarButtonItem *rightBarItem = [[UIBarButtonItem alloc] initWithTitle:@"Devkit" style:UIBarButtonItemStylePlain target:self action:@selector(onOpenDevkit)];
+ doricViewController.navigationItem.rightBarButtonItem = rightBarItem;
+#endif
+ UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:doricViewController];
+ UINavigationBar *bar = navigationController.navigationBar;
+ if (@available(iOS 15.0, *)) {
+ UINavigationBarAppearance *barAppearance = [UINavigationBarAppearance new];
+ barAppearance.backgroundColor = UIColor.whiteColor;
+ bar.scrollEdgeAppearance = bar.standardAppearance = barAppearance;
+ }
+ UIWindow *window = [[UIWindow alloc] initWithWindowScene:windowScene];
+ window.frame = windowScene.coordinateSpace.bounds;
+ window.rootViewController = navigationController;
+ [UIApplication sharedApplication].delegate.window = window;
+ [window makeKeyAndVisible];
+}
+
+#if DEBUG
+
+- (void)onOpenDevkit {
+ [[DoricDev instance] openDevMode];
+}
+
+#endif
+
+- (void)sceneDidDisconnect:(UIScene *)scene {
+ // Called as the scene is being released by the system.
+ // This occurs shortly after the scene enters the background, or when its session is discarded.
+ // Release any resources associated with this scene that can be re-created the next time the scene connects.
+ // The scene may re-connect later, as its session was not neccessarily discarded (see `application:didDiscardSceneSessions` instead).
+}
+
+
+- (void)sceneDidBecomeActive:(UIScene *)scene {
+ // Called when the scene has moved from an inactive state to an active state.
+ // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
+}
+
+
+- (void)sceneWillResignActive:(UIScene *)scene {
+ // Called when the scene will move from an active state to an inactive state.
+ // This may occur due to temporary interruptions (ex. an incoming phone call).
+}
+
+
+- (void)sceneWillEnterForeground:(UIScene *)scene {
+ // Called as the scene transitions from the background to the foreground.
+ // Use this method to undo the changes made on entering the background.
+}
+
+
+- (void)sceneDidEnterBackground:(UIScene *)scene {
+ // Called as the scene transitions from the foreground to the background.
+ // Use this method to save data, release shared resources, and store enough scene-specific state information
+ // to restore the scene back to its current state.
+}
+
+
+@end
+
diff --git a/example/iOS/App/main.m b/example/iOS/App/main.m
new file mode 100644
index 0000000..dba295e
--- /dev/null
+++ b/example/iOS/App/main.m
@@ -0,0 +1,11 @@
+#import
+#import "AppDelegate.h"
+
+int main(int argc, char * argv[]) {
+ NSString * appDelegateClassName;
+ @autoreleasepool {
+ // Setup code that might create autoreleased objects goes here.
+ appDelegateClassName = NSStringFromClass([AppDelegate class]);
+ }
+ return UIApplicationMain(argc, argv, nil, appDelegateClassName);
+}
diff --git a/example/iOS/Podfile b/example/iOS/Podfile
new file mode 100644
index 0000000..d034477
--- /dev/null
+++ b/example/iOS/Podfile
@@ -0,0 +1,38 @@
+require "json"
+
+package = JSON.parse(File.read(File.join(__dir__, "../package.json")))
+version = package['dependencies']["doric"]
+version = version.gsub('^','')
+
+source 'https://cdn.cocoapods.org/'
+# Uncomment the next line to define a global platform for your project
+# platform :ios, '9.0'
+
+target 'example' do
+ # Comment the next line if you don't want to use dynamic frameworks
+ use_modular_headers!
+
+ # Pods for example
+ pod 'DoricCore', "#{version}"
+ pod 'DoricDevkit', "#{version}"
+
+ pod 'SDWebImage'
+
+ pod 'SDWebImageWebPCoder'
+
+ pod 'PINCache'
+
+ dir_node_modules = File.join(__dir__,"../node_modules")
+ Dir.foreach(dir_node_modules) do |file|
+ if File.exist?(File.join(dir_node_modules, file, "__doric_library__"))
+ puts "Doric Library: #{File.join(dir_node_modules, file)}"
+ ret = Dir.glob(File.join(dir_node_modules,file,"*.podspec"))
+ if(ret.length > 0)
+ podspecPath = ret[0]
+ extn = File.extname podspecPath
+ podspecName = File.basename podspecPath, extn
+ pod podspecName, :path => File.join(dir_node_modules, file)
+ end
+ end
+ end
+end
diff --git a/example/iOS/example.xcodeproj/project.pbxproj b/example/iOS/example.xcodeproj/project.pbxproj
new file mode 100644
index 0000000..cd5675a
--- /dev/null
+++ b/example/iOS/example.xcodeproj/project.pbxproj
@@ -0,0 +1,427 @@
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 51;
+ objects = {
+
+/* Begin PBXBuildFile section */
+ 95EDDB7EAB47A65821DBC7EC /* Pods_Example.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = AB59FE64F1D814FD13C71BB2 /* Pods_Example.framework */; };
+ E2B059BF23C452BB007555C7 /* src in Resources */ = {isa = PBXBuildFile; fileRef = E2B059BE23C452BB007555C7 /* src */; };
+ E2EF0C17275F787F007801C5 /* assets in Resources */ = {isa = PBXBuildFile; fileRef = E2EF0C16275F787F007801C5 /* assets */; };
+ E2F64CEF2399359C0006BD9A /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F64CEE2399359C0006BD9A /* AppDelegate.m */; };
+ E2F64CF22399359C0006BD9A /* SceneDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F64CF12399359C0006BD9A /* SceneDelegate.m */; };
+ E2F64CFA2399359E0006BD9A /* Assets.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = E2F64CF92399359E0006BD9A /* Assets.xcassets */; };
+ E2F64CFD2399359E0006BD9A /* LaunchScreen.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = E2F64CFB2399359E0006BD9A /* LaunchScreen.storyboard */; };
+ E2F64D002399359E0006BD9A /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = E2F64CFF2399359E0006BD9A /* main.m */; };
+/* End PBXBuildFile section */
+
+/* Begin PBXFileReference section */
+ 197D29BBE572343DDD72F8A6 /* Pods-Example.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.debug.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.debug.xcconfig"; sourceTree = ""; };
+ 5D47A9D4EA2836D57373FDF6 /* Pods-Example.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Example.release.xcconfig"; path = "Target Support Files/Pods-Example/Pods-Example.release.xcconfig"; sourceTree = ""; };
+ AB59FE64F1D814FD13C71BB2 /* Pods_Example.framework */ = {isa = PBXFileReference; explicitFileType = wrapper.framework; includeInIndex = 0; path = Pods_Example.framework; sourceTree = BUILT_PRODUCTS_DIR; };
+ E2B059BE23C452BB007555C7 /* src */ = {isa = PBXFileReference; lastKnownFileType = folder; name = src; path = ../bundle/src; sourceTree = ""; };
+ E2EF0C16275F787F007801C5 /* assets */ = {isa = PBXFileReference; lastKnownFileType = folder; name = assets; path = ../assets; sourceTree = ""; };
+ E2F64CEA2399359C0006BD9A /* example.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = example.app; sourceTree = BUILT_PRODUCTS_DIR; };
+ E2F64CED2399359C0006BD9A /* AppDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = AppDelegate.h; sourceTree = ""; };
+ E2F64CEE2399359C0006BD9A /* AppDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = AppDelegate.m; sourceTree = ""; };
+ E2F64CF02399359C0006BD9A /* SceneDelegate.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SceneDelegate.h; sourceTree = ""; };
+ E2F64CF12399359C0006BD9A /* SceneDelegate.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = SceneDelegate.m; sourceTree = ""; };
+ E2F64CF92399359E0006BD9A /* Assets.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; path = Assets.xcassets; sourceTree = ""; };
+ E2F64CFC2399359E0006BD9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.storyboard; name = Base; path = Base.lproj/LaunchScreen.storyboard; sourceTree = ""; };
+ E2F64CFE2399359E0006BD9A /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; };
+ E2F64CFF2399359E0006BD9A /* main.m */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.objc; path = main.m; sourceTree = ""; };
+/* End PBXFileReference section */
+
+/* Begin PBXFrameworksBuildPhase section */
+ E2F64CE72399359C0006BD9A /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ 95EDDB7EAB47A65821DBC7EC /* Pods_Example.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXFrameworksBuildPhase section */
+
+/* Begin PBXGroup section */
+ 875E7B19E6A1ABA3F802B6B5 /* Pods */ = {
+ isa = PBXGroup;
+ children = (
+ 197D29BBE572343DDD72F8A6 /* Pods-Example.debug.xcconfig */,
+ 5D47A9D4EA2836D57373FDF6 /* Pods-Example.release.xcconfig */,
+ );
+ path = Pods;
+ sourceTree = "";
+ };
+ E2F64CE12399359C0006BD9A = {
+ isa = PBXGroup;
+ children = (
+ E2EF0C16275F787F007801C5 /* assets */,
+ E2B059BE23C452BB007555C7 /* src */,
+ E2F64CEC2399359C0006BD9A /* App */,
+ E2F64CEB2399359C0006BD9A /* Products */,
+ 875E7B19E6A1ABA3F802B6B5 /* Pods */,
+ F654B22175F1FDDC9AE817FA /* Frameworks */,
+ );
+ sourceTree = "";
+ };
+ E2F64CEB2399359C0006BD9A /* Products */ = {
+ isa = PBXGroup;
+ children = (
+ E2F64CEA2399359C0006BD9A /* example.app */,
+ );
+ name = Products;
+ sourceTree = "";
+ };
+ E2F64CEC2399359C0006BD9A /* App */ = {
+ isa = PBXGroup;
+ children = (
+ E2F64CED2399359C0006BD9A /* AppDelegate.h */,
+ E2F64CEE2399359C0006BD9A /* AppDelegate.m */,
+ E2F64CF02399359C0006BD9A /* SceneDelegate.h */,
+ E2F64CF12399359C0006BD9A /* SceneDelegate.m */,
+ E2F64CF92399359E0006BD9A /* Assets.xcassets */,
+ E2F64CFB2399359E0006BD9A /* LaunchScreen.storyboard */,
+ E2F64CFE2399359E0006BD9A /* Info.plist */,
+ E2F64CFF2399359E0006BD9A /* main.m */,
+ );
+ path = App;
+ sourceTree = "";
+ };
+ F654B22175F1FDDC9AE817FA /* Frameworks */ = {
+ isa = PBXGroup;
+ children = (
+ AB59FE64F1D814FD13C71BB2 /* Pods_Example.framework */,
+ );
+ name = Frameworks;
+ sourceTree = "";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXNativeTarget section */
+ E2F64CE92399359C0006BD9A /* example */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = E2F64D032399359E0006BD9A /* Build configuration list for PBXNativeTarget "example" */;
+ buildPhases = (
+ 8E2E7D30FF8381E7791EA41B /* [CP] Check Pods Manifest.lock */,
+ E2F64D0B2399FFB20006BD9A /* Package JS Bundle */,
+ E2F64CE62399359C0006BD9A /* Sources */,
+ E2F64CE72399359C0006BD9A /* Frameworks */,
+ E2F64CE82399359C0006BD9A /* Resources */,
+ 489CC68D7F95811A10DFEC4E /* [CP] Embed Pods Frameworks */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = example;
+ productName = Example;
+ productReference = E2F64CEA2399359C0006BD9A /* example.app */;
+ productType = "com.apple.product-type.application";
+ };
+/* End PBXNativeTarget section */
+
+/* Begin PBXProject section */
+ E2F64CE22399359C0006BD9A /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 1120;
+ ORGANIZATIONNAME = pengfei.zhou;
+ TargetAttributes = {
+ E2F64CE92399359C0006BD9A = {
+ CreatedOnToolsVersion = 11.2.1;
+ };
+ };
+ };
+ buildConfigurationList = E2F64CE52399359C0006BD9A /* Build configuration list for PBXProject "Example" */;
+ compatibilityVersion = "Xcode 9.3";
+ developmentRegion = en;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ Base,
+ );
+ mainGroup = E2F64CE12399359C0006BD9A;
+ productRefGroup = E2F64CEB2399359C0006BD9A /* Products */;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ E2F64CE92399359C0006BD9A /* example */,
+ );
+ };
+/* End PBXProject section */
+
+/* Begin PBXResourcesBuildPhase section */
+ E2F64CE82399359C0006BD9A /* Resources */ = {
+ isa = PBXResourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E2EF0C17275F787F007801C5 /* assets in Resources */,
+ E2B059BF23C452BB007555C7 /* src in Resources */,
+ E2F64CFD2399359E0006BD9A /* LaunchScreen.storyboard in Resources */,
+ E2F64CFA2399359E0006BD9A /* Assets.xcassets in Resources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXResourcesBuildPhase section */
+
+/* Begin PBXShellScriptBuildPhase section */
+ 489CC68D7F95811A10DFEC4E /* [CP] Embed Pods Frameworks */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-input-files.xcfilelist",
+ );
+ name = "[CP] Embed Pods Frameworks";
+ outputFileListPaths = (
+ "${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks-${CONFIGURATION}-output-files.xcfilelist",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Example/Pods-Example-frameworks.sh\"\n";
+ showEnvVarsInLog = 0;
+ };
+ 8E2E7D30FF8381E7791EA41B /* [CP] Check Pods Manifest.lock */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ "${PODS_PODFILE_DIR_PATH}/Podfile.lock",
+ "${PODS_ROOT}/Manifest.lock",
+ );
+ name = "[CP] Check Pods Manifest.lock";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ "$(DERIVED_FILE_DIR)/Pods-Example-checkManifestLockResult.txt",
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
+ showEnvVarsInLog = 0;
+ };
+ E2F64D0B2399FFB20006BD9A /* Package JS Bundle */ = {
+ isa = PBXShellScriptBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ );
+ inputFileListPaths = (
+ );
+ inputPaths = (
+ );
+ name = "Package JS Bundle";
+ outputFileListPaths = (
+ );
+ outputPaths = (
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ shellPath = /bin/sh;
+ shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n# Type a script or drag a script file from your workspace to insert its path.\n\nexport NVM_DIR=\"$HOME/.nvm\"\n[ -s \"$NVM_DIR/nvm.sh\" ] && \\. \"$NVM_DIR/nvm.sh\" # This loads nvm\n[ -s \"$NVM_DIR/bash_completion\" ] && \\. \"$NVM_DIR/bash_completion\" # This loads nvm bash_completion\n\ncd ../ && npm run build\n";
+ };
+/* End PBXShellScriptBuildPhase section */
+
+/* Begin PBXSourcesBuildPhase section */
+ E2F64CE62399359C0006BD9A /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ E2F64CEF2399359C0006BD9A /* AppDelegate.m in Sources */,
+ E2F64D002399359E0006BD9A /* main.m in Sources */,
+ E2F64CF22399359C0006BD9A /* SceneDelegate.m in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
+/* End PBXSourcesBuildPhase section */
+
+/* Begin PBXVariantGroup section */
+ E2F64CFB2399359E0006BD9A /* LaunchScreen.storyboard */ = {
+ isa = PBXVariantGroup;
+ children = (
+ E2F64CFC2399359E0006BD9A /* Base */,
+ );
+ name = LaunchScreen.storyboard;
+ sourceTree = "";
+ };
+/* End PBXVariantGroup section */
+
+/* Begin XCBuildConfiguration section */
+ E2F64D012399359E0006BD9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = dwarf;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ ENABLE_TESTABILITY = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_DYNAMIC_NO_PIC = NO;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_OPTIMIZATION_LEVEL = 0;
+ GCC_PREPROCESSOR_DEFINITIONS = (
+ "DEBUG=1",
+ "$(inherited)",
+ );
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.2;
+ MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
+ MTL_FAST_MATH = YES;
+ ONLY_ACTIVE_ARCH = YES;
+ SDKROOT = iphoneos;
+ };
+ name = Debug;
+ };
+ E2F64D022399359E0006BD9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ ALWAYS_SEARCH_USER_PATHS = NO;
+ CLANG_ANALYZER_NONNULL = YES;
+ CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE;
+ CLANG_CXX_LANGUAGE_STANDARD = "gnu++14";
+ CLANG_CXX_LIBRARY = "libc++";
+ CLANG_ENABLE_MODULES = YES;
+ CLANG_ENABLE_OBJC_ARC = YES;
+ CLANG_ENABLE_OBJC_WEAK = YES;
+ CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES;
+ CLANG_WARN_BOOL_CONVERSION = YES;
+ CLANG_WARN_COMMA = YES;
+ CLANG_WARN_CONSTANT_CONVERSION = YES;
+ CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES;
+ CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR;
+ CLANG_WARN_DOCUMENTATION_COMMENTS = YES;
+ CLANG_WARN_EMPTY_BODY = YES;
+ CLANG_WARN_ENUM_CONVERSION = YES;
+ CLANG_WARN_INFINITE_RECURSION = YES;
+ CLANG_WARN_INT_CONVERSION = YES;
+ CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES;
+ CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES;
+ CLANG_WARN_OBJC_LITERAL_CONVERSION = YES;
+ CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR;
+ CLANG_WARN_RANGE_LOOP_ANALYSIS = YES;
+ CLANG_WARN_STRICT_PROTOTYPES = YES;
+ CLANG_WARN_SUSPICIOUS_MOVE = YES;
+ CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
+ CLANG_WARN_UNREACHABLE_CODE = YES;
+ CLANG_WARN__DUPLICATE_METHOD_MATCH = YES;
+ COPY_PHASE_STRIP = NO;
+ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
+ ENABLE_NS_ASSERTIONS = NO;
+ ENABLE_STRICT_OBJC_MSGSEND = YES;
+ GCC_C_LANGUAGE_STANDARD = gnu11;
+ GCC_NO_COMMON_BLOCKS = YES;
+ GCC_WARN_64_TO_32_BIT_CONVERSION = YES;
+ GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR;
+ GCC_WARN_UNDECLARED_SELECTOR = YES;
+ GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE;
+ GCC_WARN_UNUSED_FUNCTION = YES;
+ GCC_WARN_UNUSED_VARIABLE = YES;
+ IPHONEOS_DEPLOYMENT_TARGET = 13.2;
+ MTL_ENABLE_DEBUG_INFO = NO;
+ MTL_FAST_MATH = YES;
+ SDKROOT = iphoneos;
+ VALIDATE_PRODUCT = YES;
+ };
+ name = Release;
+ };
+ E2F64D042399359E0006BD9A /* Debug */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 197D29BBE572343DDD72F8A6 /* Pods-Example.debug.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = 7EE2RX3L3P;
+ GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
+ INFOPLIST_FILE = "$(SRCROOT)/App/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = pub.doric.ios.example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Debug;
+ };
+ E2F64D052399359E0006BD9A /* Release */ = {
+ isa = XCBuildConfiguration;
+ baseConfigurationReference = 5D47A9D4EA2836D57373FDF6 /* Pods-Example.release.xcconfig */;
+ buildSettings = {
+ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon;
+ CODE_SIGN_STYLE = Automatic;
+ DEVELOPMENT_TEAM = 7EE2RX3L3P;
+ GCC_INPUT_FILETYPE = sourcecode.cpp.objcpp;
+ INFOPLIST_FILE = "$(SRCROOT)/App/Info.plist";
+ LD_RUNPATH_SEARCH_PATHS = (
+ "$(inherited)",
+ "@executable_path/Frameworks",
+ );
+ PRODUCT_BUNDLE_IDENTIFIER = pub.doric.ios.example;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ TARGETED_DEVICE_FAMILY = "1,2";
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ E2F64CE52399359C0006BD9A /* Build configuration list for PBXProject "Example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E2F64D012399359E0006BD9A /* Debug */,
+ E2F64D022399359E0006BD9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+ E2F64D032399359E0006BD9A /* Build configuration list for PBXNativeTarget "example" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E2F64D042399359E0006BD9A /* Debug */,
+ E2F64D052399359E0006BD9A /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = E2F64CE22399359C0006BD9A /* Project object */;
+}
diff --git a/example/index.ts b/example/index.ts
new file mode 100644
index 0000000..3e602ea
--- /dev/null
+++ b/example/index.ts
@@ -0,0 +1 @@
+export default ['src/example']
\ No newline at end of file
diff --git a/example/package.json b/example/package.json
new file mode 100644
index 0000000..7bc6182
--- /dev/null
+++ b/example/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "example",
+ "version": "0.1.0",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1",
+ "build": "doric build",
+ "dev": "doric dev",
+ "clean": "doric clean",
+ "android": "doric run android",
+ "ios": "doric run iOS"
+ },
+ "license": "Apache-2.0",
+ "dependencies": {
+ "doric-svgview": "file:../",
+ "rollup": "^2.59.0",
+ "typescript": "^4.2.2"
+ },
+ "devDependencies": {
+ "@rollup/plugin-buble": "^0.21.3",
+ "@rollup/plugin-commonjs": "^14.0.0",
+ "@rollup/plugin-image": "^2.0.5",
+ "@rollup/plugin-json": "^4.1.0",
+ "@rollup/plugin-node-resolve": "^8.4.0"
+ }
+}
diff --git a/example/rollup.config.js b/example/rollup.config.js
new file mode 100644
index 0000000..312b80d
--- /dev/null
+++ b/example/rollup.config.js
@@ -0,0 +1,135 @@
+import resolve from "@rollup/plugin-node-resolve";
+import commonjs from "@rollup/plugin-commonjs";
+import bundles from "./build/index";
+import fs from "fs";
+import path from "path";
+import buble from "@rollup/plugin-buble";
+import json from "@rollup/plugin-json";
+import image from "@rollup/plugin-image";
+
+function searchImages(dir, images) {
+ const files = fs.readdirSync(dir);
+ files.forEach((item, index) => {
+ var fullPath = path.join(dir, item);
+ const stat = fs.statSync(fullPath);
+ if (stat.isDirectory()) {
+ searchImages(path.join(dir, item), images);
+ } else {
+ if (fullPath.endsWith(".png")) {
+ images.push(fullPath);
+ }
+ }
+ });
+ return images;
+}
+
+const allImages = [];
+searchImages("src", allImages);
+
+function mkdirsSync(dirname) {
+ if (fs.existsSync(dirname)) {
+ return true;
+ } else {
+ if (mkdirsSync(path.dirname(dirname))) {
+ fs.mkdirSync(dirname);
+ return true;
+ }
+ }
+}
+
+allImages.forEach((value) => {
+ let path = __dirname + "/build/" + value;
+ let index = path.lastIndexOf("/");
+ mkdirsSync(path.substring(0, index));
+
+ fs.copyFile(
+ __dirname + "/" + value,
+ __dirname + "/build/" + value,
+ (error) => {
+ console.log(error);
+ }
+ );
+});
+
+function readDirs(dirPath, files) {
+ if (fs.statSync(dirPath).isDirectory()) {
+ fs.readdirSync(dirPath).forEach((e) => {
+ readDirs(path.join(dirPath, e), files);
+ });
+ } else {
+ for (let bundle of bundles) {
+ if (dirPath.match(new RegExp(`^${bundle}`))) {
+ files.push(dirPath);
+ break;
+ }
+ }
+ }
+}
+
+const dirs = fs.readdirSync(".").filter((e) => {
+ for (let bundle of bundles) {
+ if (bundle.match(new RegExp(`^${e}/`))) {
+ return true;
+ }
+ }
+ return false;
+});
+
+const allFiles = [];
+
+dirs.forEach((e) => {
+ readDirs(e, allFiles);
+});
+export default allFiles
+ .map((e) => e.replace(/\.tsx?$/, ""))
+ .map((bundle) => {
+ return {
+ input: `build/${bundle}.js`,
+ output: {
+ format: "cjs",
+ file: `bundle/${bundle}.js`,
+ sourcemap: true,
+ },
+ plugins: [
+ resolve({ mainFields: ["jsnext"] }),
+ commonjs(),
+ json(),
+ image(),
+ ],
+ external: ["reflect-metadata", "doric"],
+ onwarn: function (warning) {
+ if (warning.code === "THIS_IS_UNDEFINED") {
+ return;
+ }
+ console.warn(warning.message);
+ },
+ };
+ });
+// If need ES5 support enable following configs
+// .concat(
+// allFiles
+// .map((e) => e.replace(/\.tsx?$/, ""))
+// .map(bundle => {
+// return {
+// input: `build/${bundle}.js`,
+// output: {
+// format: "cjs",
+// file: `bundle/${bundle}.es5.js`,
+// sourcemap: true,
+// },
+// plugins: [
+// resolve({ mainFields: ["jsnext"] }),
+// commonjs(),
+// json(),
+// buble({
+// transforms: { dangerousForOf: true }
+// }),
+// image(),
+// ],
+// external: ['reflect-metadata', 'doric'],
+// onwarn: function (warning) {
+// if (warning.code === 'THIS_IS_UNDEFINED') { return }
+// console.warn(warning.message)
+// }
+// }
+// }))
diff --git a/example/src/example.ts b/example/src/example.ts
new file mode 100644
index 0000000..f40593b
--- /dev/null
+++ b/example/src/example.ts
@@ -0,0 +1,46 @@
+import { Panel, Group, vlayout, layoutConfig, Gravity, text, Text, Color, navbar, AssetsResource, image } from "doric";
+
+@Entry
+class example extends Panel {
+ onShow() {
+ navbar(context).setTitle("example")
+ }
+ build(rootView: Group): void {
+ let number: Text
+ let count = 0
+ vlayout([
+ image({
+ image: new AssetsResource("logo_doric.png"),
+ }),
+ number = text({
+ textSize: 40,
+ text: '0',
+ }),
+ text({
+ text: "Click to count",
+ textSize: 20,
+ backgroundColor: Color.parse('#70a1ff'),
+ textColor: Color.WHITE,
+ onClick: () => {
+ number.text = `${++count}`
+ },
+ layoutConfig: layoutConfig().just(),
+ width: 200,
+ height: 50,
+ }),
+ ])
+ .apply({
+ layoutConfig: layoutConfig().just().configAlignment(Gravity.Center),
+ width: 200,
+ height: 200,
+ space: 20,
+ border: {
+ color: Color.BLUE,
+ width: 1,
+ },
+ gravity: Gravity.Center,
+ })
+ .in(rootView)
+ }
+
+}
\ No newline at end of file
diff --git a/example/tsconfig.json b/example/tsconfig.json
new file mode 100644
index 0000000..ec0ae3f
--- /dev/null
+++ b/example/tsconfig.json
@@ -0,0 +1,62 @@
+{
+ "compilerOptions": {
+ /* Basic Options */
+ // "incremental": true, /* Enable incremental compilation */
+ "target": "ES2015" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019' or 'ESNEXT'. */,
+ "module": "es2015" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', or 'ESNext'. */,
+ "lib": [] /* Specify library files to be included in the compilation. */,
+ // "allowJs": true, /* Allow javascript files to be compiled. */
+ // "checkJs": true, /* Report errors in .js files. */
+ "jsx": "react" /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */,
+ "jsxFactory": "jsx.createElement",
+ "jsxFragmentFactory": "jsx.Fragment",
+ // "declaration": true, /* Generates corresponding '.d.ts' file. */
+ // "declarationMap": true, /* Generates a sourcemap for each corresponding '.d.ts' file. */
+ "sourceMap": true /* Generates corresponding '.map' file. */,
+ // "outFile": "./", /* Concatenate and emit output to single file. */
+ "outDir": "build/" /* Redirect output structure to the directory. */,
+ // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */
+ // "composite": true, /* Enable project compilation */
+ // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */
+ // "removeComments": true, /* Do not emit comments to output. */
+ // "noEmit": true, /* Do not emit outputs. */
+ // "importHelpers": true, /* Import emit helpers from 'tslib'. */
+ // "downlevelIteration": true, /* Provide full support for iterables in 'for-of', spread, and destructuring when targeting 'ES5' or 'ES3'. */
+ // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */
+ /* Strict Type-Checking Options */
+ "strict": true /* Enable all strict type-checking options. */,
+ // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */
+ // "strictNullChecks": true, /* Enable strict null checks. */
+ // "strictFunctionTypes": true, /* Enable strict checking of function types. */
+ // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */
+ // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */
+ // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */
+ // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */
+ /* Additional Checks */
+ // "noUnusedLocals": true, /* Report errors on unused locals. */
+ // "noUnusedParameters": true, /* Report errors on unused parameters. */
+ // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */
+ // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */
+ /* Module Resolution Options */
+ "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */,
+ // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */
+ // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */
+ // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */
+ // "typeRoots": [], /* List of folders to include type definitions from. */
+ // "types": [], /* Type declaration files to be included in compilation. */
+ // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */
+ "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */,
+ // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */
+ // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */
+ /* Source Map Options */
+ // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */
+ // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */
+ // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */
+ // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */
+ /* Experimental Options */
+ "experimentalDecorators": true /* Enables experimental support for ES7 decorators. */,
+ "emitDecoratorMetadata": true /* Enables experimental support for emitting type metadata for decorators. */,
+ "resolveJsonModule": true
+ },
+ "include": ["**/*.ts", "**/*.tsx"]
+}
diff --git a/package.json b/package.json
index 075ef6c..276a6cb 100644
--- a/package.json
+++ b/package.json
@@ -1,5 +1,5 @@
{
- "name": "doricsvgview",
+ "name": "doric-svgview",
"version": "0.1.0",
"main": "dist/bundle_doricsvgview.js",
"scripts": {
@@ -13,11 +13,11 @@
"license": "Apache-2.0",
"dependencies": {
"doric": ">=0.9.27",
- "doric-cli": ">=0.9.27"
+ "doric-cli": ">=0.9.27",
+ "typescript": "^4.2.2",
+ "rollup": "^2.59.0"
},
"devDependencies": {
- "typescript": "^4.2.2",
- "rollup": "^2.24.0",
"@rollup/plugin-buble": "^0.21.3",
"@rollup/plugin-commonjs": "^14.0.0",
"@rollup/plugin-image": "^2.0.5",