From c4f3e467643f20f174ab688161c8d31d8a0217be Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 15:16:14 +0300 Subject: [PATCH 01/12] fix: use devDeps and peerDeps instead of plain ones --- src/package.json | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/src/package.json b/src/package.json index de1cdab..2314672 100644 --- a/src/package.json +++ b/src/package.json @@ -45,16 +45,15 @@ "license": "MIT", "homepage": "https://github.com/angeltsvetkov/nativescript-facebook", "readmeFilename": "README.md", - "dependencies": { - "nativescript-angular": "rc", - "tns-core-modules": "rc", - "tns-platform-declarations": "rc", - "typescript": "2.2.2", - "@angular/core": "4.0.1", - "@angular/common": "4.0.1", - "@angular/compiler": "4.0.1", - "rxjs": "5.2.0", - "reflect-metadata": "0.1.8", - "zone.js": "0.8.4" + "devDependencies": { + "tns-core-modules": "^3.0.0 || ^3.0.0-rc.2", + "tns-platform-declarations": "^3.0.0 || ^3.0.0-rc.2", + "typescript": "~2.2.2", + "@angular/core": "~4.0.1", + "@angular/common": "~4.0.1", + "@angular/compiler": "~4.0.1" + }, + "peerDependencies": { + "tns-core-modules": "^3.0.0 || ^3.0.0-rc.2" } -} \ No newline at end of file +} From a1cdb3bbe4d651be75be88443bd154d06b8af081 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 15:40:00 +0300 Subject: [PATCH 02/12] fix(demo-ng): update dependencies to be compliant with ns3 and ng4 --- demo-angular/package.json | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/demo-angular/package.json b/demo-angular/package.json index cadce01..59206b2 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -9,22 +9,25 @@ "version": "3.0.0-rc.1" }, "tns-ios": { - "version": "3.0.0-rc.1-2017-3-28-2" + "version": "3.0.0-rc.1" } }, "dependencies": { - "@angular/common": "4.0.0", - "@angular/compiler": "4.0.0", - "@angular/core": "4.0.0", - "@angular/forms": "4.0.0", - "@angular/http": "4.0.0", - "@angular/platform-browser": "4.0.0", - "@angular/platform-browser-dynamic": "4.0.0", - "@angular/router": "4.0.0", - "nativescript-facebook": "file:///../src", + "@angular/common": "~4.0.0", + "@angular/compiler": "~4.0.0", + "@angular/core": "~4.0.0", + "@angular/forms": "~4.0.0", + "@angular/http": "~4.0.0", + "@angular/platform-browser": "~4.0.0", + "@angular/platform-browser-dynamic": "~4.0.0", + "@angular/router": "~4.0.0", + "nativescript-angular": "^3.0.0 || ^2.0.0-rc.1", + "nativescript-facebook": "../src", "nativescript-theme-core": "^1.0.2", "nativescript-unit-test-runner": "^0.3.4", - "tns-core-modules": "rc" + "rxjs": "~5.3.0", + "tns-core-modules": "^3.0.0 || ^3.0.0-rc.1", + "zone.js": "^0.8.4" }, "devDependencies": { "babel-traverse": "6.12.0", @@ -36,7 +39,7 @@ "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "lazy": "1.0.11", - "nativescript-dev-typescript": "0.4", - "typescript": "2.2.2" + "nativescript-dev-typescript": "^0.4.0", + "typescript": "~2.2.2" } } From 79b1f61c256232fcb36668cfc519928bc92daac1 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 15:40:41 +0300 Subject: [PATCH 03/12] fix(demo-ng): add "es2015.iterable" to tsconfig Needed when building Angular 4.0 projects. --- demo-angular/tsconfig.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/demo-angular/tsconfig.json b/demo-angular/tsconfig.json index 069dc21..145cbfc 100644 --- a/demo-angular/tsconfig.json +++ b/demo-angular/tsconfig.json @@ -9,7 +9,8 @@ "experimentalDecorators": true, "lib": [ "es6", - "dom" + "dom", + "es2015.iterable" ], "baseUrl": ".", "paths": { From 0d740c8d4f0f773d24707241c20e8030f8525d89 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 15:49:00 +0300 Subject: [PATCH 04/12] fix(demo-ng): move plugin initialization from main.ts to AppModule The main.ts file should be as plain as possible since main.aot.ts almost mirrors it and the last one is used for AoT compilation with webpack. --- README.md | 11 +++++------ demo-angular/app/app.module.ts | 19 ++++++++++--------- demo-angular/app/main.aot.ts | 2 -- demo-angular/app/main.ts | 8 -------- 4 files changed, 15 insertions(+), 25 deletions(-) diff --git a/README.md b/README.md index 24689cd..abadc35 100644 --- a/README.md +++ b/README.md @@ -17,7 +17,7 @@ NativeScript : Facebook SDK ![apple](https://cdn3.iconfinder.com/data/icons/pico - [Login](#login) - [Facebook Login Button](#facebook-login-button) - [Custom Login Button](#custom-login-button) -- [NativeScript + Angular](#nativescript--angular) +- [NativeScript Angular](#nativescript--angular) - [Initialization](#initialization-1) - [Login](#login-1) - [Facebook Login Button](#facebook-login-button-1) @@ -144,13 +144,13 @@ export class HelloWorldModel extends Observable { } ``` -## NativeScript + Angular +## NativeScript Angular ### Initialization Call init of nativescript-facebook module on application launch. -main.ts +app.module.ts ```TypeScript -import { platformNativeScriptDynamic } from "nativescript-angular/platform"; +... import * as application from 'application'; var nsFacebook = require('nativescript-facebook'); @@ -159,8 +159,7 @@ import { AppModule } from "./app.module"; application.on(application.launchEvent, function (args) { nsFacebook.init("{facebook_app_id}"); }); - -platformNativeScriptDynamic().bootstrapModule(AppModule); +... ``` ### Login diff --git a/demo-angular/app/app.module.ts b/demo-angular/app/app.module.ts index 600763a..97a08fd 100644 --- a/demo-angular/app/app.module.ts +++ b/demo-angular/app/app.module.ts @@ -4,19 +4,20 @@ import { AppComponent } from "./app.component"; import { NativescriptFacebookModule } from "nativescript-facebook/angular"; +import * as application from 'application'; +var nsFacebook = require('nativescript-facebook'); + +application.on(application.launchEvent, function (args) { + nsFacebook.init("1771472059772879"); +}); + @NgModule({ - bootstrap: [ - AppComponent - ], + bootstrap: [ AppComponent ], imports: [ NativeScriptModule, NativescriptFacebookModule ], - declarations: [ - AppComponent - ], - schemas: [ - NO_ERRORS_SCHEMA - ] + declarations: [ AppComponent ], + schemas: [ NO_ERRORS_SCHEMA ] }) export class AppModule { } diff --git a/demo-angular/app/main.aot.ts b/demo-angular/app/main.aot.ts index 8f033e9..98bf134 100644 --- a/demo-angular/app/main.aot.ts +++ b/demo-angular/app/main.aot.ts @@ -1,6 +1,4 @@ -// this import should be first in order to load some required settings (like globals and reflect-metadata) import { platformNativeScript } from "nativescript-angular/platform-static"; - import { AppModuleNgFactory } from "./app.module.ngfactory"; platformNativeScript().bootstrapModuleFactory(AppModuleNgFactory); diff --git a/demo-angular/app/main.ts b/demo-angular/app/main.ts index 66aa42f..639bfd5 100644 --- a/demo-angular/app/main.ts +++ b/demo-angular/app/main.ts @@ -1,12 +1,4 @@ -// this import should be first in order to load some required settings (like globals and reflect-metadata) import { platformNativeScriptDynamic } from "nativescript-angular/platform"; -import * as application from 'application'; -var nsFacebook = require('nativescript-facebook'); - import { AppModule } from "./app.module"; -application.on(application.launchEvent, function (args) { - nsFacebook.init("1771472059772879"); -}); - platformNativeScriptDynamic().bootstrapModule(AppModule); From db80ffcabf2f2dc6d0c1e3608f5c3330d0885b6e Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 16:08:50 +0300 Subject: [PATCH 05/12] chore: add separate .gitignore files --- .gitignore | 19 +------------------ demo-angular/.gitignore | 4 ++++ demo/.gitignore | 4 ++++ src/.gitignore | 2 ++ 4 files changed, 11 insertions(+), 18 deletions(-) create mode 100644 demo-angular/.gitignore create mode 100644 demo/.gitignore create mode 100644 src/.gitignore diff --git a/.gitignore b/.gitignore index 4d08210..8f1faee 100644 --- a/.gitignore +++ b/.gitignore @@ -1,18 +1 @@ -*.js -*.js.map -*.log -!scripts/*.js -demo/app/*.js -!demo/karma.conf.js -!demo/app/tests/*.js -demo/*.d.ts -!demo/references.d.ts -demo/lib -demo/platforms -demo/node_modules -demo-angular/app/*.js -demo-angular/*.d.ts -demo-angular/platforms -demo-angular/node_modules -src/node_modules -/.vscode/ \ No newline at end of file +/.vscode/ diff --git a/demo-angular/.gitignore b/demo-angular/.gitignore new file mode 100644 index 0000000..6b1e5df --- /dev/null +++ b/demo-angular/.gitignore @@ -0,0 +1,4 @@ +platforms +node_modules +hooks +app/**/*.js diff --git a/demo/.gitignore b/demo/.gitignore new file mode 100644 index 0000000..5c1c079 --- /dev/null +++ b/demo/.gitignore @@ -0,0 +1,4 @@ +node_modules +platforms +hooks +app/**/*.js diff --git a/src/.gitignore b/src/.gitignore new file mode 100644 index 0000000..1f1f02c --- /dev/null +++ b/src/.gitignore @@ -0,0 +1,2 @@ +node_modules +**/*.js From 94d0468a00f48ec8f32668f5c115cb1a28ea5ff0 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 16:09:43 +0300 Subject: [PATCH 06/12] feat(demo-ng): add webpack support with `nativescript-dev-webpack` plugin --- demo-angular/app/vendor-platform.android.ts | 25 ++++ demo-angular/app/vendor-platform.ios.ts | 0 demo-angular/app/vendor.ts | 13 ++ demo-angular/package.json | 19 ++- demo-angular/tsconfig.aot.json | 39 +++++ demo-angular/webpack.android.js | 2 + demo-angular/webpack.common.js | 151 ++++++++++++++++++++ demo-angular/webpack.ios.js | 2 + 8 files changed, 250 insertions(+), 1 deletion(-) create mode 100644 demo-angular/app/vendor-platform.android.ts create mode 100644 demo-angular/app/vendor-platform.ios.ts create mode 100644 demo-angular/app/vendor.ts create mode 100644 demo-angular/tsconfig.aot.json create mode 100644 demo-angular/webpack.android.js create mode 100644 demo-angular/webpack.common.js create mode 100644 demo-angular/webpack.ios.js diff --git a/demo-angular/app/vendor-platform.android.ts b/demo-angular/app/vendor-platform.android.ts new file mode 100644 index 0000000..ba9742f --- /dev/null +++ b/demo-angular/app/vendor-platform.android.ts @@ -0,0 +1,25 @@ +// Resolve JavaScript classes that extend a Java class, and need to resolve +// their JavaScript module from a bundled script. For example: +// NativeScriptApplication, NativeScriptActivity, etc. +// +// This module gets bundled together with the rest of the app code and the +// `require` calls get resolved to the correct bundling import call. +// +// At runtime the module gets loaded *before* the rest of the app code, so code +// placed here needs to be careful about its dependencies. + +require("application"); +require("ui/frame"); +require("ui/frame/activity"); + +if (global.TNS_WEBPACK) { + global.__requireOverride = function (name, dir) { + if (name === "./tns_modules/application/application.js") { + return require("application"); + } else if (name === "./tns_modules/ui/frame/frame.js") { + return require("ui/frame"); + } else if (name === "./tns_modules/ui/frame/activity.js") { + return require("ui/frame/activity"); + } + }; +} diff --git a/demo-angular/app/vendor-platform.ios.ts b/demo-angular/app/vendor-platform.ios.ts new file mode 100644 index 0000000..e69de29 diff --git a/demo-angular/app/vendor.ts b/demo-angular/app/vendor.ts new file mode 100644 index 0000000..0d96965 --- /dev/null +++ b/demo-angular/app/vendor.ts @@ -0,0 +1,13 @@ +require("./vendor-platform"); + +require("reflect-metadata"); +require("@angular/platform-browser"); +require("@angular/core"); +require("@angular/common"); +require("@angular/forms"); +require("@angular/http"); +require("@angular/router"); + +require("nativescript-angular/platform-static"); +require("nativescript-angular/forms"); +require("nativescript-angular/router"); diff --git a/demo-angular/package.json b/demo-angular/package.json index 59206b2..d94bc6c 100644 --- a/demo-angular/package.json +++ b/demo-angular/package.json @@ -30,16 +30,33 @@ "zone.js": "^0.8.4" }, "devDependencies": { + "@angular/compiler-cli": "~4.0.0", + "@ngtools/webpack": "1.3.0", "babel-traverse": "6.12.0", "babel-types": "6.11.1", "babylon": "6.8.4", + "copy-webpack-plugin": "~4.0.1", + "extract-text-webpack-plugin": "~2.1.0", "filewalker": "0.1.2", "jasmine-core": "^2.5.2", "karma": "^1.3.0", "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "lazy": "1.0.11", + "nativescript-css-loader": "~0.26.0", "nativescript-dev-typescript": "^0.4.0", - "typescript": "~2.2.2" + "nativescript-dev-webpack": "^0.4.0", + "raw-loader": "~0.5.1", + "resolve-url-loader": "~2.0.2", + "typescript": "~2.2.2", + "webpack": "~2.3.3", + "webpack-sources": "~0.2.3" + }, + "scripts": { + "ns-bundle": "ns-bundle", + "start-android-bundle": "npm run ns-bundle --android --start-app", + "start-ios-bundle": "npm run ns-bundle --ios --start-app", + "build-android-bundle": "npm run ns-bundle --android --build-app", + "build-ios-bundle": "npm run ns-bundle --ios --build-app" } } diff --git a/demo-angular/tsconfig.aot.json b/demo-angular/tsconfig.aot.json new file mode 100644 index 0000000..23e3021 --- /dev/null +++ b/demo-angular/tsconfig.aot.json @@ -0,0 +1,39 @@ +{ + "extends": "./tsconfig", + "compilerOptions": { + "baseUrl": ".", + "paths": { + "ui/*": ["node_modules/tns-core-modules/ui/*"], + "platform": ["node_modules/tns-core-modules/platform"], + "image-source": ["node_modules/tns-core-modules/image-source"], + "xml": ["node_modules/tns-core-modules/xml"], + "xhr": ["node_modules/tns-core-modules/xhr"], + "text": ["node_modules/tns-core-modules/text"], + "data": ["node_modules/tns-core-modules/data"], + "fetch": ["node_modules/tns-core-modules/fetch"], + "trace": ["node_modules/tns-core-modules/trace"], + "fps-meter": ["node_modules/tns-core-modules/fps-meter"], + "color": ["node_modules/tns-core-modules/color"], + "application-settings": ["node_modules/tns-core-modules/application-settings"], + "http": ["node_modules/tns-core-modules/http"], + "camera": ["node_modules/tns-core-modules/camera"], + "console": ["node_modules/tns-core-modules/console"], + "timer": ["node_modules/tns-core-modules/timer"], + "utils": ["node_modules/tns-core-modules/utils"], + "location": ["node_modules/tns-core-modules/location"], + "file-system": ["node_modules/tns-core-modules/file-system"], + "application": ["node_modules/tns-core-modules/application"], + "image-asset": ["node_modules/tns-core-modules/image-asset"], + "connectivity": ["node_modules/tns-core-modules/connectivity"], + "globals": ["node_modules/tns-core-modules/globals"] + } + }, + "exclude": [ + "node_modules", + "platforms" + ], + "angularCompilerOptions": { + "skipMetadataEmit": true, + "genDir": "./" + } +} diff --git a/demo-angular/webpack.android.js b/demo-angular/webpack.android.js new file mode 100644 index 0000000..968e93b --- /dev/null +++ b/demo-angular/webpack.android.js @@ -0,0 +1,2 @@ +var makeConfig = require("./webpack.common"); +module.exports = makeConfig("android"); diff --git a/demo-angular/webpack.common.js b/demo-angular/webpack.common.js new file mode 100644 index 0000000..0d017eb --- /dev/null +++ b/demo-angular/webpack.common.js @@ -0,0 +1,151 @@ +var webpack = require("webpack"); +var nsWebpack = require("nativescript-dev-webpack"); +var nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +var path = require("path"); +var CopyWebpackPlugin = require("copy-webpack-plugin"); +var ExtractTextPlugin = require("extract-text-webpack-plugin"); +var AotPlugin = require("@ngtools/webpack").AotPlugin; + +module.exports = function (platform, destinationApp) { + if (!destinationApp) { + //Default destination inside platforms//... + destinationApp = nsWebpack.getAppPath(platform); + } + var entry = {}; + // Discover entry module from package.json + entry.bundle = "./" + nsWebpack.getEntryModule(); + //Vendor entry with third party libraries. + entry.vendor = "./vendor"; + // app.css bundle + entry["app.css"] = "./app.css"; + + var plugins = [ + new ExtractTextPlugin("app.css"), + // Vendor libs go to the vendor.js chunk + new webpack.optimize.CommonsChunkPlugin({ + name: ["vendor"] + }), + // Define useful constants like TNS_WEBPACK + new webpack.DefinePlugin({ + "global.TNS_WEBPACK": "true", + }), + // Copy assets to out dir. Add your own globs as needed. + new CopyWebpackPlugin([ + { from: "app.css" }, + { from: "css/**" }, + { from: "fonts/**" }, + { from: "**/*.jpg" }, + { from: "**/*.png" }, + { from: "**/*.xml" }, + ], { ignore: ["App_Resources/**"] }), + // Generate a bundle starter script and activate it in package.json + new nsWebpack.GenerateBundleStarterPlugin([ + "./vendor", + "./bundle", + ]), + + // Angular AOT compiler + new AotPlugin({ + tsConfigPath: "tsconfig.aot.json", + entryModule: path.resolve(__dirname, "app/app.module#AppModule"), + typeChecking: false + }), + new nsWebpack.StyleUrlResolvePlugin({platform}), + ]; + + if (process.env.npm_config_uglify) { + plugins.push(new webpack.LoaderOptionsPlugin({ + minimize: true + })); + + // Work around an Android issue by setting compress = false + var compress = platform !== "android"; + plugins.push(new webpack.optimize.UglifyJsPlugin({ + mangle: { + except: nsWebpack.uglifyMangleExcludes, + }, + compress: compress, + })); + } + + return { + context: path.resolve("./app"), + target: nativescriptTarget, + entry: entry, + output: { + pathinfo: true, + path: path.resolve(destinationApp), + libraryTarget: "commonjs2", + filename: "[name].js", + }, + resolve: { + // Resolve platform-specific modules like module.android.js + extensions: [ + ".aot.ts", + ".ts", + ".js", + ".css", + "." + platform + ".ts", + "." + platform + ".js", + "." + platform + ".css", + ], + // Resolve {N} system modules from tns-core-modules + modules: [ + "node_modules/tns-core-modules", + "node_modules", + ] + }, + node: { + // Disable node shims that conflict with NativeScript + "http": false, + "timers": false, + "setImmediate": false, + "fs": "empty", + }, + module: { + loaders: [ + { + test: /\.html$|\.xml$/, + loaders: [ + "raw-loader", + ] + }, + // Root app.css file gets extracted with bundled dependencies + { + test: /app\.css$/, + loader: ExtractTextPlugin.extract([ + "resolve-url-loader", + "nativescript-css-loader", + "nativescript-dev-webpack/platform-css-loader", + ]), + }, + // Other CSS files get bundled using the raw loader + { + test: /\.css$/, + exclude: /app\.css$/, + loaders: [ + "raw-loader", + ] + }, + // Compile TypeScript files with ahead-of-time compiler. + { + test: /\.ts$/, + loaders: [ + "nativescript-dev-webpack/tns-aot-loader", + "@ngtools/webpack", + ] + }, + // SASS support + { + test: /\.scss$/, + loaders: [ + "raw-loader", + "resolve-url-loader", + "sass-loader", + ] + }, + ] + }, + plugins: plugins, + }; +}; diff --git a/demo-angular/webpack.ios.js b/demo-angular/webpack.ios.js new file mode 100644 index 0000000..806f3ef --- /dev/null +++ b/demo-angular/webpack.ios.js @@ -0,0 +1,2 @@ +var makeConfig = require("./webpack.common"); +module.exports = makeConfig("ios"); From cbce418053131af22eba49feaf6165a9bc37ae4f Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 16:17:52 +0300 Subject: [PATCH 07/12] fix(demo): update deps to be compliant with NS3 --- demo/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/demo/package.json b/demo/package.json index efd4abe..4e47178 100644 --- a/demo/package.json +++ b/demo/package.json @@ -9,10 +9,10 @@ } }, "dependencies": { - "nativescript-facebook": "file:///../src", + "nativescript-facebook": "../src", "nativescript-theme-core": "^1.0.2", "nativescript-unit-test-runner": "^0.3.4", - "tns-core-modules": "rc" + "tns-core-modules": "^3.0.0 || ^3.0.0-rc.2" }, "devDependencies": { "babel-traverse": "6.12.0", @@ -24,7 +24,7 @@ "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "lazy": "1.0.11", - "nativescript-dev-typescript": "0.4", - "typescript": "2.2.2" + "nativescript-dev-typescript": "^0.4.0", + "typescript": "~2.2.2" } } From f9d129d370f94899f9439b399c64af6123002af1 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Wed, 26 Apr 2017 18:03:41 +0300 Subject: [PATCH 08/12] feat: add .npmignore to plugin --- src/.npmignore | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 src/.npmignore diff --git a/src/.npmignore b/src/.npmignore new file mode 100644 index 0000000..fbfd1e9 --- /dev/null +++ b/src/.npmignore @@ -0,0 +1,10 @@ +*.ts +*.tgz + +*.ts +!*.d.ts + +*.js.map + +tsconfig.json +.npmignore From 14ffa3bd72a3997a63d821666d9fb68584460087 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Thu, 27 Apr 2017 11:26:10 +0300 Subject: [PATCH 09/12] feat(demo): add webpack support with `nativescript-dev-webpack` plugin --- demo/app/app.ts | 8 +- demo/app/bundle-config.ts | 8 ++ demo/app/main-page.ts | 12 +-- demo/app/main-view-model.ts | 12 +-- demo/app/vendor-platform.android.ts | 25 +++++ demo/app/vendor-platform.ios.ts | 0 demo/app/vendor.ts | 3 + demo/package.json | 18 +++- demo/webpack.android.js | 2 + demo/webpack.common.js | 138 ++++++++++++++++++++++++++++ demo/webpack.ios.js | 2 + 11 files changed, 210 insertions(+), 18 deletions(-) create mode 100644 demo/app/bundle-config.ts create mode 100644 demo/app/vendor-platform.android.ts create mode 100644 demo/app/vendor-platform.ios.ts create mode 100644 demo/app/vendor.ts create mode 100644 demo/webpack.android.js create mode 100644 demo/webpack.common.js create mode 100644 demo/webpack.ios.js diff --git a/demo/app/app.ts b/demo/app/app.ts index 81b6356..50313e5 100644 --- a/demo/app/app.ts +++ b/demo/app/app.ts @@ -1,8 +1,10 @@ -import * as application from 'application'; -var nsFacebook = require('nativescript-facebook'); +import "./bundle-config"; + +import * as application from 'application'; +import { init } from "nativescript-facebook"; application.on(application.launchEvent, function (args) { - nsFacebook.init("1771472059772879"); + init("1771472059772879"); }); application.start({ moduleName: "main-page" }); diff --git a/demo/app/bundle-config.ts b/demo/app/bundle-config.ts new file mode 100644 index 0000000..a88fa89 --- /dev/null +++ b/demo/app/bundle-config.ts @@ -0,0 +1,8 @@ +if ((global).TNS_WEBPACK) { + require("bundle-entry-points"); + + global.registerModule("main-page", () => require("./main-page")); + + // register application modules + global.registerModule("nativescript-facebook", () => require("nativescript-facebook")); +} diff --git a/demo/app/main-page.ts b/demo/app/main-page.ts index 231d655..dca878e 100644 --- a/demo/app/main-page.ts +++ b/demo/app/main-page.ts @@ -1,10 +1,10 @@ -import * as observable from 'data/observable'; -import * as pages from 'ui/page'; -import {HelloWorldModel} from './main-view-model'; +import { EventData } from 'data/observable'; +import { Page } from 'ui/page'; +import { HelloWorldModel } from './main-view-model'; // Event handler for Page 'loaded' event attached in main-page.xml -export function pageLoaded(args: observable.EventData) { +export function pageLoaded(args: EventData) { // Get the event sender - let page = args.object; + let page = args.object; page.bindingContext = new HelloWorldModel(); -} \ No newline at end of file +} diff --git a/demo/app/main-view-model.ts b/demo/app/main-view-model.ts index 8edd917..3965535 100644 --- a/demo/app/main-view-model.ts +++ b/demo/app/main-view-model.ts @@ -1,9 +1,7 @@ import { Observable } from 'data/observable'; -let Facebook = require('nativescript-facebook'); -// Facebook Authentication CODE -import * as application from "application"; -var view = require("ui/core/view"); +import * as nsFacebook from "nativescript-facebook"; +// Facebook Authentication CODE export class HelloWorldModel extends Observable { public onLogin(error, data) { @@ -11,8 +9,6 @@ export class HelloWorldModel extends Observable { } public testAction() { - Facebook.login((error, data) => { - console.log("Success!"); - }); + nsFacebook.login((error, data) => console.log("Success!")); } -} \ No newline at end of file +} diff --git a/demo/app/vendor-platform.android.ts b/demo/app/vendor-platform.android.ts new file mode 100644 index 0000000..ba9742f --- /dev/null +++ b/demo/app/vendor-platform.android.ts @@ -0,0 +1,25 @@ +// Resolve JavaScript classes that extend a Java class, and need to resolve +// their JavaScript module from a bundled script. For example: +// NativeScriptApplication, NativeScriptActivity, etc. +// +// This module gets bundled together with the rest of the app code and the +// `require` calls get resolved to the correct bundling import call. +// +// At runtime the module gets loaded *before* the rest of the app code, so code +// placed here needs to be careful about its dependencies. + +require("application"); +require("ui/frame"); +require("ui/frame/activity"); + +if (global.TNS_WEBPACK) { + global.__requireOverride = function (name, dir) { + if (name === "./tns_modules/application/application.js") { + return require("application"); + } else if (name === "./tns_modules/ui/frame/frame.js") { + return require("ui/frame"); + } else if (name === "./tns_modules/ui/frame/activity.js") { + return require("ui/frame/activity"); + } + }; +} diff --git a/demo/app/vendor-platform.ios.ts b/demo/app/vendor-platform.ios.ts new file mode 100644 index 0000000..e69de29 diff --git a/demo/app/vendor.ts b/demo/app/vendor.ts new file mode 100644 index 0000000..5c562b3 --- /dev/null +++ b/demo/app/vendor.ts @@ -0,0 +1,3 @@ +require("./vendor-platform"); + +require("bundle-entry-points"); diff --git a/demo/package.json b/demo/package.json index 4e47178..f17746e 100644 --- a/demo/package.json +++ b/demo/package.json @@ -15,16 +15,32 @@ "tns-core-modules": "^3.0.0 || ^3.0.0-rc.2" }, "devDependencies": { + "awesome-typescript-loader": "~3.1.2", "babel-traverse": "6.12.0", "babel-types": "6.11.1", "babylon": "6.8.4", + "copy-webpack-plugin": "~4.0.1", + "extract-text-webpack-plugin": "~2.1.0", "filewalker": "0.1.2", "jasmine-core": "^2.5.2", "karma": "^1.3.0", "karma-jasmine": "^1.0.2", "karma-nativescript-launcher": "^0.4.0", "lazy": "1.0.11", + "nativescript-css-loader": "~0.26.0", "nativescript-dev-typescript": "^0.4.0", - "typescript": "~2.2.2" + "nativescript-dev-webpack": "^0.4.0", + "raw-loader": "~0.5.1", + "resolve-url-loader": "~2.0.2", + "typescript": "~2.2.2", + "webpack": "~2.3.3", + "webpack-sources": "~0.2.3" + }, + "scripts": { + "ns-bundle": "ns-bundle", + "start-android-bundle": "npm run ns-bundle --android --start-app", + "start-ios-bundle": "npm run ns-bundle --ios --start-app", + "build-android-bundle": "npm run ns-bundle --android --build-app", + "build-ios-bundle": "npm run ns-bundle --ios --build-app" } } diff --git a/demo/webpack.android.js b/demo/webpack.android.js new file mode 100644 index 0000000..968e93b --- /dev/null +++ b/demo/webpack.android.js @@ -0,0 +1,2 @@ +var makeConfig = require("./webpack.common"); +module.exports = makeConfig("android"); diff --git a/demo/webpack.common.js b/demo/webpack.common.js new file mode 100644 index 0000000..8427c54 --- /dev/null +++ b/demo/webpack.common.js @@ -0,0 +1,138 @@ +var webpack = require("webpack"); +var nsWebpack = require("nativescript-dev-webpack"); +var nativescriptTarget = require("nativescript-dev-webpack/nativescript-target"); +var path = require("path"); +var CopyWebpackPlugin = require("copy-webpack-plugin"); +var ExtractTextPlugin = require("extract-text-webpack-plugin"); + +module.exports = function (platform, destinationApp) { + if (!destinationApp) { + // Default destination inside platforms//... + destinationApp = nsWebpack.getAppPath(platform); + } + var entry = {}; + // Discover entry module from package.json + entry.bundle = "./" + nsWebpack.getEntryModule(); + // Vendor entry with third party libraries. + entry.vendor = "./vendor"; + // app.css bundle + entry["app.css"] = "./app.css"; + + var plugins = [ + new ExtractTextPlugin("app.css"), + // Vendor libs go to the vendor.js chunk + new webpack.optimize.CommonsChunkPlugin({ + name: ["vendor"] + }), + // Define useful constants like TNS_WEBPACK + new webpack.DefinePlugin({ + "global.TNS_WEBPACK": "true", + }), + // Copy assets to out dir. Add your own globs as needed. + new CopyWebpackPlugin([ + { from: "app.css" }, + { from: "css/**" }, + { from: "fonts/**" }, + { from: "**/*.jpg" }, + { from: "**/*.png" }, + { from: "**/*.xml" }, + ], { ignore: ["App_Resources/**"] }), + // Generate a bundle starter script and activate it in package.json + new nsWebpack.GenerateBundleStarterPlugin([ + "./vendor", + "./bundle", + ]), + ]; + + if (process.env.npm_config_uglify) { + plugins.push(new webpack.LoaderOptionsPlugin({ + minimize: true + })); + + // Work around an Android issue by setting compress = false + var compress = platform !== "android"; + plugins.push(new webpack.optimize.UglifyJsPlugin({ + mangle: { + except: nsWebpack.uglifyMangleExcludes, + }, + compress: compress, + })); + } + + return { + context: path.resolve("./app"), + target: nativescriptTarget, + entry: entry, + output: { + pathinfo: true, + path: path.resolve(destinationApp), + libraryTarget: "commonjs2", + filename: "[name].js", + }, + resolve: { + // Resolve platform-specific modules like module.android.js + extensions: [ + ".ts", + ".js", + ".css", + "." + platform + ".ts", + "." + platform + ".js", + "." + platform + ".css", + ], + // Resolve {N} system modules from tns-core-modules + modules: [ + "node_modules/tns-core-modules", + "node_modules", + ] + }, + node: { + // Disable node shims that conflict with NativeScript + "http": false, + "timers": false, + "setImmediate": false, + "fs": "empty", + }, + module: { + loaders: [ + { + test: /\.html$/, + loader: "raw-loader" + }, + // Root app.css file gets extracted with bundled dependencies + { + test: /app\.css$/, + loader: ExtractTextPlugin.extract([ + "resolve-url-loader", + "nativescript-css-loader", + "nativescript-dev-webpack/platform-css-loader", + ]), + }, + // Other CSS files get bundled using the raw loader + { + test: /\.css$/, + exclude: /app\.css$/, + loaders: [ + "raw-loader", + ] + }, + // Compile TypeScript files, replace templateUrl and styleUrls. + { + test: /\.ts$/, + loaders: [ + "awesome-typescript-loader", + ] + }, + // SASS support + { + test: /\.scss$/, + loaders: [ + "raw-loader", + "resolve-url-loader", + "sass-loader", + ] + }, + ] + }, + plugins: plugins, + }; +}; diff --git a/demo/webpack.ios.js b/demo/webpack.ios.js new file mode 100644 index 0000000..806f3ef --- /dev/null +++ b/demo/webpack.ios.js @@ -0,0 +1,2 @@ +var makeConfig = require("./webpack.common"); +module.exports = makeConfig("ios"); From 21fa97896ade2d583de4ae377313c47a0bd86af3 Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Thu, 27 Apr 2017 11:38:14 +0300 Subject: [PATCH 10/12] refactor: rename common LoginButton to LoginButtonBase Change required to be compliant with core-modules guidelines. --- src/angular/nativescript-facebook-directives.ts | 8 +++----- src/login-button.android.ts | 4 ++-- src/login-button.common.ts | 8 ++++---- src/login-button.ios.ts | 4 ++-- src/login-manager.android.ts | 1 + 5 files changed, 12 insertions(+), 13 deletions(-) diff --git a/src/angular/nativescript-facebook-directives.ts b/src/angular/nativescript-facebook-directives.ts index 114ab9e..52a4667 100644 --- a/src/angular/nativescript-facebook-directives.ts +++ b/src/angular/nativescript-facebook-directives.ts @@ -1,10 +1,8 @@ -import { Directive } from '@angular/core'; // TODO: check require .Directive without hacks +import { Directive } from "@angular/core"; // TODO: check require .Directive without hacks @Directive({ selector: "FacebookLoginButton" }) -export class FacebookLoginButtonDirective { - constructor() { } -} +export class FacebookLoginButtonDirective { } -export const DIRECTIVES = [FacebookLoginButtonDirective]; \ No newline at end of file +export const DIRECTIVES = [FacebookLoginButtonDirective]; diff --git a/src/login-button.android.ts b/src/login-button.android.ts index f5f6ed2..8932988 100644 --- a/src/login-button.android.ts +++ b/src/login-button.android.ts @@ -1,6 +1,6 @@ //NativeScript modules import * as applicationModule from "application"; -import { LoginButton as LoginButtonBase } from './login-button.common'; +import { LoginButtonBase } from './login-button.common'; declare let com: any; @@ -8,4 +8,4 @@ export class LoginButton extends LoginButtonBase { public createNativeView() { return new com.facebook.login.widget.LoginButton(this._context); } -} \ No newline at end of file +} diff --git a/src/login-button.common.ts b/src/login-button.common.ts index 81cf836..4758efe 100644 --- a/src/login-button.common.ts +++ b/src/login-button.common.ts @@ -1,15 +1,15 @@ import { View, Property } from "ui/core/view" import * as loginManager from './login-manager'; -export abstract class LoginButton extends View { +export abstract class LoginButtonBase extends View { onLoginPropertyChanged(callback: any) { loginManager._registerLoginCallback(callback); } } -export const onLoginProperty = new Property({ - name: "onLogin", defaultValue: undefined, valueChanged: (btn, oldV, newV) => { +export const onLoginProperty = new Property({ + name: "onLogin", valueChanged: (btn, oldV, newV) => { btn.onLoginPropertyChanged(newV); } }); -onLoginProperty.register(LoginButton); \ No newline at end of file +onLoginProperty.register(LoginButtonBase); diff --git a/src/login-button.ios.ts b/src/login-button.ios.ts index 1e25737..4076269 100644 --- a/src/login-button.ios.ts +++ b/src/login-button.ios.ts @@ -1,5 +1,5 @@ import * as applicationModule from "application"; -import { LoginButton as LoginButtonBase } from './login-button.common'; +import { LoginButtonBase } from './login-button.common'; import * as loginManager from './login-manager'; declare let FBSDKLoginButton: any; @@ -43,4 +43,4 @@ class LoginButtonDelegate extends NSObject implements FBSDKLoginButtonDelegate { loginButtonWillLogin(loginButton: any) { return true; } -} \ No newline at end of file +} diff --git a/src/login-manager.android.ts b/src/login-manager.android.ts index 10148f7..67b7269 100644 --- a/src/login-manager.android.ts +++ b/src/login-manager.android.ts @@ -89,6 +89,7 @@ export function requestReadPermissions(permissions: string[], callback: Function } export function login(callback: Function) { + console.log("requesting read permissions .... .") requestReadPermissions(LOGIN_PERMISSIONS, callback); } From ff0b07f13ea5d3b38ad8d3e6c4c241c5efa52bcf Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Thu, 27 Apr 2017 15:31:59 +0300 Subject: [PATCH 11/12] feat: generate metadata for NgModules to make AoT work --- demo-angular/app/app.module.ts | 4 ++-- src/angular/index.metadata.json | 1 + .../nativescript-facebook-directives.metadata.json | 1 + src/angular/nativescript-facebook-module.d.ts | 2 +- src/angular/nativescript-facebook-module.metadata.json | 1 + src/angular/nativescript-facebook-module.ts | 4 ++-- src/index.android.metadata.json | 1 + src/index.ios.metadata.json | 1 + src/login-button.android.metadata.json | 1 + src/login-button.common.metadata.json | 1 + src/login-button.ios.metadata.json | 1 + src/login-manager.android.metadata.json | 1 + src/login-manager.d.ts | 8 ++++---- src/login-manager.ios.metadata.json | 1 + src/login-response.metadata.json | 1 + src/package.json | 10 ++++++++-- src/tsconfig.json | 10 ++++++++-- 17 files changed, 36 insertions(+), 13 deletions(-) create mode 100644 src/angular/index.metadata.json create mode 100644 src/angular/nativescript-facebook-directives.metadata.json create mode 100644 src/angular/nativescript-facebook-module.metadata.json create mode 100644 src/index.android.metadata.json create mode 100644 src/index.ios.metadata.json create mode 100644 src/login-button.android.metadata.json create mode 100644 src/login-button.common.metadata.json create mode 100644 src/login-button.ios.metadata.json create mode 100644 src/login-manager.android.metadata.json create mode 100644 src/login-manager.ios.metadata.json create mode 100644 src/login-response.metadata.json diff --git a/demo-angular/app/app.module.ts b/demo-angular/app/app.module.ts index 97a08fd..bd14153 100644 --- a/demo-angular/app/app.module.ts +++ b/demo-angular/app/app.module.ts @@ -2,7 +2,7 @@ import { NgModule, NO_ERRORS_SCHEMA } from "@angular/core"; import { NativeScriptModule } from "nativescript-angular/nativescript.module"; import { AppComponent } from "./app.component"; -import { NativescriptFacebookModule } from "nativescript-facebook/angular"; +import { NativeScriptFacebookModule } from "nativescript-facebook/angular"; import * as application from 'application'; var nsFacebook = require('nativescript-facebook'); @@ -15,7 +15,7 @@ application.on(application.launchEvent, function (args) { bootstrap: [ AppComponent ], imports: [ NativeScriptModule, - NativescriptFacebookModule + NativeScriptFacebookModule ], declarations: [ AppComponent ], schemas: [ NO_ERRORS_SCHEMA ] diff --git a/src/angular/index.metadata.json b/src/angular/index.metadata.json new file mode 100644 index 0000000..ad233f0 --- /dev/null +++ b/src/angular/index.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{},"exports":[{"from":"./nativescript-facebook-module"}]},{"__symbolic":"module","version":1,"metadata":{},"exports":[{"from":"./nativescript-facebook-module"}]}] \ No newline at end of file diff --git a/src/angular/nativescript-facebook-directives.metadata.json b/src/angular/nativescript-facebook-directives.metadata.json new file mode 100644 index 0000000..eb2e731 --- /dev/null +++ b/src/angular/nativescript-facebook-directives.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"FacebookLoginButtonDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive"},"arguments":[{"selector":"FacebookLoginButton"}]}]},"DIRECTIVES":[{"__symbolic":"reference","name":"FacebookLoginButtonDirective"}]}},{"__symbolic":"module","version":1,"metadata":{"FacebookLoginButtonDirective":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Directive"},"arguments":[{"selector":"FacebookLoginButton"}]}]},"DIRECTIVES":[{"__symbolic":"reference","name":"FacebookLoginButtonDirective"}]}}] \ No newline at end of file diff --git a/src/angular/nativescript-facebook-module.d.ts b/src/angular/nativescript-facebook-module.d.ts index b2baf6b..633c5dd 100644 --- a/src/angular/nativescript-facebook-module.d.ts +++ b/src/angular/nativescript-facebook-module.d.ts @@ -1,2 +1,2 @@ -export declare class NativescriptFacebookModule { +export declare class NativeScriptFacebookModule { } diff --git a/src/angular/nativescript-facebook-module.metadata.json b/src/angular/nativescript-facebook-module.metadata.json new file mode 100644 index 0000000..09d9f00 --- /dev/null +++ b/src/angular/nativescript-facebook-module.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"NativeScriptFacebookModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"},"arguments":[{"declarations":[{"__symbolic":"reference","module":"./nativescript-facebook-directives","name":"DIRECTIVES"}],"exports":[{"__symbolic":"reference","module":"./nativescript-facebook-directives","name":"DIRECTIVES"}]}]}]}}},{"__symbolic":"module","version":1,"metadata":{"NativeScriptFacebookModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule"},"arguments":[{"declarations":[{"__symbolic":"reference","module":"./nativescript-facebook-directives","name":"DIRECTIVES"}],"exports":[{"__symbolic":"reference","module":"./nativescript-facebook-directives","name":"DIRECTIVES"}]}]}]}}}] \ No newline at end of file diff --git a/src/angular/nativescript-facebook-module.ts b/src/angular/nativescript-facebook-module.ts index b6c8f58..f780d7a 100644 --- a/src/angular/nativescript-facebook-module.ts +++ b/src/angular/nativescript-facebook-module.ts @@ -7,6 +7,6 @@ import { DIRECTIVES } from "./nativescript-facebook-directives"; declarations: [DIRECTIVES], exports: [DIRECTIVES], }) -export class NativescriptFacebookModule { } +export class NativeScriptFacebookModule { } -registerElement("FacebookLoginButton", () => require("../").LoginButton); \ No newline at end of file +registerElement("FacebookLoginButton", () => require("../").LoginButton); diff --git a/src/index.android.metadata.json b/src/index.android.metadata.json new file mode 100644 index 0000000..6f9ff5a --- /dev/null +++ b/src/index.android.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{},"exports":[{"from":"./login-manager"},{"from":"./login-button"}]},{"__symbolic":"module","version":1,"metadata":{},"exports":[{"from":"./login-manager"},{"from":"./login-button"}]}] \ No newline at end of file diff --git a/src/index.ios.metadata.json b/src/index.ios.metadata.json new file mode 100644 index 0000000..6d119d6 --- /dev/null +++ b/src/index.ios.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{},"exports":[{"from":"./login-button"},{"from":"./login-manager"}]},{"__symbolic":"module","version":1,"metadata":{},"exports":[{"from":"./login-button"},{"from":"./login-manager"}]}] \ No newline at end of file diff --git a/src/login-button.android.metadata.json b/src/login-button.android.metadata.json new file mode 100644 index 0000000..16ddc8f --- /dev/null +++ b/src/login-button.android.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"LoginButton":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./login-button.common","name":"LoginButtonBase"},"members":{"createNativeView":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"LoginButton":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./login-button.common","name":"LoginButtonBase"},"members":{"createNativeView":[{"__symbolic":"method"}]}}}}] \ No newline at end of file diff --git a/src/login-button.common.metadata.json b/src/login-button.common.metadata.json new file mode 100644 index 0000000..97687b9 --- /dev/null +++ b/src/login-button.common.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"onLoginPropertyChanged":[{"__symbolic":"method"}],"addEventListener":[{"__symbolic":"method"}]}},"onLoginProperty":{"__symbolic":"error","message":"Function call not supported","line":20,"character":33}}},{"__symbolic":"module","version":1,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"onLoginPropertyChanged":[{"__symbolic":"method"}],"addEventListener":[{"__symbolic":"method"}]}},"onLoginProperty":{"__symbolic":"error","message":"Function call not supported","line":20,"character":33}}}] \ No newline at end of file diff --git a/src/login-button.ios.metadata.json b/src/login-button.ios.metadata.json new file mode 100644 index 0000000..7ca141a --- /dev/null +++ b/src/login-button.ios.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"LoginButton":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./login-button.common","name":"LoginButtonBase"},"members":{"__ctor__":[{"__symbolic":"constructor"}],"onLoaded":[{"__symbolic":"method"}],"onUnloaded":[{"__symbolic":"method"}]}}}},{"__symbolic":"module","version":1,"metadata":{"LoginButton":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"./login-button.common","name":"LoginButtonBase"},"members":{"__ctor__":[{"__symbolic":"constructor"}],"onLoaded":[{"__symbolic":"method"}],"onUnloaded":[{"__symbolic":"method"}]}}}}] \ No newline at end of file diff --git a/src/login-manager.android.metadata.json b/src/login-manager.android.metadata.json new file mode 100644 index 0000000..94aa44b --- /dev/null +++ b/src/login-manager.android.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"}}},{"__symbolic":"module","version":1,"metadata":{"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"}}}] \ No newline at end of file diff --git a/src/login-manager.d.ts b/src/login-manager.d.ts index f8dc9be..9983021 100644 --- a/src/login-manager.d.ts +++ b/src/login-manager.d.ts @@ -1,24 +1,24 @@ export declare function _registerLoginCallback(callback: Function): void; export declare let _onLoginCallback: Function; -/** +/** * Sets the Facebook application Id for the current app and init the native facebook sdk. * @param {string} fbAppId the application Id */ export declare function init(fbId: string): void; -/** +/** * Request the specified publish permissions. * @param {string[]} permissions Array of the requested publish permissions. * @param {Function} callback Function reference to be executed when the requested permissions are granted or denied. */ export declare function requestPublishPermissions(permissions: string[], callback: Function): void; -/** +/** * Request the specified read permissions. * @param {string[]} permissions Array of the requested read permissions. * @param {Function} callback Function reference to be executed when the requested permissions are granted or denied. */ export declare function requestReadPermissions(permissions: string[], callback: Function): void; -/** +/** * Trigger a login procedure by requesting the "public_profile" and "email" read permissions. * @param {Function} callback Function reference to be executed when the requested permissions are granted or denied. */ diff --git a/src/login-manager.ios.metadata.json b/src/login-manager.ios.metadata.json new file mode 100644 index 0000000..c17bbf0 --- /dev/null +++ b/src/login-manager.ios.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"onLoginCallback":{"__symbolic":"error","message":"Variable not initialized","line":15,"character":11},"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"}}},{"__symbolic":"module","version":1,"metadata":{"onLoginCallback":{"__symbolic":"error","message":"Variable not initialized","line":15,"character":11},"init":{"__symbolic":"function"},"_registerLoginCallback":{"__symbolic":"function"},"requestPublishPermissions":{"__symbolic":"function"},"requestReadPermissions":{"__symbolic":"function"},"login":{"__symbolic":"function"}}}] \ No newline at end of file diff --git a/src/login-response.metadata.json b/src/login-response.metadata.json new file mode 100644 index 0000000..980b460 --- /dev/null +++ b/src/login-response.metadata.json @@ -0,0 +1 @@ +[{"__symbolic":"module","version":3,"metadata":{"LoginResponse":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}]}}}},{"__symbolic":"module","version":1,"metadata":{"LoginResponse":{"__symbolic":"class","members":{"__ctor__":[{"__symbolic":"constructor","parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","name":"string"}]}]}}}}] \ No newline at end of file diff --git a/src/package.json b/src/package.json index 2314672..e6d898b 100644 --- a/src/package.json +++ b/src/package.json @@ -9,7 +9,9 @@ } }, "scripts": { - "build": "tsc", + "tsc": "tsc", + "ngc": "node --max-old-space-size=8192 ./node_modules/.bin/ngc", + "build": "tsc && ngc", "demo.ios": "npm run preparedemo && cd ../demo && tns run ios --emulator", "demo.ios.device": "npm run preparedemo && cd ../demo && tns run ios", "demo.android": "npm run preparedemo && cd ../demo && tns debug android --justlaunch", @@ -49,9 +51,13 @@ "tns-core-modules": "^3.0.0 || ^3.0.0-rc.2", "tns-platform-declarations": "^3.0.0 || ^3.0.0-rc.2", "typescript": "~2.2.2", + "nativescript-angular": "^3.0.0 || ^2.0.0-rc.1", "@angular/core": "~4.0.1", "@angular/common": "~4.0.1", - "@angular/compiler": "~4.0.1" + "@angular/compiler": "~4.0.1", + "@angular/compiler-cli": "~4.0.1", + "rxjs": "~5.3.0", + "zone.js": "~0.8.4" }, "peerDependencies": { "tns-core-modules": "^3.0.0 || ^3.0.0-rc.2" diff --git a/src/tsconfig.json b/src/tsconfig.json index e7b4ab6..63c9bcf 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -21,5 +21,11 @@ "demo-angular", "node_modules" ], - "compileOnSave": false -} \ No newline at end of file + "compileOnSave": false, + "angularCompilerOptions": { + "annotateForClosureCompiler": true, + "strictMetadataEmit": true, + "skipTemplateCodegen": true, + "genDir": "." + } +} From b2b260419a0edf65682fb5360dd9b40fbd75392b Mon Sep 17 00:00:00 2001 From: sis0k0 Date: Thu, 27 Apr 2017 15:43:22 +0300 Subject: [PATCH 12/12] fix: rename onLogin to login Properties starting with 'on' cannot be used as bindings for security reasons. The problem only happens when AoT compiling. --- demo-angular/app/app.component.html | 4 ++-- demo/app/main-page.xml | 4 ++-- demo/app/main-view-model.ts | 4 ++-- src/login-button.common.metadata.json | 2 +- src/login-button.common.ts | 2 +- src/tsconfig.json | 6 +++--- 6 files changed, 11 insertions(+), 11 deletions(-) diff --git a/demo-angular/app/app.component.html b/demo-angular/app/app.component.html index a0b9786..c4ea399 100644 --- a/demo-angular/app/app.component.html +++ b/demo-angular/app/app.component.html @@ -1,4 +1,4 @@ - + - \ No newline at end of file + diff --git a/demo/app/main-page.xml b/demo/app/main-page.xml index ecf6aca..2fddc4f 100644 --- a/demo/app/main-page.xml +++ b/demo/app/main-page.xml @@ -3,7 +3,7 @@ loaded="pageLoaded" class="page"> - \ No newline at end of file + diff --git a/demo/app/main-view-model.ts b/demo/app/main-view-model.ts index 3965535..b1cb8c7 100644 --- a/demo/app/main-view-model.ts +++ b/demo/app/main-view-model.ts @@ -1,5 +1,5 @@ import { Observable } from 'data/observable'; -import * as nsFacebook from "nativescript-facebook"; +import { login } from "nativescript-facebook"; // Facebook Authentication CODE export class HelloWorldModel extends Observable { @@ -9,6 +9,6 @@ export class HelloWorldModel extends Observable { } public testAction() { - nsFacebook.login((error, data) => console.log("Success!")); + login((error, data) => console.log("Success!")); } } diff --git a/src/login-button.common.metadata.json b/src/login-button.common.metadata.json index 97687b9..ed28586 100644 --- a/src/login-button.common.metadata.json +++ b/src/login-button.common.metadata.json @@ -1 +1 @@ -[{"__symbolic":"module","version":3,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"onLoginPropertyChanged":[{"__symbolic":"method"}],"addEventListener":[{"__symbolic":"method"}]}},"onLoginProperty":{"__symbolic":"error","message":"Function call not supported","line":20,"character":33}}},{"__symbolic":"module","version":1,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"onLoginPropertyChanged":[{"__symbolic":"method"}],"addEventListener":[{"__symbolic":"method"}]}},"onLoginProperty":{"__symbolic":"error","message":"Function call not supported","line":20,"character":33}}}] \ No newline at end of file +[{"__symbolic":"module","version":3,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"onLoginPropertyChanged":[{"__symbolic":"method"}]}},"onLoginProperty":{"__symbolic":"error","message":"Function call not supported","line":10,"character":31}}},{"__symbolic":"module","version":1,"metadata":{"LoginButtonBase":{"__symbolic":"class","extends":{"__symbolic":"reference","module":"ui/core/view","name":"View"},"members":{"onLoginPropertyChanged":[{"__symbolic":"method"}]}},"onLoginProperty":{"__symbolic":"error","message":"Function call not supported","line":10,"character":31}}}] \ No newline at end of file diff --git a/src/login-button.common.ts b/src/login-button.common.ts index 4758efe..6f31f12 100644 --- a/src/login-button.common.ts +++ b/src/login-button.common.ts @@ -8,7 +8,7 @@ export abstract class LoginButtonBase extends View { } export const onLoginProperty = new Property({ - name: "onLogin", valueChanged: (btn, oldV, newV) => { + name: "login", valueChanged: (btn, oldV, newV) => { btn.onLoginPropertyChanged(newV); } }); diff --git a/src/tsconfig.json b/src/tsconfig.json index 63c9bcf..02b09bb 100644 --- a/src/tsconfig.json +++ b/src/tsconfig.json @@ -17,9 +17,9 @@ "pretty": true }, "exclude": [ - "demo", - "demo-angular", - "node_modules" + "node_modules", + "platforms", + "hooks" ], "compileOnSave": false, "angularCompilerOptions": {