solid-logic 1.3.14 → 1.3.15-908cf936
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/.babelrc +0 -0
- package/.eslintrc.js +0 -0
- package/.github/workflows/ci.yml +0 -1
- package/.github/workflows/release.yml +0 -0
- package/.nvmrc +1 -0
- package/LICENSE +0 -0
- package/README.md +0 -0
- package/jest.config.js +0 -0
- package/lib/acl/aclLogic.d.ts +0 -0
- package/lib/acl/aclLogic.d.ts.map +0 -0
- package/lib/acl/aclLogic.js +5 -1
- package/lib/acl/aclLogic.js.map +1 -1
- package/lib/authSession/authSession.d.ts +0 -0
- package/lib/authSession/authSession.d.ts.map +0 -0
- package/lib/authSession/authSession.js +0 -0
- package/lib/authSession/authSession.js.map +0 -0
- package/lib/authn/SolidAuthnLogic.d.ts +0 -0
- package/lib/authn/SolidAuthnLogic.d.ts.map +0 -0
- package/lib/authn/SolidAuthnLogic.js +5 -1
- package/lib/authn/SolidAuthnLogic.js.map +1 -1
- package/lib/authn/authUtil.d.ts +0 -0
- package/lib/authn/authUtil.d.ts.map +0 -0
- package/lib/authn/authUtil.js +5 -1
- package/lib/authn/authUtil.js.map +1 -1
- package/lib/chat/ChatLogic.d.ts +0 -0
- package/lib/chat/ChatLogic.d.ts.map +0 -0
- package/lib/chat/ChatLogic.js +0 -0
- package/lib/chat/ChatLogic.js.map +0 -0
- package/lib/chat/determineChatContainer.d.ts +0 -0
- package/lib/chat/determineChatContainer.d.ts.map +0 -0
- package/lib/chat/determineChatContainer.js +0 -0
- package/lib/chat/determineChatContainer.js.map +0 -0
- package/lib/discovery/discoveryLogic.d.ts +13 -0
- package/lib/discovery/discoveryLogic.d.ts.map +1 -0
- package/lib/discovery/discoveryLogic.js +203 -0
- package/lib/discovery/discoveryLogic.js.map +1 -0
- package/lib/inbox/InboxLogic.d.ts +0 -0
- package/lib/inbox/InboxLogic.d.ts.map +0 -0
- package/lib/inbox/InboxLogic.js +2 -2
- package/lib/inbox/InboxLogic.js.map +1 -1
- package/lib/index.d.ts +1 -0
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +7 -1
- package/lib/index.js.map +1 -1
- package/lib/issuer/issuerLogic.d.ts +0 -0
- package/lib/issuer/issuerLogic.d.ts.map +0 -0
- package/lib/issuer/issuerLogic.js +0 -0
- package/lib/issuer/issuerLogic.js.map +0 -0
- package/lib/logic/CustomError.d.ts +0 -0
- package/lib/logic/CustomError.d.ts.map +0 -0
- package/lib/logic/CustomError.js +0 -0
- package/lib/logic/CustomError.js.map +0 -0
- package/lib/logic/SolidLogic.d.ts +2 -3
- package/lib/logic/SolidLogic.d.ts.map +1 -1
- package/lib/logic/SolidLogic.js +45 -41
- package/lib/logic/SolidLogic.js.map +1 -1
- package/lib/logic/solidLogicSingleton.d.ts +0 -0
- package/lib/logic/solidLogicSingleton.d.ts.map +1 -1
- package/lib/logic/solidLogicSingleton.js +9 -2
- package/lib/logic/solidLogicSingleton.js.map +1 -1
- package/lib/profile/ProfileLogic.d.ts +0 -0
- package/lib/profile/ProfileLogic.d.ts.map +0 -0
- package/lib/profile/ProfileLogic.js +0 -0
- package/lib/profile/ProfileLogic.js.map +0 -0
- package/lib/typeIndex/typeIndexLogic.d.ts +4 -4
- package/lib/typeIndex/typeIndexLogic.d.ts.map +1 -1
- package/lib/typeIndex/typeIndexLogic.js +98 -32
- package/lib/typeIndex/typeIndexLogic.js.map +1 -1
- package/lib/types.d.ts +0 -0
- package/lib/types.d.ts.map +0 -0
- package/lib/types.js +0 -0
- package/lib/types.js.map +0 -0
- package/lib/util/UtilityLogic.d.ts +2 -2
- package/lib/util/UtilityLogic.d.ts.map +1 -1
- package/lib/util/UtilityLogic.js +6 -6
- package/lib/util/UtilityLogic.js.map +1 -1
- package/lib/util/debug.d.ts +0 -0
- package/lib/util/debug.d.ts.map +0 -0
- package/lib/util/debug.js +0 -0
- package/lib/util/debug.js.map +0 -0
- package/lib/util/uri.d.ts +0 -0
- package/lib/util/uri.d.ts.map +0 -0
- package/lib/util/uri.js +0 -0
- package/lib/util/uri.js.map +0 -0
- package/package.json +16 -19
- package/src/acl/aclLogic.ts +0 -0
- package/src/authSession/authSession.ts +0 -0
- package/src/authn/SolidAuthnLogic.ts +0 -0
- package/src/authn/authUtil.ts +0 -0
- package/src/chat/ChatLogic.ts +0 -0
- package/src/chat/determineChatContainer.ts +0 -0
- package/src/discovery/discoveryLogic.ts +90 -0
- package/src/inbox/InboxLogic.ts +2 -2
- package/src/index.ts +10 -0
- package/src/issuer/issuerLogic.ts +0 -0
- package/src/logic/CustomError.ts +0 -0
- package/src/logic/SolidLogic.ts +29 -32
- package/src/logic/solidLogicSingleton.ts +3 -1
- package/src/profile/ProfileLogic.ts +0 -0
- package/src/typeIndex/typeIndexLogic.ts +92 -61
- package/src/types.ts +0 -0
- package/src/util/UtilityLogic.ts +8 -8
- package/src/util/debug.ts +0 -0
- package/src/util/uri.ts +0 -0
- package/test/aclLogic.test.ts +0 -0
- package/test/authUtil.test.ts +0 -0
- package/test/chatLogic.test.ts +1 -1
- package/test/helpers/setup.ts +0 -0
- package/test/inboxLogic.test.ts +0 -0
- package/test/logic.test.ts +0 -0
- package/test/solidAuthLogic.test.ts +0 -0
- package/test/typeIndexLogic.test.ts +18 -3
- package/test/utilityLogic.test.ts +0 -0
- package/tsconfig.json +0 -0
- package/renovate.json +0 -5
|
@@ -5,13 +5,23 @@ import * as $rdf from 'rdflib'
|
|
|
5
5
|
import { newThing } from "../util/uri"
|
|
6
6
|
import { AuthenticationContext } from "../types"
|
|
7
7
|
import { solidLogicSingleton } from "../logic/solidLogicSingleton"
|
|
8
|
-
|
|
8
|
+
// import { ensureLoadedPreferences } from '../logic/logic'
|
|
9
|
+
import { loadPreferences, loadProfile } from '../discovery/discoveryLogic'
|
|
9
10
|
export const ns = solidNamespace($rdf)
|
|
10
11
|
|
|
12
|
+
const store = solidLogicSingleton.store
|
|
13
|
+
|
|
14
|
+
async function ensureLoadedPreferences (context:AuthenticationContext) {
|
|
15
|
+
if (!context.me) throw new Error('@@ ensureLoadedPreferences: no user specified')
|
|
16
|
+
context.publicProfile = await loadProfile(store, context.me)
|
|
17
|
+
context.preferencesFile = await loadPreferences(store, context.me)
|
|
18
|
+
return context
|
|
19
|
+
}
|
|
20
|
+
|
|
11
21
|
/**
|
|
12
22
|
* Resolves with the same context, outputting
|
|
13
23
|
* output: index.public, index.private
|
|
14
|
-
*
|
|
24
|
+
* @@ This is a very bizare function
|
|
15
25
|
* @see https://github.com/solid/solid/blob/main/proposals/data-discovery.md#discoverability
|
|
16
26
|
*/
|
|
17
27
|
export async function loadIndex (
|
|
@@ -26,32 +36,44 @@ const indexes = await solidLogicSingleton.loadIndexes(
|
|
|
26
36
|
async (err: Error) => debug.error(err.message) as undefined
|
|
27
37
|
)
|
|
28
38
|
context.index = context.index || {}
|
|
29
|
-
context.index.private = indexes.private
|
|
30
|
-
context.index.public = indexes.public
|
|
39
|
+
context.index.private = indexes.private.concat(context.index.private || []) // otherwise concat will wrongly add 'undefined' as a private index
|
|
40
|
+
context.index.public = indexes.public.concat(context.index.public || []) // otherwise concat will wrongly add 'undefined' as a public index
|
|
31
41
|
return context
|
|
32
42
|
}
|
|
33
43
|
|
|
34
44
|
export async function loadTypeIndexes (context: AuthenticationContext) {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
context.
|
|
43
|
-
context.
|
|
44
|
-
context.
|
|
45
|
-
|
|
45
|
+
try {
|
|
46
|
+
await loadPreferences(solidLogicSingleton.store, context.me)
|
|
47
|
+
} catch (error) {
|
|
48
|
+
debug.warn(error.message) as undefined
|
|
49
|
+
}
|
|
50
|
+
try {
|
|
51
|
+
const indexes = await solidLogicSingleton.loadIndexes(
|
|
52
|
+
context.me as NamedNode,
|
|
53
|
+
context.publicProfile || null,
|
|
54
|
+
context.preferencesFile || null,
|
|
55
|
+
// async (err: Error) => widgets.complain(context, err.message)
|
|
56
|
+
// async (err: Error) => debug.warn(err.message) as undefined
|
|
57
|
+
)
|
|
58
|
+
context.index = context.index || {}
|
|
59
|
+
context.index.private = indexes.private || context.index.private
|
|
60
|
+
context.index.public = indexes.public || context.index.public
|
|
61
|
+
return context
|
|
62
|
+
} catch (error) {
|
|
63
|
+
async (error: Error) => debug.warn(error.message) as undefined
|
|
64
|
+
}
|
|
46
65
|
}
|
|
47
66
|
|
|
48
67
|
/**
|
|
49
68
|
* Resolves with the same context, outputting
|
|
50
69
|
* @see https://github.com/solid/solid/blob/main/proposals/data-discovery.md#discoverability
|
|
51
70
|
*/
|
|
52
|
-
export async function ensureTypeIndexes (context: AuthenticationContext): Promise<AuthenticationContext> {
|
|
53
|
-
|
|
54
|
-
|
|
71
|
+
export async function ensureTypeIndexes (context: AuthenticationContext, agent?: NamedNode): Promise<AuthenticationContext> {
|
|
72
|
+
if (!context.me) {
|
|
73
|
+
throw new Error(`ensureTypeIndexes: @@ no user`)
|
|
74
|
+
}
|
|
75
|
+
await ensureOneTypeIndex(context, true, agent)
|
|
76
|
+
await ensureOneTypeIndex(context, false, agent)
|
|
55
77
|
return context
|
|
56
78
|
}
|
|
57
79
|
|
|
@@ -63,9 +85,10 @@ return context
|
|
|
63
85
|
* Adds its output to the context
|
|
64
86
|
* @see https://github.com/solid/solid/blob/main/proposals/data-discovery.md#discoverability
|
|
65
87
|
*/
|
|
66
|
-
async function ensureOneTypeIndex (context: AuthenticationContext, isPublic: boolean): Promise<AuthenticationContext | void> {
|
|
88
|
+
async function ensureOneTypeIndex (context: AuthenticationContext, isPublic: boolean, agent?: NamedNode): Promise<AuthenticationContext | void> {
|
|
67
89
|
async function makeIndexIfNecessary (context, isPublic) {
|
|
68
90
|
const relevant = isPublic ? context.publicProfile : context.preferencesFile
|
|
91
|
+
if (!relevant) alert ('@@@@ relevent null')
|
|
69
92
|
const visibility = isPublic ? 'public' : 'private'
|
|
70
93
|
|
|
71
94
|
async function putIndex (newIndex) {
|
|
@@ -79,58 +102,65 @@ async function ensureOneTypeIndex (context: AuthenticationContext, isPublic: boo
|
|
|
79
102
|
}
|
|
80
103
|
} // putIndex
|
|
81
104
|
|
|
105
|
+
|
|
82
106
|
context.index = context.index || {}
|
|
83
107
|
context.index[visibility] = context.index[visibility] || []
|
|
84
108
|
let newIndex
|
|
85
109
|
if (context.index[visibility].length === 0) {
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
110
|
+
if (!store.updater.editable(relevant)) {
|
|
111
|
+
debug.log(`Not adding new type index as ${relevant} is not editable`)
|
|
112
|
+
return
|
|
113
|
+
}
|
|
114
|
+
newIndex = sym(`${relevant.dir().uri + visibility}TypeIndex.ttl`)
|
|
115
|
+
debug.log(`Linking to new fresh type index ${newIndex}`)
|
|
116
|
+
if (!confirm(`OK to create a new empty index file at ${newIndex}, overwriting anything that is now there?`)) {
|
|
117
|
+
throw new Error('cancelled by user')
|
|
118
|
+
}
|
|
119
|
+
debug.log(`Linking to new fresh type index ${newIndex}`)
|
|
120
|
+
const addMe = [
|
|
121
|
+
st(context.me, ns.solid(`${visibility}TypeIndex`), newIndex, relevant)
|
|
122
|
+
]
|
|
123
|
+
try {
|
|
124
|
+
await solidLogicSingleton.updatePromise([], addMe)
|
|
125
|
+
} catch (err) {
|
|
126
|
+
const msg = `Error saving type index link saving back ${newIndex}: ${err}`
|
|
127
|
+
//widgets.complain(context, msg)
|
|
128
|
+
debug.warn(msg)
|
|
129
|
+
return context
|
|
130
|
+
}
|
|
103
131
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
132
|
+
debug.log(`Creating new fresh type index file${newIndex}`)
|
|
133
|
+
await putIndex(newIndex)
|
|
134
|
+
context.index[visibility].push(newIndex) // @@ wait
|
|
107
135
|
} else {
|
|
108
136
|
// officially exists
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
137
|
+
const ixs = context.index[visibility]
|
|
138
|
+
try {
|
|
139
|
+
await solidLogicSingleton.load(ixs)
|
|
140
|
+
} catch (err) {
|
|
141
|
+
const msg = `ensureOneTypeIndex: loading indexes ${err}`
|
|
142
|
+
debug.warn(msg)
|
|
143
|
+
// widgets.complain(context, `ensureOneTypeIndex: loading indexes ${err}`)
|
|
144
|
+
}
|
|
117
145
|
}
|
|
118
146
|
} // makeIndexIfNecessary
|
|
119
147
|
|
|
148
|
+
const context2 = await ensureLoadedPreferences(context)
|
|
149
|
+
if (!context2.publicProfile) throw new Error(`@@ type index: no publicProfile`)
|
|
150
|
+
if (!context2.preferencesFile) throw new Error(`@@ type index: no preferencesFile for profile ${context2.publicProfile}`)
|
|
151
|
+
const relevant = isPublic ? context2.publicProfile : context2.preferencesFile
|
|
152
|
+
|
|
120
153
|
try {
|
|
121
|
-
await loadIndex(
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
: context.index.private[0]
|
|
127
|
-
}`
|
|
128
|
-
)
|
|
154
|
+
await loadIndex(context2, isPublic)
|
|
155
|
+
const pp = isPublic ? 'public' : 'private'
|
|
156
|
+
if (context2.index && context2.index[pp]&& context2.index[pp].length > 0) {
|
|
157
|
+
debug.log(`ensureOneTypeIndex: Type index exists already ${context2.index[pp]}`)
|
|
158
|
+
return context2
|
|
129
159
|
}
|
|
130
|
-
|
|
160
|
+
await makeIndexIfNecessary(context2, isPublic)
|
|
131
161
|
} catch (error) {
|
|
132
|
-
await makeIndexIfNecessary(
|
|
133
|
-
// widgets.complain(
|
|
162
|
+
await makeIndexIfNecessary(context2, isPublic)
|
|
163
|
+
// widgets.complain(context2, 'calling loadIndex:' + error)
|
|
134
164
|
}
|
|
135
165
|
}
|
|
136
166
|
|
|
@@ -142,9 +172,10 @@ export async function registerInTypeIndex (
|
|
|
142
172
|
context: AuthenticationContext,
|
|
143
173
|
instance: NamedNode,
|
|
144
174
|
theClass: NamedNode,
|
|
145
|
-
isPublic: boolean
|
|
175
|
+
isPublic: boolean,
|
|
176
|
+
agent?: NamedNode // Defaults to current user
|
|
146
177
|
): Promise<AuthenticationContext> {
|
|
147
|
-
await ensureOneTypeIndex(context, isPublic)
|
|
178
|
+
await ensureOneTypeIndex(context, isPublic, agent)
|
|
148
179
|
if (!context.index) {
|
|
149
180
|
throw new Error('registerInTypeIndex: No type index found')
|
|
150
181
|
}
|
|
@@ -167,4 +198,4 @@ isPublic: boolean
|
|
|
167
198
|
alert(e)
|
|
168
199
|
}
|
|
169
200
|
return context
|
|
170
|
-
}
|
|
201
|
+
}
|
package/src/types.ts
CHANGED
|
File without changes
|
package/src/util/UtilityLogic.ts
CHANGED
|
@@ -11,12 +11,12 @@ export const ACL_LINK = sym(
|
|
|
11
11
|
export class UtilityLogic {
|
|
12
12
|
store: LiveStore;
|
|
13
13
|
ns: SolidNamespace;
|
|
14
|
-
|
|
14
|
+
underlyingFetch: { fetch: (url: string, options?: any) => any };
|
|
15
15
|
|
|
16
|
-
constructor(store: LiveStore, ns: SolidNamespace,
|
|
16
|
+
constructor(store: LiveStore, ns: SolidNamespace, underlyingFetch: { fetch: (url: string, options?: any) => any }) {
|
|
17
17
|
this.store = store;
|
|
18
18
|
this.ns = ns;
|
|
19
|
-
this.
|
|
19
|
+
this.underlyingFetch = underlyingFetch;
|
|
20
20
|
}
|
|
21
21
|
|
|
22
22
|
async findAclDocUrl(url: string) {
|
|
@@ -65,7 +65,7 @@ export class UtilityLogic {
|
|
|
65
65
|
].join('\n')
|
|
66
66
|
}
|
|
67
67
|
const aclDocUrl = await this.findAclDocUrl(options.target);
|
|
68
|
-
return this.
|
|
68
|
+
return this.underlyingFetch.fetch(aclDocUrl, {
|
|
69
69
|
method: 'PUT',
|
|
70
70
|
body: str,
|
|
71
71
|
headers: [
|
|
@@ -83,7 +83,7 @@ export class UtilityLogic {
|
|
|
83
83
|
throw new Error("Cannot load doc, have no fetcher");
|
|
84
84
|
}
|
|
85
85
|
await this.store.fetcher.load(doc, {
|
|
86
|
-
withCredentials: false,
|
|
86
|
+
withCredentials: false, // @@ BUT this won't work when logged in an accessing private stuff!
|
|
87
87
|
cache: "reload",
|
|
88
88
|
});
|
|
89
89
|
// console.log('loaded', profileDocument, this.store)
|
|
@@ -98,7 +98,7 @@ export class UtilityLogic {
|
|
|
98
98
|
throw new Error(`Not a container URL ${url}`);
|
|
99
99
|
}
|
|
100
100
|
// Copied from https://github.com/solid/solid-crud-tests/blob/v3.1.0/test/surface/create-container.test.ts#L56-L64
|
|
101
|
-
const result = await this.
|
|
101
|
+
const result = await this.underlyingFetch.fetch(url, {
|
|
102
102
|
method: "PUT",
|
|
103
103
|
headers: {
|
|
104
104
|
"Content-Type": "text/turtle",
|
|
@@ -134,13 +134,13 @@ export class UtilityLogic {
|
|
|
134
134
|
try {
|
|
135
135
|
if (this.isContainer(url)) {
|
|
136
136
|
const aclDocUrl = await this.findAclDocUrl(url);
|
|
137
|
-
await this.
|
|
137
|
+
await this.underlyingFetch.fetch(aclDocUrl, { method: "DELETE" });
|
|
138
138
|
const containerMembers = await this.getContainerMembers(url);
|
|
139
139
|
await Promise.all(
|
|
140
140
|
containerMembers.map((url) => this.recursiveDelete(url))
|
|
141
141
|
);
|
|
142
142
|
}
|
|
143
|
-
return this.
|
|
143
|
+
return this.underlyingFetch.fetch(url, { method: "DELETE" });
|
|
144
144
|
} catch (e) {
|
|
145
145
|
// console.log(`Please manually remove ${url} from your system under test.`, e);
|
|
146
146
|
}
|
package/src/util/debug.ts
CHANGED
|
File without changes
|
package/src/util/uri.ts
CHANGED
|
File without changes
|
package/test/aclLogic.test.ts
CHANGED
|
File without changes
|
package/test/authUtil.test.ts
CHANGED
|
File without changes
|
package/test/chatLogic.test.ts
CHANGED
|
@@ -20,7 +20,7 @@ describe("Chat logic", () => {
|
|
|
20
20
|
status: 404,
|
|
21
21
|
});
|
|
22
22
|
store = rdf.graph();
|
|
23
|
-
store.fetcher = rdf.fetcher(store, { fetch: fetchMock });
|
|
23
|
+
store.fetcher = rdf.fetcher(store, { fetch: fetchMock, timeout: 5 });
|
|
24
24
|
store.updater = new UpdateManager(store);
|
|
25
25
|
const authn = {
|
|
26
26
|
currentUser: () => {
|
package/test/helpers/setup.ts
CHANGED
|
File without changes
|
package/test/inboxLogic.test.ts
CHANGED
|
File without changes
|
package/test/logic.test.ts
CHANGED
|
File without changes
|
|
File without changes
|
|
@@ -2,6 +2,20 @@ import { sym } from 'rdflib'
|
|
|
2
2
|
import { AuthenticationContext } from '../src/types'
|
|
3
3
|
import * as typeIndexLogic from '../src/typeIndex/typeIndexLogic'
|
|
4
4
|
|
|
5
|
+
it('loadIndex', async () => {
|
|
6
|
+
const context = {
|
|
7
|
+
index: {}
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
const result = await typeIndexLogic.loadIndex(context, true)
|
|
11
|
+
expect(result).toEqual({
|
|
12
|
+
index: {
|
|
13
|
+
private: [],
|
|
14
|
+
public: []
|
|
15
|
+
},
|
|
16
|
+
})
|
|
17
|
+
})
|
|
18
|
+
|
|
5
19
|
describe('loadTypeIndexes', () => {
|
|
6
20
|
it('exists', () => {
|
|
7
21
|
expect(typeIndexLogic.loadTypeIndexes).toBeInstanceOf(Function)
|
|
@@ -15,12 +29,13 @@ describe('registerInTypeIndex', () => {
|
|
|
15
29
|
it('exists', () => {
|
|
16
30
|
expect(typeIndexLogic.registerInTypeIndex).toBeInstanceOf(Function)
|
|
17
31
|
})
|
|
18
|
-
it
|
|
19
|
-
expect(
|
|
32
|
+
it('throws error', async () => {
|
|
33
|
+
expect(typeIndexLogic.registerInTypeIndex(
|
|
20
34
|
{} as AuthenticationContext,
|
|
21
35
|
sym('https://test.test#'),
|
|
22
36
|
sym('https://test.test#'),
|
|
23
37
|
false
|
|
24
|
-
)).
|
|
38
|
+
)).rejects
|
|
39
|
+
.toThrow('@@ ensureLoadedPreferences: no user specified')
|
|
25
40
|
})
|
|
26
41
|
})
|
|
File without changes
|
package/tsconfig.json
CHANGED
|
File without changes
|