@cappitolian/local-ip 0.0.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LocalIp.podspec +17 -0
- package/Package.swift +28 -0
- package/README.md +33 -0
- package/android/build.gradle +58 -0
- package/android/src/main/AndroidManifest.xml +2 -0
- package/android/src/main/java/com/cappitolian/plugins/localip/LocalIpPlugin.java +43 -0
- package/android/src/main/res/.gitkeep +0 -0
- package/dist/docs.json +25 -0
- package/dist/esm/definitions.d.ts +5 -0
- package/dist/esm/definitions.js +2 -0
- package/dist/esm/definitions.js.map +1 -0
- package/dist/esm/index.d.ts +4 -0
- package/dist/esm/index.js +7 -0
- package/dist/esm/index.js.map +1 -0
- package/dist/esm/web.d.ts +7 -0
- package/dist/esm/web.js +7 -0
- package/dist/esm/web.js.map +1 -0
- package/dist/plugin.cjs.js +21 -0
- package/dist/plugin.cjs.js.map +1 -0
- package/dist/plugin.js +24 -0
- package/dist/plugin.js.map +1 -0
- package/ios/Sources/LocalIpPlugin/LocalIpPlugin.swift +39 -0
- package/ios/Tests/LocalIpPluginPluginTests/LocalIpPluginTests.swift +15 -0
- package/package.json +80 -0
package/LocalIp.podspec
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
require 'json'
|
|
2
|
+
|
|
3
|
+
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
|
|
4
|
+
|
|
5
|
+
Pod::Spec.new do |s|
|
|
6
|
+
s.name = 'LocalIp'
|
|
7
|
+
s.version = package['version']
|
|
8
|
+
s.summary = package['description']
|
|
9
|
+
s.license = package['license']
|
|
10
|
+
s.homepage = package['repository']['url']
|
|
11
|
+
s.author = package['author']
|
|
12
|
+
s.source = { :git => package['repository']['url'], :tag => s.version.to_s }
|
|
13
|
+
s.source_files = 'ios/Sources/**/*.{swift,h,m,c,cc,mm,cpp}'
|
|
14
|
+
s.ios.deployment_target = '14.0'
|
|
15
|
+
s.dependency 'Capacitor'
|
|
16
|
+
s.swift_version = '5.1'
|
|
17
|
+
end
|
package/Package.swift
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// swift-tools-version: 5.9
|
|
2
|
+
import PackageDescription
|
|
3
|
+
|
|
4
|
+
let package = Package(
|
|
5
|
+
name: "LocalIp",
|
|
6
|
+
platforms: [.iOS(.v14)],
|
|
7
|
+
products: [
|
|
8
|
+
.library(
|
|
9
|
+
name: "LocalIp",
|
|
10
|
+
targets: ["LocalIpPlugin"])
|
|
11
|
+
],
|
|
12
|
+
dependencies: [
|
|
13
|
+
.package(url: "https://github.com/ionic-team/capacitor-swift-pm.git", from: "7.0.0")
|
|
14
|
+
],
|
|
15
|
+
targets: [
|
|
16
|
+
.target(
|
|
17
|
+
name: "LocalIpPlugin",
|
|
18
|
+
dependencies: [
|
|
19
|
+
.product(name: "Capacitor", package: "capacitor-swift-pm"),
|
|
20
|
+
.product(name: "Cordova", package: "capacitor-swift-pm")
|
|
21
|
+
],
|
|
22
|
+
path: "ios/Sources/LocalIpPlugin"),
|
|
23
|
+
.testTarget(
|
|
24
|
+
name: "LocalIpPluginTests",
|
|
25
|
+
dependencies: ["LocalIpPlugin"],
|
|
26
|
+
path: "ios/Tests/LocalIpPluginTests")
|
|
27
|
+
]
|
|
28
|
+
)
|
package/README.md
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# @cappitolian/local-ip
|
|
2
|
+
|
|
3
|
+
Retrieve local IP address from native device
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install @cappitolian/local-ip
|
|
9
|
+
npx cap sync
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
## API
|
|
13
|
+
|
|
14
|
+
<docgen-index>
|
|
15
|
+
|
|
16
|
+
* [`getLocalIp()`](#getlocalip)
|
|
17
|
+
|
|
18
|
+
</docgen-index>
|
|
19
|
+
|
|
20
|
+
<docgen-api>
|
|
21
|
+
<!--Update the source file JSDoc comments and rerun docgen to update the docs below-->
|
|
22
|
+
|
|
23
|
+
### getLocalIp()
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
getLocalIp() => Promise<{ ip: string; }>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
**Returns:** <code>Promise<{ ip: string; }></code>
|
|
30
|
+
|
|
31
|
+
--------------------
|
|
32
|
+
|
|
33
|
+
</docgen-api>
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
ext {
|
|
2
|
+
junitVersion = project.hasProperty('junitVersion') ? rootProject.ext.junitVersion : '4.13.2'
|
|
3
|
+
androidxAppCompatVersion = project.hasProperty('androidxAppCompatVersion') ? rootProject.ext.androidxAppCompatVersion : '1.7.0'
|
|
4
|
+
androidxJunitVersion = project.hasProperty('androidxJunitVersion') ? rootProject.ext.androidxJunitVersion : '1.2.1'
|
|
5
|
+
androidxEspressoCoreVersion = project.hasProperty('androidxEspressoCoreVersion') ? rootProject.ext.androidxEspressoCoreVersion : '3.6.1'
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
buildscript {
|
|
9
|
+
repositories {
|
|
10
|
+
google()
|
|
11
|
+
mavenCentral()
|
|
12
|
+
}
|
|
13
|
+
dependencies {
|
|
14
|
+
classpath 'com.android.tools.build:gradle:8.7.2'
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
apply plugin: 'com.android.library'
|
|
19
|
+
|
|
20
|
+
android {
|
|
21
|
+
namespace "com.cappitolian.plugins.localip"
|
|
22
|
+
compileSdk project.hasProperty('compileSdkVersion') ? rootProject.ext.compileSdkVersion : 35
|
|
23
|
+
defaultConfig {
|
|
24
|
+
minSdkVersion project.hasProperty('minSdkVersion') ? rootProject.ext.minSdkVersion : 23
|
|
25
|
+
targetSdkVersion project.hasProperty('targetSdkVersion') ? rootProject.ext.targetSdkVersion : 35
|
|
26
|
+
versionCode 1
|
|
27
|
+
versionName "1.0"
|
|
28
|
+
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
|
29
|
+
}
|
|
30
|
+
buildTypes {
|
|
31
|
+
release {
|
|
32
|
+
minifyEnabled false
|
|
33
|
+
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
lintOptions {
|
|
37
|
+
abortOnError false
|
|
38
|
+
}
|
|
39
|
+
compileOptions {
|
|
40
|
+
sourceCompatibility JavaVersion.VERSION_21
|
|
41
|
+
targetCompatibility JavaVersion.VERSION_21
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
repositories {
|
|
46
|
+
google()
|
|
47
|
+
mavenCentral()
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
dependencies {
|
|
52
|
+
implementation fileTree(dir: 'libs', include: ['*.jar'])
|
|
53
|
+
implementation project(':capacitor-android')
|
|
54
|
+
implementation "androidx.appcompat:appcompat:$androidxAppCompatVersion"
|
|
55
|
+
testImplementation "junit:junit:$junitVersion"
|
|
56
|
+
androidTestImplementation "androidx.test.ext:junit:$androidxJunitVersion"
|
|
57
|
+
androidTestImplementation "androidx.test.espresso:espresso-core:$androidxEspressoCoreVersion"
|
|
58
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
package com.cappitolian.plugins.localip;
|
|
2
|
+
|
|
3
|
+
import com.getcapacitor.Plugin;
|
|
4
|
+
import com.getcapacitor.PluginCall;
|
|
5
|
+
import com.getcapacitor.JSObject;
|
|
6
|
+
import com.getcapacitor.PluginMethod;
|
|
7
|
+
import com.getcapacitor.annotation.CapacitorPlugin;
|
|
8
|
+
|
|
9
|
+
import java.net.Inet4Address;
|
|
10
|
+
import java.net.NetworkInterface;
|
|
11
|
+
import java.util.Enumeration;
|
|
12
|
+
|
|
13
|
+
@CapacitorPlugin(name = "LocalIp")
|
|
14
|
+
public class LocalIpPlugin extends Plugin {
|
|
15
|
+
@PluginMethod
|
|
16
|
+
public void getLocalIp(PluginCall call) {
|
|
17
|
+
try {
|
|
18
|
+
String localIp = null;
|
|
19
|
+
Enumeration<NetworkInterface> interfaces = NetworkInterface.getNetworkInterfaces();
|
|
20
|
+
while (interfaces.hasMoreElements()) {
|
|
21
|
+
NetworkInterface intf = interfaces.nextElement();
|
|
22
|
+
Enumeration<java.net.InetAddress> addrs = intf.getInetAddresses();
|
|
23
|
+
while (addrs.hasMoreElements()) {
|
|
24
|
+
java.net.InetAddress addr = addrs.nextElement();
|
|
25
|
+
if (!addr.isLoopbackAddress() && addr instanceof Inet4Address) {
|
|
26
|
+
localIp = addr.getHostAddress();
|
|
27
|
+
break;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
if (localIp != null) break;
|
|
31
|
+
}
|
|
32
|
+
if (localIp != null) {
|
|
33
|
+
JSObject ret = new JSObject();
|
|
34
|
+
ret.put("ip", localIp);
|
|
35
|
+
call.resolve(ret);
|
|
36
|
+
} else {
|
|
37
|
+
call.reject("Local IP address not found");
|
|
38
|
+
}
|
|
39
|
+
} catch (Exception e) {
|
|
40
|
+
call.reject("Error retrieving IP: " + e.getMessage());
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
File without changes
|
package/dist/docs.json
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"api": {
|
|
3
|
+
"name": "LocalIpPlugin",
|
|
4
|
+
"slug": "localipplugin",
|
|
5
|
+
"docs": "",
|
|
6
|
+
"tags": [],
|
|
7
|
+
"methods": [
|
|
8
|
+
{
|
|
9
|
+
"name": "getLocalIp",
|
|
10
|
+
"signature": "() => Promise<{ ip: string; }>",
|
|
11
|
+
"parameters": [],
|
|
12
|
+
"returns": "Promise<{ ip: string; }>",
|
|
13
|
+
"tags": [],
|
|
14
|
+
"docs": "",
|
|
15
|
+
"complexTypes": [],
|
|
16
|
+
"slug": "getlocalip"
|
|
17
|
+
}
|
|
18
|
+
],
|
|
19
|
+
"properties": []
|
|
20
|
+
},
|
|
21
|
+
"interfaces": [],
|
|
22
|
+
"enums": [],
|
|
23
|
+
"typeAliases": [],
|
|
24
|
+
"pluginConfigs": []
|
|
25
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"definitions.js","sourceRoot":"","sources":["../../src/definitions.ts"],"names":[],"mappings":"","sourcesContent":["export interface LocalIpPlugin {\n getLocalIp(): Promise<{ ip: string }>;\n}"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAGjD,MAAM,OAAO,GAAG,cAAc,CAAgB,SAAS,EAAE;IACvD,GAAG,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;CACzD,CAAC,CAAC;AAEH,cAAc,eAAe,CAAC;AAC9B,OAAO,EAAE,OAAO,EAAE,CAAC","sourcesContent":["import { registerPlugin } from '@capacitor/core';\nimport type { LocalIpPlugin } from './definitions';\n\nconst LocalIp = registerPlugin<LocalIpPlugin>('LocalIp', {\n web: () => import('./web').then(m => new m.LocalIpWeb()),\n});\n\nexport * from './definitions';\nexport { LocalIp };"]}
|
package/dist/esm/web.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"web.js","sourceRoot":"","sources":["../../src/web.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAG5C,MAAM,OAAO,UAAW,SAAQ,SAAS;IACvC,KAAK,CAAC,UAAU;QACd,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,0BAA0B;IAC/C,CAAC;CACF","sourcesContent":["import { WebPlugin } from '@capacitor/core';\nimport type { LocalIpPlugin } from './definitions';\n\nexport class LocalIpWeb extends WebPlugin implements LocalIpPlugin {\n async getLocalIp(): Promise<{ ip: string }> {\n return { ip: '' }; // Not implemented for web\n }\n}"]}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var core = require('@capacitor/core');
|
|
4
|
+
|
|
5
|
+
const LocalIp = core.registerPlugin('LocalIp', {
|
|
6
|
+
web: () => Promise.resolve().then(function () { return web; }).then(m => new m.LocalIpWeb()),
|
|
7
|
+
});
|
|
8
|
+
|
|
9
|
+
class LocalIpWeb extends core.WebPlugin {
|
|
10
|
+
async getLocalIp() {
|
|
11
|
+
return { ip: '' }; // Not implemented for web
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
16
|
+
__proto__: null,
|
|
17
|
+
LocalIpWeb: LocalIpWeb
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
exports.LocalIp = LocalIp;
|
|
21
|
+
//# sourceMappingURL=plugin.cjs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.cjs.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst LocalIp = registerPlugin('LocalIp', {\n web: () => import('./web').then(m => new m.LocalIpWeb()),\n});\nexport * from './definitions';\nexport { LocalIp };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class LocalIpWeb extends WebPlugin {\n async getLocalIp() {\n return { ip: '' }; // Not implemented for web\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;;AACK,MAAC,OAAO,GAAGA,mBAAc,CAAC,SAAS,EAAE;AAC1C,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;AAC5D,CAAC;;ACFM,MAAM,UAAU,SAASC,cAAS,CAAC;AAC1C,IAAI,MAAM,UAAU,GAAG;AACvB,QAAQ,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC1B;AACA;;;;;;;;;"}
|
package/dist/plugin.js
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
var capacitorLocalIpPlugin = (function (exports, core) {
|
|
2
|
+
'use strict';
|
|
3
|
+
|
|
4
|
+
const LocalIp = core.registerPlugin('LocalIp', {
|
|
5
|
+
web: () => Promise.resolve().then(function () { return web; }).then(m => new m.LocalIpWeb()),
|
|
6
|
+
});
|
|
7
|
+
|
|
8
|
+
class LocalIpWeb extends core.WebPlugin {
|
|
9
|
+
async getLocalIp() {
|
|
10
|
+
return { ip: '' }; // Not implemented for web
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
var web = /*#__PURE__*/Object.freeze({
|
|
15
|
+
__proto__: null,
|
|
16
|
+
LocalIpWeb: LocalIpWeb
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
exports.LocalIp = LocalIp;
|
|
20
|
+
|
|
21
|
+
return exports;
|
|
22
|
+
|
|
23
|
+
})({}, capacitorExports);
|
|
24
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sources":["esm/index.js","esm/web.js"],"sourcesContent":["import { registerPlugin } from '@capacitor/core';\nconst LocalIp = registerPlugin('LocalIp', {\n web: () => import('./web').then(m => new m.LocalIpWeb()),\n});\nexport * from './definitions';\nexport { LocalIp };\n//# sourceMappingURL=index.js.map","import { WebPlugin } from '@capacitor/core';\nexport class LocalIpWeb extends WebPlugin {\n async getLocalIp() {\n return { ip: '' }; // Not implemented for web\n }\n}\n//# sourceMappingURL=web.js.map"],"names":["registerPlugin","WebPlugin"],"mappings":";;;AACK,UAAC,OAAO,GAAGA,mBAAc,CAAC,SAAS,EAAE;IAC1C,IAAI,GAAG,EAAE,MAAM,mDAAe,CAAC,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,UAAU,EAAE,CAAC;IAC5D,CAAC;;ICFM,MAAM,UAAU,SAASC,cAAS,CAAC;IAC1C,IAAI,MAAM,UAAU,GAAG;IACvB,QAAQ,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;IAC1B;IACA;;;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import Foundation
|
|
2
|
+
import Capacitor
|
|
3
|
+
|
|
4
|
+
@objc(LocalIpPlugin)
|
|
5
|
+
public class LocalIpPlugin: CAPPlugin {
|
|
6
|
+
@objc func getLocalIp(_ call: CAPPluginCall) {
|
|
7
|
+
var address: String?
|
|
8
|
+
|
|
9
|
+
var ifaddr: UnsafeMutablePointer<ifaddrs>?
|
|
10
|
+
if getifaddrs(&ifaddr) == 0 {
|
|
11
|
+
var ptr = ifaddr
|
|
12
|
+
while ptr != nil {
|
|
13
|
+
defer { ptr = ptr?.pointee.ifa_next }
|
|
14
|
+
guard let interface = ptr?.pointee else { continue }
|
|
15
|
+
let addrFamily = interface.ifa_addr.pointee.sa_family
|
|
16
|
+
if addrFamily == UInt8(AF_INET) {
|
|
17
|
+
if let name = String(validatingUTF8: interface.ifa_name),
|
|
18
|
+
name == "en0" { // WiFi interface
|
|
19
|
+
var hostname = [CChar](repeating: 0, count: Int(NI_MAXHOST))
|
|
20
|
+
getnameinfo(interface.ifa_addr, socklen_t(interface.ifa_addr.pointee.sa_len),
|
|
21
|
+
&hostname, socklen_t(hostname.count),
|
|
22
|
+
nil, socklen_t(0), NI_NUMERICHOST)
|
|
23
|
+
address = String(cString: hostname)
|
|
24
|
+
break
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
freeifaddrs(ifaddr)
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if let ip = address {
|
|
32
|
+
call.resolve([
|
|
33
|
+
"ip": ip
|
|
34
|
+
])
|
|
35
|
+
} else {
|
|
36
|
+
call.reject("Unable to determine local IP address")
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import XCTest
|
|
2
|
+
@testable import LocalIpPlugin
|
|
3
|
+
|
|
4
|
+
class LocalIpPluginTests: XCTestCase {
|
|
5
|
+
func testEcho() {
|
|
6
|
+
// This is an example of a functional test case for a plugin.
|
|
7
|
+
// Use XCTAssert and related functions to verify your tests produce the correct results.
|
|
8
|
+
|
|
9
|
+
let implementation = LocalIpPlugin()
|
|
10
|
+
let value = "Hello, World!"
|
|
11
|
+
let result = implementation.echo(value)
|
|
12
|
+
|
|
13
|
+
XCTAssertEqual(value, result)
|
|
14
|
+
}
|
|
15
|
+
}
|
package/package.json
ADDED
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@cappitolian/local-ip",
|
|
3
|
+
"version": "0.0.9",
|
|
4
|
+
"description": "Retrieve local IP address from native device",
|
|
5
|
+
"main": "dist/plugin.cjs.js",
|
|
6
|
+
"module": "dist/esm/index.js",
|
|
7
|
+
"types": "dist/esm/index.d.ts",
|
|
8
|
+
"unpkg": "dist/plugin.js",
|
|
9
|
+
"files": [
|
|
10
|
+
"android/src/main/",
|
|
11
|
+
"android/build.gradle",
|
|
12
|
+
"dist/",
|
|
13
|
+
"ios/Sources",
|
|
14
|
+
"ios/Tests",
|
|
15
|
+
"Package.swift",
|
|
16
|
+
"LocalIp.podspec"
|
|
17
|
+
],
|
|
18
|
+
"author": "Cappitolian",
|
|
19
|
+
"license": "MIT",
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/alessandrycruz1987/local-ip.git"
|
|
23
|
+
},
|
|
24
|
+
"bugs": {
|
|
25
|
+
"url": "https://github.com/alessandrycruz1987/local-ip/issues"
|
|
26
|
+
},
|
|
27
|
+
"keywords": [
|
|
28
|
+
"capacitor",
|
|
29
|
+
"plugin",
|
|
30
|
+
"native"
|
|
31
|
+
],
|
|
32
|
+
"scripts": {
|
|
33
|
+
"verify": "npm run verify:ios && npm run verify:android && npm run verify:web",
|
|
34
|
+
"verify:ios": "xcodebuild -scheme LocalIp -destination generic/platform=iOS",
|
|
35
|
+
"verify:android": "cd android && ./gradlew clean build test && cd ..",
|
|
36
|
+
"verify:web": "npm run build",
|
|
37
|
+
"lint": "npm run eslint && npm run prettier -- --check && npm run swiftlint -- lint",
|
|
38
|
+
"fmt": "npm run eslint -- --fix && npm run prettier -- --write && npm run swiftlint -- --fix --format",
|
|
39
|
+
"eslint": "eslint . --ext ts",
|
|
40
|
+
"prettier": "prettier \"**/*.{css,html,ts,js,java}\" --plugin=prettier-plugin-java",
|
|
41
|
+
"swiftlint": "node-swiftlint",
|
|
42
|
+
"docgen": "docgen --api LocalIpPlugin --output-readme README.md --output-json dist/docs.json",
|
|
43
|
+
"build": "npm run clean && npm run docgen && tsc && rollup -c rollup.config.mjs",
|
|
44
|
+
"clean": "rimraf ./dist",
|
|
45
|
+
"watch": "tsc --watch",
|
|
46
|
+
"prepublishOnly": "npm run build"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@capacitor/android": "^7.0.0",
|
|
50
|
+
"@capacitor/core": "^7.0.0",
|
|
51
|
+
"@capacitor/docgen": "^0.3.0",
|
|
52
|
+
"@capacitor/ios": "^7.0.0",
|
|
53
|
+
"@ionic/eslint-config": "^0.4.0",
|
|
54
|
+
"@ionic/prettier-config": "^4.0.0",
|
|
55
|
+
"@ionic/swiftlint-config": "^2.0.0",
|
|
56
|
+
"eslint": "^8.57.0",
|
|
57
|
+
"prettier": "^3.4.2",
|
|
58
|
+
"prettier-plugin-java": "^2.6.6",
|
|
59
|
+
"rimraf": "^6.0.1",
|
|
60
|
+
"rollup": "^4.30.1",
|
|
61
|
+
"swiftlint": "^2.0.0",
|
|
62
|
+
"typescript": "~4.1.5"
|
|
63
|
+
},
|
|
64
|
+
"peerDependencies": {
|
|
65
|
+
"@capacitor/core": ">=7.0.0"
|
|
66
|
+
},
|
|
67
|
+
"prettier": "@ionic/prettier-config",
|
|
68
|
+
"swiftlint": "@ionic/swiftlint-config",
|
|
69
|
+
"eslintConfig": {
|
|
70
|
+
"extends": "@ionic/eslint-config/recommended"
|
|
71
|
+
},
|
|
72
|
+
"capacitor": {
|
|
73
|
+
"ios": {
|
|
74
|
+
"src": "ios"
|
|
75
|
+
},
|
|
76
|
+
"android": {
|
|
77
|
+
"src": "android"
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|