@gandalan/weblibs 1.0.7 → 1.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/.eslintrc.cjs +28 -28
- package/.vscode/settings.json +5 -0
- package/api/IDAS.js +74 -85
- package/api/RESTClient.js +33 -31
- package/components/AddButton.svelte +2 -2
- package/components/DataGrid.svelte +9 -9
- package/components/Datepicker.svelte +14 -14
- package/components/GanTable.svelte +26 -26
- package/components/Inputbox.svelte +40 -40
- package/components/RemoveButton.svelte +3 -3
- package/components/SaveButton.svelte +3 -3
- package/index.js +10 -10
- package/package.json +22 -21
package/.eslintrc.cjs
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
module.exports = {
|
|
2
2
|
root: true,
|
|
3
|
-
extends: [
|
|
4
|
-
plugins: [
|
|
5
|
-
overrides: [{ files: [
|
|
6
|
-
parser:
|
|
3
|
+
extends: ["eslint:recommended"],
|
|
4
|
+
plugins: ["svelte3"],
|
|
5
|
+
overrides: [{ files: ["*.svelte"], processor: "svelte3/svelte3" }],
|
|
6
|
+
parser: "@babel/eslint-parser",
|
|
7
7
|
parserOptions: {
|
|
8
8
|
requireConfigFile: false,
|
|
9
|
-
sourceType:
|
|
9
|
+
sourceType: "module",
|
|
10
10
|
ecmaVersion: 2020,
|
|
11
11
|
},
|
|
12
12
|
env: {
|
|
@@ -16,28 +16,28 @@ module.exports = {
|
|
|
16
16
|
},
|
|
17
17
|
rules: {
|
|
18
18
|
//indent: ['error', 4],
|
|
19
|
-
quotes: [
|
|
20
|
-
semi: [
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
19
|
+
quotes: ["warn", "double"],
|
|
20
|
+
semi: ["off", "never"],
|
|
21
|
+
"no-multi-spaces": ["error", { ignoreEOLComments: true }],
|
|
22
|
+
"curly": "error",
|
|
23
|
+
"comma-spacing": "error",
|
|
24
|
+
"brace-style": "error",
|
|
25
|
+
"no-var": "error",
|
|
26
|
+
"key-spacing": "warn",
|
|
27
|
+
"keyword-spacing": "warn",
|
|
28
|
+
"space-infix-ops": "warn",
|
|
29
|
+
"arrow-spacing": "warn",
|
|
30
|
+
"no-trailing-spaces": "warn",
|
|
31
|
+
"space-before-blocks": "warn",
|
|
32
|
+
"no-console": "warn",
|
|
33
|
+
"no-extra-boolean-cast": "off",
|
|
34
|
+
"no-multiple-empty-lines": ["warn", { "max": 1, "maxBOF": 0 }],
|
|
35
|
+
"lines-between-class-members": ["warn", "always", { exceptAfterSingleLine: true }],
|
|
36
|
+
"no-unneeded-ternary": "error",
|
|
37
|
+
"no-else-return": ["error", { "allowElseIf": false }],
|
|
38
|
+
"array-bracket-newline": ["error", "consistent"],
|
|
39
|
+
"eol-last": ["error", "always"],
|
|
40
|
+
"prefer-template": "error",
|
|
41
|
+
"comma-dangle": ["warn", "always-multiline"],
|
|
42
42
|
},
|
|
43
43
|
};
|
package/api/IDAS.js
CHANGED
|
@@ -1,92 +1,81 @@
|
|
|
1
|
-
import { RESTClient } from
|
|
2
|
-
import jwt_decode from
|
|
1
|
+
import { RESTClient } from "./RESTClient";
|
|
2
|
+
import jwt_decode from "jwt-decode";
|
|
3
3
|
|
|
4
|
-
let appToken = localStorage.getItem(
|
|
5
|
-
let authToken = localStorage.getItem(
|
|
6
|
-
let apiBaseUrl = localStorage.getItem(
|
|
7
|
-
let authJwtCallbackPath = localStorage.getItem(
|
|
4
|
+
let appToken = localStorage.getItem("IDAS_AppToken") || "66B70E0B-F7C4-4829-B12A-18AD309E3970";
|
|
5
|
+
let authToken = localStorage.getItem("IDAS_AuthToken");
|
|
6
|
+
let apiBaseUrl = localStorage.getItem("IDAS_ApiBaseUrl") || "https://api.dev.idas-cloudservices.net/api/";
|
|
7
|
+
let authJwtCallbackPath = localStorage.getItem("IDAS_AuthJwtCallbackPath") || "";
|
|
8
8
|
let authJwtToken;
|
|
9
9
|
|
|
10
10
|
export let IDASFactory = {
|
|
11
|
-
async create(
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
idas
|
|
34
|
-
|
|
35
|
-
return Promise.reject("redirect is required");
|
|
36
|
-
}
|
|
37
|
-
if (urlParams.has('t')) { // it is authToken
|
|
38
|
-
localStorage.setItem('IDAS_AuthJwtRefreshToken', urlParams.get("t"));
|
|
39
|
-
var refreshClient = new RESTClient(apiBaseUrl, '');
|
|
40
|
-
await refreshClient.refreshToken()
|
|
41
|
-
.then(() => {
|
|
42
|
-
window.location.search = "";
|
|
43
|
-
});
|
|
44
|
-
return Promise.reject("redirect is required");
|
|
11
|
+
async create(settings = {
|
|
12
|
+
appToken : localStorage.getItem("IDAS_AppToken"),
|
|
13
|
+
mandantGuid : localStorage.getItem("IDAS_MandantGuid"),
|
|
14
|
+
apiBaseurl : localStorage.getItem("IDAS_ApiBaseUrl"),
|
|
15
|
+
jwtRefreshToken : localStorage.getItem("IDAS_AuthJwtRefreshToken"),
|
|
16
|
+
jwtCallbackPath : localStorage.getItem("IDAS_AuthJwtCallbackPath")
|
|
17
|
+
})
|
|
18
|
+
{
|
|
19
|
+
apiBaseUrl = settings.apiBaseurl;
|
|
20
|
+
let idas = undefined;
|
|
21
|
+
|
|
22
|
+
if (settings.jwtToken) // it is JWT
|
|
23
|
+
{
|
|
24
|
+
console.log("init: with JWT token");
|
|
25
|
+
idas = new IDAS();
|
|
26
|
+
idas.initWithJWTtoken(settings.jwtToken);
|
|
27
|
+
}
|
|
28
|
+
else if (settings.jwtRefreshToken) // it is authToken
|
|
29
|
+
{
|
|
30
|
+
console.log("init: with refresh/classic token");
|
|
31
|
+
let refreshClient = new RESTClient(apiBaseUrl, "");
|
|
32
|
+
await refreshClient.refreshToken();
|
|
33
|
+
idas = new IDAS();
|
|
34
|
+
await idas.authenticateWithJwt(authJwtCallbackPath);
|
|
45
35
|
}
|
|
36
|
+
|
|
37
|
+
return idas;
|
|
46
38
|
}
|
|
47
39
|
}
|
|
48
40
|
|
|
49
|
-
class IDAS
|
|
41
|
+
class IDAS
|
|
42
|
+
{
|
|
50
43
|
restClient = undefined;
|
|
51
44
|
|
|
52
|
-
|
|
45
|
+
initWithJWTtoken(jwtToken)
|
|
46
|
+
{
|
|
53
47
|
authJwtToken = jwtToken;
|
|
54
|
-
mandant && localStorage.setItem('IDAS_MandantGuid', mandant);
|
|
55
48
|
this.restClient = new RESTClient(apiBaseUrl, jwtToken, true);
|
|
56
49
|
}
|
|
57
50
|
|
|
58
|
-
async authenticateWithJwt(authPath)
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
new IDAS().authenticateWithJwt(authPath);
|
|
66
|
-
});
|
|
67
|
-
|
|
68
|
-
// still not valid JWT -> authenticate
|
|
69
|
-
if (!refreshClient.token) {
|
|
70
|
-
localStorage.setItem('IDAS_AuthJwtCallbackPath', authPath || '');
|
|
71
|
-
const authEndpoint = (new URL(window.location.href).origin) + authPath;
|
|
72
|
-
let authUrlCallback = `${authEndpoint}?r=%target%&j=%jwt%&m=%mandant%`;
|
|
73
|
-
authUrlCallback = authUrlCallback.replace('%target%', encodeURIComponent(window.location.href));
|
|
74
|
-
|
|
75
|
-
const url = new URL(apiBaseUrl);
|
|
76
|
-
url.pathname = "/Session";
|
|
77
|
-
url.search = `?a=${appToken}&r=${encodeURIComponent(authUrlCallback)}`;
|
|
78
|
-
let jwtUrl = url.toString();
|
|
79
|
-
|
|
80
|
-
window.location = jwtUrl;
|
|
81
|
-
reject('not authenticated yet');
|
|
82
|
-
} else {
|
|
83
|
-
this.authorizeWithJwt(refreshClient.token);
|
|
84
|
-
resolve(this);
|
|
85
|
-
}
|
|
51
|
+
async authenticateWithJwt(authPath)
|
|
52
|
+
{
|
|
53
|
+
let refreshClient = new RESTClient(apiBaseUrl, "");
|
|
54
|
+
await refreshClient.checkRefreshToken(authJwtToken, () => {
|
|
55
|
+
authJwtToken = undefined;
|
|
56
|
+
// ... so repeat authenticate (should lead to /Session login page)
|
|
57
|
+
new IDAS().authenticateWithJwt(authPath);
|
|
86
58
|
});
|
|
59
|
+
|
|
60
|
+
// still not valid JWT -> authenticate
|
|
61
|
+
if (!refreshClient.token) {
|
|
62
|
+
localStorage.setItem("IDAS_AuthJwtCallbackPath", authPath || "");
|
|
63
|
+
const authEndpoint = (new URL(window.location.href).origin) + authPath;
|
|
64
|
+
let authUrlCallback = `${authEndpoint}?r=%target%&j=%jwt%&m=%mandant%`;
|
|
65
|
+
authUrlCallback = authUrlCallback.replace("%target%", encodeURIComponent(window.location.href));
|
|
66
|
+
|
|
67
|
+
const url = new URL(apiBaseUrl);
|
|
68
|
+
url.pathname = "/Session";
|
|
69
|
+
url.search = `?a=${appToken}&r=${encodeURIComponent(authUrlCallback)}`;
|
|
70
|
+
let jwtUrl = url.toString();
|
|
71
|
+
|
|
72
|
+
window.location = jwtUrl;
|
|
73
|
+
} else {
|
|
74
|
+
this.initWithJWTtoken(refreshClient.token);
|
|
75
|
+
}
|
|
87
76
|
}
|
|
88
77
|
|
|
89
|
-
mandantGuid = localStorage.getItem(
|
|
78
|
+
mandantGuid = localStorage.getItem("IDAS_MandantGuid");
|
|
90
79
|
|
|
91
80
|
claims = {
|
|
92
81
|
hasClaim(key) {
|
|
@@ -98,8 +87,8 @@ class IDAS {
|
|
|
98
87
|
let decoded = jwt_decode(authJwtToken);
|
|
99
88
|
let val = decoded[key];
|
|
100
89
|
return val !== undefined;
|
|
101
|
-
|
|
102
|
-
catch {}
|
|
90
|
+
// eslint-disable-next-line no-empty
|
|
91
|
+
} catch {}
|
|
103
92
|
|
|
104
93
|
return false;
|
|
105
94
|
},
|
|
@@ -112,30 +101,30 @@ class IDAS {
|
|
|
112
101
|
try {
|
|
113
102
|
let decoded = jwt_decode(authJwtToken);
|
|
114
103
|
return decoded[key];
|
|
115
|
-
|
|
116
|
-
catch {}
|
|
104
|
+
// eslint-disable-next-line no-empty
|
|
105
|
+
} catch {}
|
|
117
106
|
|
|
118
107
|
return;
|
|
119
|
-
}
|
|
108
|
+
},
|
|
120
109
|
}
|
|
121
110
|
|
|
122
111
|
auth = {
|
|
123
112
|
_self: this,
|
|
124
113
|
async getCurrentAuthToken() {
|
|
125
|
-
return await this._self.restClient.put(
|
|
114
|
+
return await this._self.restClient.put("/Login/Update/", { Token: authToken })
|
|
126
115
|
},
|
|
127
116
|
};
|
|
128
117
|
|
|
129
118
|
mandanten = {
|
|
130
119
|
_self: this,
|
|
131
120
|
async getAll() {
|
|
132
|
-
return await this._self.restClient.get(
|
|
121
|
+
return await this._self.restClient.get("/Mandanten");
|
|
133
122
|
},
|
|
134
123
|
async get(guid) {
|
|
135
124
|
return await this._self.restClient.get(`/Mandanten/${guid}`);
|
|
136
125
|
},
|
|
137
126
|
async save(m) {
|
|
138
|
-
await this._self.restClient.put(
|
|
127
|
+
await this._self.restClient.put("/Mandanten", m);
|
|
139
128
|
},
|
|
140
129
|
};
|
|
141
130
|
|
|
@@ -148,20 +137,20 @@ class IDAS {
|
|
|
148
137
|
return await this._self.restClient.get(`/Benutzer/${guid}`);
|
|
149
138
|
},
|
|
150
139
|
async save(m) {
|
|
151
|
-
await this._self.restClient.put(
|
|
140
|
+
await this._self.restClient.put("/Benutzer", m);
|
|
152
141
|
},
|
|
153
142
|
};
|
|
154
143
|
|
|
155
144
|
feedback = {
|
|
156
145
|
_self: this,
|
|
157
146
|
async getAll() {
|
|
158
|
-
return await this._self.restClient.get(
|
|
147
|
+
return await this._self.restClient.get("/Feedback/");
|
|
159
148
|
},
|
|
160
149
|
async get(guid) {
|
|
161
150
|
return await this._self.restClient.get(`/Feedback/${guid}`);
|
|
162
151
|
},
|
|
163
152
|
async save(m) {
|
|
164
|
-
await this._self.restClient.put(
|
|
153
|
+
await this._self.restClient.put("/Feedback", m);
|
|
165
154
|
},
|
|
166
155
|
async comment(guid, commentData) {
|
|
167
156
|
await this._self.restClient.put(`/FeedbackKommentar/${guid}`, commentData);
|
|
@@ -177,10 +166,10 @@ class IDAS {
|
|
|
177
166
|
rollen = {
|
|
178
167
|
_self: this,
|
|
179
168
|
async getAll() {
|
|
180
|
-
return await this._self.restClient.get(
|
|
169
|
+
return await this._self.restClient.get("/Rollen");
|
|
181
170
|
},
|
|
182
171
|
async save(m) {
|
|
183
|
-
await this._self.restClient.put(
|
|
172
|
+
await this._self.restClient.put("/Rollen", m);
|
|
184
173
|
},
|
|
185
174
|
};
|
|
186
175
|
|
package/api/RESTClient.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import axios from
|
|
2
|
-
import jwt_decode from
|
|
1
|
+
import axios from "axios";
|
|
2
|
+
import jwt_decode from "jwt-decode";
|
|
3
3
|
|
|
4
4
|
/*export let AppToken = "66B70E0B-F7C4-4829-B12A-18AD309E3970";
|
|
5
5
|
export let AuthToken = localStorage.getItem("AuthToken");
|
|
@@ -8,21 +8,21 @@ export let ApiBaseUrl = localStorage.getItem("ApiBaseUrl") || "https://api.dev.i
|
|
|
8
8
|
export let SiteBaseUrl = window.location.origin;
|
|
9
9
|
export let SSOAuthUrl = ApiBaseUrl.replace("/api", '') + "/SSO?a=" + AppToken + "&r=%target%?t=%token%%26m=%mandant%";*/
|
|
10
10
|
|
|
11
|
-
let authJwtRefreshToken = localStorage.getItem(
|
|
11
|
+
let authJwtRefreshToken = localStorage.getItem("IDAS_AuthJwtRefreshToken");
|
|
12
12
|
|
|
13
13
|
export class RESTClient {
|
|
14
|
-
lastError =
|
|
15
|
-
token =
|
|
16
|
-
baseurl =
|
|
14
|
+
lastError = "";
|
|
15
|
+
token = "";
|
|
16
|
+
baseurl = "";
|
|
17
17
|
|
|
18
18
|
constructor(url, token, isJWT = false) {
|
|
19
|
-
this.lastError =
|
|
19
|
+
this.lastError = "";
|
|
20
20
|
this.baseurl = url;
|
|
21
21
|
this.token = token;
|
|
22
22
|
this.isJWT = isJWT;
|
|
23
23
|
|
|
24
24
|
if (this.token && !isJWT) {
|
|
25
|
-
axios.defaults.headers.common[
|
|
25
|
+
axios.defaults.headers.common["X-Gdl-AuthToken"] = this.token;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
28
|
if (this.token && isJWT) {
|
|
@@ -36,9 +36,9 @@ export class RESTClient {
|
|
|
36
36
|
}
|
|
37
37
|
|
|
38
38
|
async checkAuthorizationHeader(config) {
|
|
39
|
-
let authHeader = config.headers[
|
|
40
|
-
if (authHeader && authHeader.toString().startsWith(
|
|
41
|
-
let parts = authHeader.toString().split(
|
|
39
|
+
let authHeader = config.headers["Authorization"];
|
|
40
|
+
if (authHeader && authHeader.toString().startsWith("Bearer ")) {
|
|
41
|
+
let parts = authHeader.toString().split(" ");
|
|
42
42
|
let jwt = parts[1];
|
|
43
43
|
if (!this.isJwtTokenExpired(jwt)) {
|
|
44
44
|
// JWT token is not expired
|
|
@@ -56,11 +56,12 @@ export class RESTClient {
|
|
|
56
56
|
// LoginJwt/Refresh failed, which means "refresh token" is expired/invalid...
|
|
57
57
|
if (message.indexOf("401") != -1 || message.indexOf("403") != -1) {
|
|
58
58
|
authJwtRefreshToken = undefined;
|
|
59
|
-
localStorage.removeItem(
|
|
59
|
+
localStorage.removeItem("IDAS_AuthJwtRefreshToken");
|
|
60
60
|
// ... so repeat authenticate
|
|
61
61
|
authCallback && authCallback();
|
|
62
62
|
}
|
|
63
63
|
};
|
|
64
|
+
|
|
64
65
|
// fetch fresh JWT
|
|
65
66
|
await this.refreshToken();
|
|
66
67
|
return;
|
|
@@ -86,8 +87,8 @@ export class RESTClient {
|
|
|
86
87
|
|
|
87
88
|
updateJwtToken(jwt) {
|
|
88
89
|
let decoded = jwt_decode(jwt);
|
|
89
|
-
let refreshToken = decoded[
|
|
90
|
-
localStorage.setItem(
|
|
90
|
+
let refreshToken = decoded["refreshToken"] || "";
|
|
91
|
+
localStorage.setItem("IDAS_AuthJwtRefreshToken", refreshToken);
|
|
91
92
|
authJwtRefreshToken = refreshToken;
|
|
92
93
|
this.token = jwt;
|
|
93
94
|
this.isJWT = true;
|
|
@@ -95,7 +96,7 @@ export class RESTClient {
|
|
|
95
96
|
|
|
96
97
|
async refreshToken() {
|
|
97
98
|
try {
|
|
98
|
-
await axios.put(this.baseurl
|
|
99
|
+
await axios.put(`${this.baseurl}/LoginJwt/Refresh`, { token: localStorage.getItem("IDAS_AuthJwtRefreshToken") })
|
|
99
100
|
.then(resp => {
|
|
100
101
|
this.updateJwtToken(resp.data);
|
|
101
102
|
});
|
|
@@ -110,32 +111,33 @@ export class RESTClient {
|
|
|
110
111
|
|
|
111
112
|
getUrlOptions(noJWT = false) {
|
|
112
113
|
let options = { withCredentials: false }
|
|
113
|
-
if (this.isJWT && !noJWT)
|
|
114
|
+
if (this.isJWT && !noJWT) {
|
|
114
115
|
options.headers = { Authorization: `Bearer ${this.token}` }
|
|
116
|
+
}
|
|
117
|
+
|
|
115
118
|
return options
|
|
116
119
|
}
|
|
117
120
|
|
|
118
121
|
async get(uri, noJWT = false) {
|
|
119
122
|
try {
|
|
120
123
|
const response = await axios.get(this.baseurl + uri, this.getUrlOptions(noJWT));
|
|
121
|
-
this.lastError =
|
|
124
|
+
this.lastError = "";
|
|
122
125
|
return response.data;
|
|
123
126
|
} catch (error) {
|
|
124
127
|
this.handleError(error);
|
|
125
128
|
}
|
|
126
129
|
}
|
|
127
130
|
|
|
128
|
-
|
|
129
131
|
async getFile(uri) {
|
|
130
132
|
try {
|
|
131
|
-
const response = await axios.get(this.baseurl + uri, { responseType:
|
|
132
|
-
let fileName =
|
|
133
|
-
if (response.headers[
|
|
134
|
-
fileName = response.headers[
|
|
135
|
-
fileName = fileName.replace(
|
|
133
|
+
const response = await axios.get(this.baseurl + uri, { responseType: "blob" });
|
|
134
|
+
let fileName = "1000.pdf";
|
|
135
|
+
if (response.headers["content-disposition"]) {
|
|
136
|
+
fileName = response.headers["content-disposition"].split(";")[1];
|
|
137
|
+
fileName = fileName.replace("filename=", "").trim();
|
|
136
138
|
}
|
|
137
|
-
this.lastError =
|
|
138
|
-
return { data: response.data, filename: fileName, contentType:
|
|
139
|
+
this.lastError = "";
|
|
140
|
+
return { data: response.data, filename: fileName, contentType: "application/pdf" };
|
|
139
141
|
} catch (error) {
|
|
140
142
|
this.handleError(error);
|
|
141
143
|
}
|
|
@@ -145,7 +147,7 @@ export class RESTClient {
|
|
|
145
147
|
let response = {};
|
|
146
148
|
try {
|
|
147
149
|
response = await axios.get(this.baseurl + uri, this.getUrlOptions(noJWT))
|
|
148
|
-
this.lastError =
|
|
150
|
+
this.lastError = "";
|
|
149
151
|
} catch (error) {
|
|
150
152
|
this.handleError(error);
|
|
151
153
|
}
|
|
@@ -155,7 +157,7 @@ export class RESTClient {
|
|
|
155
157
|
async post(uri, formData, noJWT = false) {
|
|
156
158
|
try {
|
|
157
159
|
const response = await axios.post(this.baseurl + uri, formData, this.getUrlOptions(noJWT));
|
|
158
|
-
this.lastError =
|
|
160
|
+
this.lastError = "";
|
|
159
161
|
return response;
|
|
160
162
|
} catch (error) {
|
|
161
163
|
this.handleError(error);
|
|
@@ -165,7 +167,7 @@ export class RESTClient {
|
|
|
165
167
|
async put(uri, formData, noJWT = false) {
|
|
166
168
|
try {
|
|
167
169
|
const response = await axios.put(this.baseurl + uri, formData, this.getUrlOptions(noJWT));
|
|
168
|
-
this.lastError =
|
|
170
|
+
this.lastError = "";
|
|
169
171
|
return response;
|
|
170
172
|
} catch (error) {
|
|
171
173
|
this.handleError(error);
|
|
@@ -175,7 +177,7 @@ export class RESTClient {
|
|
|
175
177
|
async delete(uri, noJWT = false) {
|
|
176
178
|
try {
|
|
177
179
|
const response = await axios.delete(this.baseurl + uri, this.getUrlOptions(noJWT));
|
|
178
|
-
this.lastError =
|
|
180
|
+
this.lastError = "";
|
|
179
181
|
return response;
|
|
180
182
|
} catch (error) {
|
|
181
183
|
this.handleError(error);
|
|
@@ -186,9 +188,9 @@ export class RESTClient {
|
|
|
186
188
|
onError = (error, message) => { };
|
|
187
189
|
|
|
188
190
|
handleError(error) {
|
|
189
|
-
let message = error ? error.message :
|
|
191
|
+
let message = error ? error.message : "?";
|
|
190
192
|
// eslint-disable-next-line no-console
|
|
191
|
-
console.
|
|
193
|
+
console.error(`API Error: ${message}`);
|
|
192
194
|
this.lastError = message;
|
|
193
195
|
this.onError(error, message);
|
|
194
196
|
throw error;
|
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import { createEventDispatcher } from
|
|
2
|
+
import { createEventDispatcher } from "svelte";
|
|
3
3
|
const dispatch = createEventDispatcher();
|
|
4
|
-
import { Icon } from
|
|
4
|
+
import { Icon } from "svelte-chota";
|
|
5
5
|
|
|
6
6
|
export let items = [];
|
|
7
7
|
export let selectedItem = {};
|
|
8
8
|
export let standardItem;
|
|
9
|
-
export let displayProperty =
|
|
10
|
-
export let header =
|
|
11
|
-
export let key =
|
|
9
|
+
export let displayProperty = "";
|
|
10
|
+
export let header = "Überschrift";
|
|
11
|
+
export let key = "Guid";
|
|
12
12
|
export let marker = null;
|
|
13
|
-
export let markerField =
|
|
13
|
+
export let markerField = "";
|
|
14
14
|
|
|
15
15
|
function setCurrent(item) {
|
|
16
16
|
selectedItem = item;
|
|
17
|
-
dispatch(
|
|
17
|
+
dispatch("selectedItemChanged", item);
|
|
18
18
|
}
|
|
19
19
|
</script>
|
|
20
20
|
|
|
@@ -24,10 +24,10 @@
|
|
|
24
24
|
</div>
|
|
25
25
|
<div>
|
|
26
26
|
{#if standardItem}
|
|
27
|
-
<div class="dgrow" on:click={setCurrent(standardItem)} class:selected="{selectedItem[key] === standardItem[key]}">{standardItem[displayProperty]}</div>
|
|
27
|
+
<div class="dgrow" on:click={setCurrent(standardItem)} on:keypress={e => e.key === "Enter" && setCurrent(standardItem)} class:selected="{selectedItem[key] === standardItem[key]}">{standardItem[displayProperty]}</div>
|
|
28
28
|
{/if}
|
|
29
29
|
{#each items as d}
|
|
30
|
-
<div class="dgrow" on:click={setCurrent(d)} class:selected="{selectedItem[key] === d[key]}">
|
|
30
|
+
<div class="dgrow" on:click={setCurrent(d)} on:keypress={e => e.key === "Enter" && setCurrent(d)} class:selected="{selectedItem[key] === d[key]}">
|
|
31
31
|
{d[displayProperty]}
|
|
32
32
|
{#if marker && markerField && d[markerField] === true}
|
|
33
33
|
<Icon src={marker} />
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
export let Height = 30;
|
|
3
|
-
export let Placeholder =
|
|
4
|
-
export let Value =
|
|
3
|
+
export let Placeholder = "";
|
|
4
|
+
export let Value = "";
|
|
5
5
|
export let Width = 120;
|
|
6
6
|
|
|
7
|
-
const backgroundNormal =
|
|
8
|
-
const backgroundFalschesDatum =
|
|
7
|
+
const backgroundNormal = "#FFFFFF";
|
|
8
|
+
const backgroundFalschesDatum = "#FF0000";
|
|
9
9
|
|
|
10
|
-
let monate = [
|
|
11
|
-
let tageKurz = [
|
|
10
|
+
let monate = ["Januar", "Februar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember"];
|
|
11
|
+
let tageKurz = ["Mo", "Di", "Mi", "Do", "Fr", "Sa", "So"];
|
|
12
12
|
|
|
13
13
|
let buttonStyle, divStyle, inputStyle;
|
|
14
14
|
let background = backgroundNormal;
|
|
@@ -19,10 +19,10 @@
|
|
|
19
19
|
let inputHeight = Height - 2;
|
|
20
20
|
let inputWidth = Width - Height - 10;
|
|
21
21
|
|
|
22
|
-
let allowedNumbers = [
|
|
22
|
+
let allowedNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"];
|
|
23
23
|
let allowedTage = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
|
|
24
|
-
let allowedSonderzeichen =
|
|
25
|
-
let allowedFunctionalKeys = [
|
|
24
|
+
let allowedSonderzeichen = ".";
|
|
25
|
+
let allowedFunctionalKeys = ["ArrowLeft", "ArrowRight", "Backspace", "Delete"];
|
|
26
26
|
let currentJahr = new Date().getFullYear();
|
|
27
27
|
let currentMonat = monate[new Date().getMonth()];
|
|
28
28
|
let wochenImMonat = [];
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
}
|
|
53
53
|
|
|
54
54
|
// Prüfung, ob der Monat korrekt eingegeben wurde
|
|
55
|
-
if (localMonat !=
|
|
55
|
+
if (localMonat != "undefined" && (localMonat < 1 || localMonat > 12)) {
|
|
56
56
|
error = true;
|
|
57
57
|
} else {
|
|
58
58
|
error = false;
|
|
@@ -63,9 +63,9 @@
|
|
|
63
63
|
error = true;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
if (localMonat !=
|
|
66
|
+
if (localMonat != "undefined") {
|
|
67
67
|
let localAllowedTage = allowedTage[inhalt[1]];
|
|
68
|
-
if (localAllowedTage ==
|
|
68
|
+
if (localAllowedTage == "undefined") {
|
|
69
69
|
error = true;
|
|
70
70
|
}
|
|
71
71
|
if (localTag > localAllowedTage) {
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
// Am Anfang müssen erstmal x Leertage in die Woche eingefügt werden, damit der Monat
|
|
93
93
|
// am passenden Wochentag startet => das macht es in der Anzeigeschleife leichter
|
|
94
94
|
for (let bufferCounter = 0; bufferCounter < localTagIndex; bufferCounter++) {
|
|
95
|
-
woche = [...woche,
|
|
95
|
+
woche = [...woche, ""];
|
|
96
96
|
}
|
|
97
97
|
}
|
|
98
98
|
woche = [...woche, counter + 1];
|
|
@@ -125,7 +125,7 @@
|
|
|
125
125
|
daysInMonth();
|
|
126
126
|
}
|
|
127
127
|
function setPlaceholder(tag) {
|
|
128
|
-
if (tag !=
|
|
128
|
+
if (tag != "") {
|
|
129
129
|
//Placeholder = getFormattedDate(tag);
|
|
130
130
|
}
|
|
131
131
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
<script>
|
|
2
|
-
import SvelteTable from
|
|
2
|
+
import SvelteTable from "svelte-table";
|
|
3
3
|
|
|
4
4
|
export let columns;
|
|
5
5
|
/** @type {any[]} */
|
|
6
6
|
export let rows;
|
|
7
7
|
/** @type {string} */
|
|
8
|
-
export let sortBy =
|
|
8
|
+
export let sortBy = "";
|
|
9
9
|
/** @type {(string | number)[]} */
|
|
10
10
|
export let expanded = [];
|
|
11
11
|
/** @type {(string | number)[]} */
|
|
@@ -32,23 +32,23 @@
|
|
|
32
32
|
export let clickCell = null;
|
|
33
33
|
|
|
34
34
|
// CSS Classes
|
|
35
|
-
export let classNameTable =
|
|
36
|
-
export let classNameThead =
|
|
37
|
-
export let classNameTbody =
|
|
38
|
-
export let classNameSelect =
|
|
39
|
-
export let classNameInput =
|
|
40
|
-
export let classNameRow =
|
|
41
|
-
export let classNameCell =
|
|
42
|
-
export let classNameRowSelected =
|
|
43
|
-
export let classNameRowExpanded =
|
|
44
|
-
export let classNameExpandedContent =
|
|
45
|
-
export let classNameCellExpand =
|
|
35
|
+
export let classNameTable = "border-2 border-collapse my-4";
|
|
36
|
+
export let classNameThead = "";
|
|
37
|
+
export let classNameTbody = "";
|
|
38
|
+
export let classNameSelect = "";
|
|
39
|
+
export let classNameInput = "";
|
|
40
|
+
export let classNameRow = "border-2 border-collapse odd:bg-gray-100 hover:bg-gray-300";
|
|
41
|
+
export let classNameCell = "";
|
|
42
|
+
export let classNameRowSelected = "!bg-gray-400";
|
|
43
|
+
export let classNameRowExpanded = "bg-gray-400";
|
|
44
|
+
export let classNameExpandedContent = "";
|
|
45
|
+
export let classNameCellExpand = "";
|
|
46
46
|
|
|
47
47
|
const asStringArray = v =>
|
|
48
48
|
[]
|
|
49
49
|
.concat(v)
|
|
50
|
-
.filter(v => v !== null && typeof v ===
|
|
51
|
-
.join(
|
|
50
|
+
.filter(v => v !== null && typeof v === "string" && v !== "")
|
|
51
|
+
.join(" ");
|
|
52
52
|
</script>
|
|
53
53
|
|
|
54
54
|
<SvelteTable
|
|
@@ -66,17 +66,17 @@
|
|
|
66
66
|
on:clickRow={clickRow}
|
|
67
67
|
on:clickExpand={clickExpand}
|
|
68
68
|
on:clickCell={clickCell}
|
|
69
|
-
classNameTable={asStringArray([
|
|
70
|
-
classNameThead={asStringArray([
|
|
71
|
-
classNameTbody={asStringArray([
|
|
72
|
-
classNameSelect={asStringArray([
|
|
73
|
-
classNameInput={asStringArray([
|
|
74
|
-
classNameRow={asStringArray([
|
|
75
|
-
classNameCell={asStringArray([
|
|
76
|
-
classNameRowSelected={asStringArray([
|
|
77
|
-
classNameRowExpanded={asStringArray([
|
|
78
|
-
classNameExpandedContent={asStringArray([
|
|
79
|
-
classNameCellExpand={asStringArray([
|
|
69
|
+
classNameTable={asStringArray(["gan-table", classNameTable])}
|
|
70
|
+
classNameThead={asStringArray(["gan-thead", classNameThead])}
|
|
71
|
+
classNameTbody={asStringArray(["gan-tbody", classNameTbody])}
|
|
72
|
+
classNameSelect={asStringArray(["custom-select", classNameSelect])}
|
|
73
|
+
classNameInput={asStringArray(["custom-input", classNameInput])}
|
|
74
|
+
classNameRow={asStringArray(["gan-row", classNameRow])}
|
|
75
|
+
classNameCell={asStringArray(["gan-cell", classNameCell])}
|
|
76
|
+
classNameRowSelected={asStringArray(["row-selected", classNameRowSelected])}
|
|
77
|
+
classNameRowExpanded={asStringArray(["row-expanded", classNameRowExpanded])}
|
|
78
|
+
classNameExpandedContent={asStringArray(["expanded-content", classNameExpandedContent])}
|
|
79
|
+
classNameCellExpand={asStringArray(["cell-expand", classNameCellExpand])}>
|
|
80
80
|
|
|
81
81
|
<!-- Wait for better workaround. See: https://github.com/sveltejs/svelte/issues/5604 -->
|
|
82
82
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
<script>
|
|
2
2
|
export let AllowedDecimals = 2;
|
|
3
|
-
export let DecimalTrenner =
|
|
3
|
+
export let DecimalTrenner = ",";
|
|
4
4
|
export let KeyDownFunctionOnEnter, KeyDownFunctionOnTab;
|
|
5
5
|
export let Height = 30;
|
|
6
6
|
export let IsPflichtfeld = false;
|
|
@@ -8,28 +8,28 @@
|
|
|
8
8
|
export let MinValue = 0;
|
|
9
9
|
export let MaxValue = 0;
|
|
10
10
|
export let Multiline = false;
|
|
11
|
-
export let Type =
|
|
12
|
-
export let Value =
|
|
11
|
+
export let Type = "text";
|
|
12
|
+
export let Value = "";
|
|
13
13
|
export let Width = 120;
|
|
14
14
|
|
|
15
15
|
let errorHidden = true;
|
|
16
|
-
let errorMessage =
|
|
16
|
+
let errorMessage = "";
|
|
17
17
|
let style = `height: ${Height}px; width: ${Width}px;`;
|
|
18
18
|
let styleError = `width: ${Width}px;`;
|
|
19
19
|
|
|
20
|
-
let allowedNumbers = [
|
|
21
|
-
let allowedDecimalTrenner = [
|
|
22
|
-
let allowedFunctionalKeys = [
|
|
23
|
-
let allowedVorzeichen =
|
|
20
|
+
let allowedNumbers = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
21
|
+
let allowedDecimalTrenner = [",", "."];
|
|
22
|
+
let allowedFunctionalKeys = ["ArrowLeft", "ArrowRight", "Backspace", "Delete"];
|
|
23
|
+
let allowedVorzeichen = "-";
|
|
24
24
|
|
|
25
25
|
function checkInput(e) {
|
|
26
26
|
switch (Type) {
|
|
27
|
-
case
|
|
28
|
-
case
|
|
27
|
+
case "currency":
|
|
28
|
+
case "number":
|
|
29
29
|
checkInputNumber(e);
|
|
30
30
|
break;
|
|
31
31
|
|
|
32
|
-
case
|
|
32
|
+
case "email":
|
|
33
33
|
checkInputEMail(e)
|
|
34
34
|
break;
|
|
35
35
|
}
|
|
@@ -45,7 +45,7 @@
|
|
|
45
45
|
let positionDezimalTrenner = localValueString.indexOf(DecimalTrenner)
|
|
46
46
|
if (positionDezimalTrenner > -1) {
|
|
47
47
|
let decimals = localValueString.substring(positionDezimalTrenner);
|
|
48
|
-
if (decimals.length > AllowedDecimals || (Type ==
|
|
48
|
+
if (decimals.length > AllowedDecimals || (Type == "currency" && decimals.length > 2)) {
|
|
49
49
|
ignoreInput(e);
|
|
50
50
|
}
|
|
51
51
|
}
|
|
@@ -74,39 +74,39 @@
|
|
|
74
74
|
}
|
|
75
75
|
}
|
|
76
76
|
function checkInputEMail(e) {
|
|
77
|
-
let mailParts = Value.split(
|
|
77
|
+
let mailParts = Value.split("@");
|
|
78
78
|
errorHidden = false; // Pauschal einen Fehler anzeigen lassen - spart Codezeilen
|
|
79
79
|
|
|
80
80
|
if (mailParts[0].length > 64) {
|
|
81
|
-
errorMessage =
|
|
81
|
+
errorMessage = "Der Lokalteil der E-Mail Adresse (vor dem @-Zeichen) darf eine Maximallänge von 64 Zeichen nicht überschreiten."
|
|
82
82
|
} else if (mailParts.length > 1 && mailParts[0].length < 1) {
|
|
83
|
-
errorMessage =
|
|
84
|
-
} else if (mailParts.length > 1 && !mailParts[1].includes(
|
|
85
|
-
errorMessage =
|
|
86
|
-
} else if (Value.startsWith(
|
|
87
|
-
errorMessage =
|
|
88
|
-
} else if (Value.startsWith(
|
|
89
|
-
errorMessage =
|
|
90
|
-
} else if (!Value.includes(
|
|
91
|
-
errorMessage =
|
|
83
|
+
errorMessage = "Der Lokalteil der E-Mail Adresse (vor dem @-Zeichen) muss eine Mindestlänge von 1 Zeichen besitzen."
|
|
84
|
+
} else if (mailParts.length > 1 && !mailParts[1].includes(".")) {
|
|
85
|
+
errorMessage = "Der Domainteil der E-Mail Adresse (nach dem @-Zeichen) muss einen Punkt (.) enthalten."
|
|
86
|
+
} else if (Value.startsWith(".") || Value.endsWith(".")) {
|
|
87
|
+
errorMessage = "Die E-Mail Adresse darf mit einem Punkt weder beginnen noch enden."
|
|
88
|
+
} else if (Value.startsWith("@") || Value.endsWith("@")) {
|
|
89
|
+
errorMessage = "Die E-Mail Adresse darf mit einem @-Zeichen weder beginnen noch enden."
|
|
90
|
+
} else if (!Value.includes("@") && e.key != "@") {
|
|
91
|
+
errorMessage = "@-Zeichen muss enthalten sein."
|
|
92
92
|
} else if (Value.length > 253) {
|
|
93
|
-
errorMessage =
|
|
93
|
+
errorMessage = "Maximallänge: 254 Zeichen.";
|
|
94
94
|
} else if (Value.length < 6) {
|
|
95
|
-
errorMessage =
|
|
95
|
+
errorMessage = "Mindestlänge: 6 Zeichen.";
|
|
96
96
|
} else {
|
|
97
97
|
errorHidden = true;
|
|
98
|
-
errorMessage =
|
|
98
|
+
errorMessage = ""; // einfach für die Sauberkeit
|
|
99
99
|
}
|
|
100
100
|
}
|
|
101
101
|
function executeAdditionalFunctions(e) {
|
|
102
102
|
switch (e.key) {
|
|
103
|
-
case
|
|
104
|
-
if (typeof(KeyDownFunctionOnEnter) !=
|
|
103
|
+
case "Enter":
|
|
104
|
+
if (typeof(KeyDownFunctionOnEnter) != "undefined") {
|
|
105
105
|
KeyDownFunctionOnEnter();
|
|
106
106
|
}
|
|
107
107
|
break;
|
|
108
|
-
case
|
|
109
|
-
if (typeof(KeyDownFunctionOnTab) !=
|
|
108
|
+
case "Tab":
|
|
109
|
+
if (typeof(KeyDownFunctionOnTab) != "undefined") {
|
|
110
110
|
KeyDownFunctionOnTab();
|
|
111
111
|
}
|
|
112
112
|
break;
|
|
@@ -127,7 +127,7 @@
|
|
|
127
127
|
}
|
|
128
128
|
|
|
129
129
|
// Replace wird benötigt, da sonst der Vergleich das deutsche "," als Dezimaltrenner nicht erkennt und ignoriert.
|
|
130
|
-
localValueString = localValueString.replaceAll(
|
|
130
|
+
localValueString = localValueString.replaceAll(",", ".");
|
|
131
131
|
|
|
132
132
|
if (MinValue == MaxValue || MinValue > MaxValue) {
|
|
133
133
|
return isBetween;
|
|
@@ -144,9 +144,9 @@
|
|
|
144
144
|
setFieldStyle();
|
|
145
145
|
}
|
|
146
146
|
function setFieldStyle() {
|
|
147
|
-
if (IsPflichtfeld && Value !=
|
|
147
|
+
if (IsPflichtfeld && Value != "") {
|
|
148
148
|
style = `${style} background: #f5fc99;`
|
|
149
|
-
} else if (IsPflichtfeld && Value ==
|
|
149
|
+
} else if (IsPflichtfeld && Value == "") {
|
|
150
150
|
style = `${style} background: #fc5d5d;`
|
|
151
151
|
}
|
|
152
152
|
}
|
|
@@ -154,8 +154,8 @@
|
|
|
154
154
|
$:if (Type) {
|
|
155
155
|
Type = Type.toLocaleLowerCase();
|
|
156
156
|
switch (Type) {
|
|
157
|
-
case
|
|
158
|
-
case
|
|
157
|
+
case "currency":
|
|
158
|
+
case "number":
|
|
159
159
|
style = `${style} text-align: right;`
|
|
160
160
|
break;
|
|
161
161
|
}
|
|
@@ -166,25 +166,25 @@
|
|
|
166
166
|
</script>
|
|
167
167
|
|
|
168
168
|
<!-- Datum -->
|
|
169
|
-
{#if (Type ==
|
|
169
|
+
{#if (Type == "date")}
|
|
170
170
|
<input type="date" style={style} on:keydown={checkInput} on:keyup={thisKeyUp} on bind:value={Value}/>
|
|
171
171
|
{/if}
|
|
172
172
|
|
|
173
173
|
<!-- Nummerisch -->
|
|
174
|
-
{#if (Type ==
|
|
174
|
+
{#if (Type == "number")}
|
|
175
175
|
<input style={style} on:keydown={checkInput} on:keyup={thisKeyUp} bind:value={Value}/>
|
|
176
176
|
{/if}
|
|
177
177
|
|
|
178
178
|
<!-- Text -->
|
|
179
|
-
{#if (Type ==
|
|
179
|
+
{#if (Type == "text" && !Multiline) || (Type == "email")}
|
|
180
180
|
<input style={style} on:keydown={checkInput} on:keyup={thisKeyUp} bind:value={Value}/>
|
|
181
181
|
{/if}
|
|
182
|
-
{#if (Type ==
|
|
182
|
+
{#if (Type == "text" && Multiline)}
|
|
183
183
|
<textarea style={style} on:keydown={checkInput} bind:value={Value}/>
|
|
184
184
|
{/if}
|
|
185
185
|
|
|
186
186
|
<!-- Währung -->
|
|
187
|
-
{#if (Type ==
|
|
187
|
+
{#if (Type == "currency")}
|
|
188
188
|
<input style={style} on:keydown={checkInput} on:keyup={thisKeyUp} bind:value={Value}/>
|
|
189
189
|
{/if}
|
|
190
190
|
|
package/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
|
-
import AddButton from
|
|
2
|
-
import DataGrid from
|
|
3
|
-
import Dialog from
|
|
4
|
-
import GanTable from
|
|
5
|
-
import Datepicker from
|
|
6
|
-
import Inputbox from
|
|
7
|
-
import RemoveButton from
|
|
8
|
-
import SaveButton from
|
|
1
|
+
import AddButton from "./components/AddButton.svelte";
|
|
2
|
+
import DataGrid from "./components/DataGrid.svelte";
|
|
3
|
+
import Dialog from "./components/Dialog.svelte";
|
|
4
|
+
import GanTable from "./components/GanTable.svelte";
|
|
5
|
+
import Datepicker from "./components/Datepicker.svelte";
|
|
6
|
+
import Inputbox from "./components/Inputbox.svelte";
|
|
7
|
+
import RemoveButton from "./components/RemoveButton.svelte";
|
|
8
|
+
import SaveButton from "./components/SaveButton.svelte";
|
|
9
9
|
|
|
10
10
|
export {
|
|
11
11
|
DataGrid, Datepicker, Inputbox, Dialog, GanTable,
|
|
12
12
|
AddButton, RemoveButton, SaveButton,
|
|
13
13
|
}
|
|
14
14
|
|
|
15
|
-
import { IDASFactory } from
|
|
16
|
-
import { RESTClient } from
|
|
15
|
+
import { IDASFactory } from "./api/IDAS";
|
|
16
|
+
import { RESTClient } from "./api/RESTClient";
|
|
17
17
|
|
|
18
18
|
export { IDASFactory, RESTClient };
|
package/package.json
CHANGED
|
@@ -1,41 +1,42 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gandalan/weblibs",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.9",
|
|
4
4
|
"description": "WebLibs for Gandalan JS/TS/Svelte projects",
|
|
5
|
-
"
|
|
5
|
+
"keywords": [
|
|
6
|
+
"gandalan"
|
|
7
|
+
],
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "https://github.com/gandalan/idas-client-libs"
|
|
11
|
+
},
|
|
6
12
|
"license": "ISC",
|
|
13
|
+
"author": "Philipp Reif",
|
|
7
14
|
"main": "index",
|
|
8
15
|
"typings": "index",
|
|
9
16
|
"scripts": {
|
|
10
|
-
"check": "svelte-check",
|
|
11
|
-
"check:watch": "svelte-check --watch",
|
|
12
|
-
"lint": "eslint ."
|
|
17
|
+
"svelte-check": "svelte-check",
|
|
18
|
+
"svelte-check:watch": "svelte-check --watch",
|
|
19
|
+
"lint": "eslint .",
|
|
20
|
+
"lint:fix": "eslint . --fix"
|
|
21
|
+
},
|
|
22
|
+
"dependencies": {
|
|
23
|
+
"@mdi/js": "^7.0.96",
|
|
24
|
+
"axios": "^0.27.2",
|
|
25
|
+
"jwt-decode": "^3.1.2",
|
|
26
|
+
"svelte-table": "^0.5.2"
|
|
13
27
|
},
|
|
14
28
|
"devDependencies": {
|
|
15
29
|
"@babel/eslint-parser": "^7.19.1",
|
|
16
30
|
"chota": "^0.8.0",
|
|
17
|
-
"eslint": "^8.
|
|
31
|
+
"eslint": "^8.27.0",
|
|
18
32
|
"eslint-plugin-svelte3": "^4.0.0",
|
|
19
|
-
"svelte": "^3.
|
|
20
|
-
"svelte-check": "^2.9.
|
|
33
|
+
"svelte": "^3.53.1",
|
|
34
|
+
"svelte-check": "^2.9.2",
|
|
21
35
|
"svelte-chota": "^1.8.6"
|
|
22
36
|
},
|
|
23
|
-
"dependencies": {
|
|
24
|
-
"@mdi/js": "^7.0.96",
|
|
25
|
-
"axios": "^0.27.2",
|
|
26
|
-
"jwt-decode": "^3.1.2",
|
|
27
|
-
"svelte-table": "^0.5.1"
|
|
28
|
-
},
|
|
29
37
|
"peerDependencies": {
|
|
30
38
|
"svelte-chota": "^1.8.6"
|
|
31
39
|
},
|
|
32
|
-
"repository": {
|
|
33
|
-
"type": "git",
|
|
34
|
-
"url": "https://github.com/gandalan/idas-client-libs"
|
|
35
|
-
},
|
|
36
|
-
"keywords": [
|
|
37
|
-
"gandalan"
|
|
38
|
-
],
|
|
39
40
|
"publishConfig": {
|
|
40
41
|
"access": "public"
|
|
41
42
|
}
|