shelving 1.86.2 → 1.86.3
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/firestore/client/FirestoreClientProvider.js +2 -3
- package/firestore/lite/FirestoreLiteProvider.js +3 -2
- package/firestore/server/FirestoreServerProvider.js +6 -7
- package/markup/rule.d.ts +12 -18
- package/markup/rule.js +15 -24
- package/markup/rules.d.ts +0 -9
- package/markup/rules.js +4 -4
- package/package.json +1 -1
- package/react/useQuery.js +5 -3
- package/util/class.d.ts +2 -3
- package/util/class.js +1 -0
- package/util/hydrate.d.ts +1 -1
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { orderBy as firestoreOrderBy, where as firestoreWhere, limit as firestoreLimit, increment as firestoreIncrement, arrayUnion as firestoreArrayUnion, arrayRemove as firestoreArrayRemove, deleteField as firestoreDeleteField, collection as firestoreCollection, doc as firestoreDocument, query as firestoreQuery, onSnapshot, addDoc, setDoc, updateDoc, deleteDoc, getDoc, getDocs, } from "firebase/firestore";
|
|
1
|
+
import { documentId as firestoreDocumentId, orderBy as firestoreOrderBy, where as firestoreWhere, limit as firestoreLimit, increment as firestoreIncrement, arrayUnion as firestoreArrayUnion, arrayRemove as firestoreArrayRemove, deleteField as firestoreDeleteField, collection as firestoreCollection, doc as firestoreDocument, query as firestoreQuery, onSnapshot, addDoc, setDoc, updateDoc, deleteDoc, getDoc, getDocs, } from "firebase/firestore";
|
|
2
2
|
import { LazyDeferredSequence } from "../../sequence/LazyDeferredSequence.js";
|
|
3
3
|
import { ArrayUpdate, DataUpdate, Increment, DictionaryUpdate, Delete, Update } from "../../update/index.js";
|
|
4
4
|
// Constants.
|
|
5
|
-
|
|
6
|
-
const ID = "__id__"; // Internal way Firestore Queries can reference the ID of the current document.
|
|
5
|
+
const ID = firestoreDocumentId();
|
|
7
6
|
// Map `Filter.types` to `WhereFilterOp`
|
|
8
7
|
const OPERATORS = {
|
|
9
8
|
IS: "==",
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
import { orderBy as firestoreOrderBy, where as firestoreWhere, limit as firestoreLimit, increment as firestoreIncrement, arrayUnion as firestoreArrayUnion, arrayRemove as firestoreArrayRemove, deleteField as firestoreDeleteField, collection as firestoreCollection, doc as firestoreDocument, query as firestoreQuery, setDoc, addDoc, updateDoc, deleteDoc, getDoc, getDocs, } from "firebase/firestore/lite";
|
|
1
|
+
import { documentId as firestoreDocumentId, orderBy as firestoreOrderBy, where as firestoreWhere, limit as firestoreLimit, increment as firestoreIncrement, arrayUnion as firestoreArrayUnion, arrayRemove as firestoreArrayRemove, deleteField as firestoreDeleteField, collection as firestoreCollection, doc as firestoreDocument, query as firestoreQuery, setDoc, addDoc, updateDoc, deleteDoc, getDoc, getDocs, } from "firebase/firestore/lite";
|
|
2
2
|
import { UnsupportedError } from "../../error/UnsupportedError.js";
|
|
3
3
|
import { ArrayUpdate, DataUpdate, Increment, DictionaryUpdate, Delete, Update } from "../../update/index.js";
|
|
4
4
|
// Constants.
|
|
5
5
|
// const ID = "__name__"; // DH: `__name__` is the entire path of the document. `__id__` is just ID.
|
|
6
|
-
const ID = "__id__"; // Internal way Firestore Queries can reference the ID of the current document.
|
|
6
|
+
// const ID = "__id__"; // Internal way Firestore Queries can reference the ID of the current document.
|
|
7
|
+
const ID = firestoreDocumentId();
|
|
7
8
|
// Map `Filter.types` to `WhereFilterOp`
|
|
8
9
|
const OPERATORS = {
|
|
9
10
|
IS: "==",
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import { Firestore, FieldValue
|
|
1
|
+
import { Firestore, FieldValue, FieldPath } from "@google-cloud/firestore";
|
|
2
2
|
import { LazyDeferredSequence } from "../../sequence/LazyDeferredSequence.js";
|
|
3
3
|
import { ArrayUpdate, DataUpdate, Increment, DictionaryUpdate, Delete, Update } from "../../update/index.js";
|
|
4
4
|
// Constants.
|
|
5
|
-
|
|
6
|
-
const ID = "__id__"; // Internal way Firestore Queries can reference the ID of the current document.
|
|
5
|
+
const ID = FieldPath.documentId();
|
|
7
6
|
// Map `Filter.types` to `WhereFilterOp`
|
|
8
7
|
const OPERATORS = {
|
|
9
8
|
IS: "==",
|
|
@@ -53,11 +52,11 @@ function* _getFieldValues(updates, prefix = "") {
|
|
|
53
52
|
else if (update instanceof ArrayUpdate) {
|
|
54
53
|
if (update.adds.length) {
|
|
55
54
|
yield `${prefix}${key}`;
|
|
56
|
-
yield
|
|
55
|
+
yield FieldValue.arrayUnion(...update.adds);
|
|
57
56
|
}
|
|
58
57
|
if (update.deletes.length) {
|
|
59
58
|
yield `${prefix}${key}`;
|
|
60
|
-
yield
|
|
59
|
+
yield FieldValue.arrayRemove(...update.deletes);
|
|
61
60
|
}
|
|
62
61
|
}
|
|
63
62
|
else {
|
|
@@ -65,9 +64,9 @@ function* _getFieldValues(updates, prefix = "") {
|
|
|
65
64
|
if (!(update instanceof Update))
|
|
66
65
|
yield update;
|
|
67
66
|
else if (update instanceof Delete)
|
|
68
|
-
yield
|
|
67
|
+
yield FieldValue.delete();
|
|
69
68
|
else if (update instanceof Increment)
|
|
70
|
-
yield
|
|
69
|
+
yield FieldValue.increment(update.amount);
|
|
71
70
|
else
|
|
72
71
|
yield update.transform();
|
|
73
72
|
}
|
package/markup/rule.d.ts
CHANGED
|
@@ -36,35 +36,33 @@ export declare abstract class MarkupRule {
|
|
|
36
36
|
abstract render(props: Data | undefined, options: MarkupOptions): JSXElement;
|
|
37
37
|
}
|
|
38
38
|
export declare class RegExpMarkupRule extends MarkupRule {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
constructor(
|
|
42
|
-
|
|
39
|
+
readonly regexp: RegExp;
|
|
40
|
+
readonly render: (props: Data, options: MarkupOptions) => JSXElement;
|
|
41
|
+
constructor(regexp: RegExp, //
|
|
42
|
+
render: (props: Data, options: MarkupOptions) => JSXElement, contexts: ImmutableArray<string>, subcontext?: string | null, priority?: number);
|
|
43
43
|
match(input: string): MarkupRuleMatch | null;
|
|
44
|
-
render(props: Data, options: MarkupOptions): JSXElement;
|
|
45
44
|
}
|
|
46
45
|
export declare class NamedRegExpMarkupRule<T extends NamedRegExpData> extends MarkupRule {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
constructor(
|
|
50
|
-
|
|
46
|
+
readonly regexp: NamedRegExp<T>;
|
|
47
|
+
readonly render: (props: T, options: MarkupOptions) => JSXElement;
|
|
48
|
+
constructor(regexp: NamedRegExp<T>, //
|
|
49
|
+
render: (props: T, options: MarkupOptions) => JSXElement, contexts: ImmutableArray<string>, subcontext?: string | null, priority?: number);
|
|
51
50
|
match(input: string): NamedRegExpArray<T> | null;
|
|
52
|
-
render(props: T, options: MarkupOptions): JSXElement;
|
|
53
51
|
}
|
|
54
52
|
export declare class LinkRegExpMarkupRule extends MarkupRule {
|
|
55
|
-
readonly
|
|
53
|
+
readonly regexp: NamedRegExp<{
|
|
56
54
|
title?: string;
|
|
57
55
|
href: string;
|
|
58
56
|
}>;
|
|
59
|
-
readonly
|
|
57
|
+
readonly render: (props: {
|
|
60
58
|
title: string;
|
|
61
59
|
href: string;
|
|
62
60
|
}, options: MarkupOptions) => JSXElement;
|
|
63
|
-
constructor(
|
|
61
|
+
constructor(regexp: NamedRegExp<{
|
|
64
62
|
title?: string;
|
|
65
63
|
href: string;
|
|
66
64
|
}>, //
|
|
67
|
-
|
|
65
|
+
render: (props: {
|
|
68
66
|
title: string;
|
|
69
67
|
href: string;
|
|
70
68
|
}, options: MarkupOptions) => JSXElement, contexts: ImmutableArray<string>, subcontext?: string | null, priority?: number);
|
|
@@ -72,9 +70,5 @@ export declare class LinkRegExpMarkupRule extends MarkupRule {
|
|
|
72
70
|
title: string;
|
|
73
71
|
href: string;
|
|
74
72
|
}> | null;
|
|
75
|
-
render(props: {
|
|
76
|
-
title: string;
|
|
77
|
-
href: string;
|
|
78
|
-
}, options: MarkupOptions): JSXElement<import("../util/jsx.js").JSXProps>;
|
|
79
73
|
}
|
|
80
74
|
export type MarkupRules = MarkupRule[];
|
package/markup/rule.js
CHANGED
|
@@ -8,45 +8,39 @@ export class MarkupRule {
|
|
|
8
8
|
}
|
|
9
9
|
}
|
|
10
10
|
export class RegExpMarkupRule extends MarkupRule {
|
|
11
|
-
constructor(
|
|
12
|
-
|
|
11
|
+
constructor(regexp, //
|
|
12
|
+
render, contexts, subcontext, priority) {
|
|
13
13
|
super(contexts, subcontext, priority);
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
14
|
+
this.regexp = regexp;
|
|
15
|
+
this.render = render;
|
|
16
16
|
}
|
|
17
17
|
match(input) {
|
|
18
|
-
return this.
|
|
19
|
-
}
|
|
20
|
-
render(props, options) {
|
|
21
|
-
return this._render(props, options);
|
|
18
|
+
return this.regexp.exec(input);
|
|
22
19
|
}
|
|
23
20
|
}
|
|
24
21
|
export class NamedRegExpMarkupRule extends MarkupRule {
|
|
25
|
-
constructor(
|
|
26
|
-
|
|
22
|
+
constructor(regexp, //
|
|
23
|
+
render, contexts, subcontext, priority) {
|
|
27
24
|
super(contexts, subcontext, priority);
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
25
|
+
this.regexp = regexp;
|
|
26
|
+
this.render = render;
|
|
30
27
|
}
|
|
31
28
|
match(input) {
|
|
32
|
-
return this.
|
|
33
|
-
}
|
|
34
|
-
render(props, options) {
|
|
35
|
-
return this._render(props, options);
|
|
29
|
+
return this.regexp.exec(input);
|
|
36
30
|
}
|
|
37
31
|
}
|
|
38
32
|
export class LinkRegExpMarkupRule extends MarkupRule {
|
|
39
|
-
constructor(
|
|
40
|
-
|
|
33
|
+
constructor(regexp, //
|
|
34
|
+
render, contexts, subcontext, priority) {
|
|
41
35
|
super(contexts, subcontext, priority);
|
|
42
|
-
this.
|
|
43
|
-
this.
|
|
36
|
+
this.regexp = regexp;
|
|
37
|
+
this.render = render;
|
|
44
38
|
}
|
|
45
39
|
// Validates that the link is a valid URL (using `getOptionalURL()` to resolve relative links relative to `options.url`).
|
|
46
40
|
// Validates that the link's URL scheme is in the `options.schemes` whitelist (defaults to `http` and `https`).
|
|
47
41
|
// Generates a default title for the link using `formatURL()` (e.g. `shax.com/my/dir`).
|
|
48
42
|
match(input, { schemes, url: base }) {
|
|
49
|
-
const match = this.
|
|
43
|
+
const match = this.regexp.exec(input);
|
|
50
44
|
if (match) {
|
|
51
45
|
const { 0: first, index, groups } = match;
|
|
52
46
|
const { href, title } = groups;
|
|
@@ -57,7 +51,4 @@ export class LinkRegExpMarkupRule extends MarkupRule {
|
|
|
57
51
|
}
|
|
58
52
|
return null;
|
|
59
53
|
}
|
|
60
|
-
render(props, options) {
|
|
61
|
-
return this._render(props, options);
|
|
62
|
-
}
|
|
63
54
|
}
|
package/markup/rules.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import type { JSXElement } from "../util/jsx.js";
|
|
2
|
-
import { NamedRegExp } from "../util/regexp.js";
|
|
3
2
|
import type { MarkupOptions } from "./options.js";
|
|
4
3
|
import { LinkRegExpMarkupRule, MarkupRules, NamedRegExpMarkupRule, RegExpMarkupRule } from "./rule.js";
|
|
5
4
|
/**
|
|
@@ -60,10 +59,6 @@ export declare function renderLinkRule({ href, title }: {
|
|
|
60
59
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
61
60
|
* - For security only schemes that appear in `options.schemes` will match (defaults to `http:` and `https:`).
|
|
62
61
|
*/
|
|
63
|
-
export declare const URL_REGEXP: NamedRegExp<{
|
|
64
|
-
title?: string;
|
|
65
|
-
href: string;
|
|
66
|
-
}>;
|
|
67
62
|
export declare const URL_RULE: LinkRegExpMarkupRule;
|
|
68
63
|
/**
|
|
69
64
|
* Markdown-style link.
|
|
@@ -73,10 +68,6 @@ export declare const URL_RULE: LinkRegExpMarkupRule;
|
|
|
73
68
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
74
69
|
* - For security only `http://` or `https://` links will work (if invalid the unparsed text will be returned).
|
|
75
70
|
*/
|
|
76
|
-
export declare const LINK_REGEXP: NamedRegExp<{
|
|
77
|
-
title: string;
|
|
78
|
-
href: string;
|
|
79
|
-
}>;
|
|
80
71
|
export declare const LINK_RULE: LinkRegExpMarkupRule;
|
|
81
72
|
/**
|
|
82
73
|
* Inline code.
|
package/markup/rules.js
CHANGED
|
@@ -150,8 +150,8 @@ export function renderLinkRule({ href, title }, { rel }) {
|
|
|
150
150
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
151
151
|
* - For security only schemes that appear in `options.schemes` will match (defaults to `http:` and `https:`).
|
|
152
152
|
*/
|
|
153
|
-
export const
|
|
154
|
-
|
|
153
|
+
export const URL_RULE = new LinkRegExpMarkupRule(getRegExp(/(?<href>[a-z]+:[-$_@.&!*,=;/#?:%a-zA-Z0-9]+)(?: +(?:\((?<title>[^)]*?)\)))?/), //
|
|
154
|
+
renderLinkRule, ["inline", "list"], "link");
|
|
155
155
|
/**
|
|
156
156
|
* Markdown-style link.
|
|
157
157
|
* - Link in standard Markdown format, e.g. `[Google Maps](http://google.com/maps)`
|
|
@@ -160,8 +160,8 @@ export const URL_RULE = new LinkRegExpMarkupRule(URL_REGEXP, renderLinkRule, ["i
|
|
|
160
160
|
* - If link is not valid (using `new URL(url)` then unparsed text will be returned.
|
|
161
161
|
* - For security only `http://` or `https://` links will work (if invalid the unparsed text will be returned).
|
|
162
162
|
*/
|
|
163
|
-
export const
|
|
164
|
-
|
|
163
|
+
export const LINK_RULE = new LinkRegExpMarkupRule(getRegExp(/\[(?<title>[^\]]*?)\]\((?<href>[^)]*?)\)/), //
|
|
164
|
+
renderLinkRule, ["inline", "list"], "link");
|
|
165
165
|
/**
|
|
166
166
|
* Inline code.
|
|
167
167
|
* - Text surrounded by one or more "`" backtick tilde characters.
|
package/package.json
CHANGED
package/react/useQuery.js
CHANGED
|
@@ -70,7 +70,7 @@ export class QueryState extends State {
|
|
|
70
70
|
this.busy.set(true);
|
|
71
71
|
try {
|
|
72
72
|
const items = await this.ref.value;
|
|
73
|
-
this._hasMore = items.length
|
|
73
|
+
this._hasMore = items.length >= this.limit; // If the query returned {limit} or more items, we can assume there are more items waiting to be queried.
|
|
74
74
|
this.set(items);
|
|
75
75
|
}
|
|
76
76
|
catch (thrown) {
|
|
@@ -92,9 +92,11 @@ export class QueryState extends State {
|
|
|
92
92
|
async _loadMore() {
|
|
93
93
|
this.busy.set(true);
|
|
94
94
|
try {
|
|
95
|
-
const
|
|
95
|
+
const last = this.lastValue;
|
|
96
|
+
const query = last ? this.ref.after(last) : this.ref;
|
|
97
|
+
const items = await query.value;
|
|
96
98
|
this.set([...this.value, ...items]);
|
|
97
|
-
this._hasMore = items.length
|
|
99
|
+
this._hasMore = items.length >= this.limit; // If the query returned {limit} or more items, we can assume there are more items waiting to be queried.
|
|
98
100
|
}
|
|
99
101
|
catch (thrown) {
|
|
100
102
|
this.next.reject(thrown);
|
package/util/class.d.ts
CHANGED
|
@@ -4,9 +4,8 @@ export type Constructor<T, A extends Arguments> = new (...args: A) => T;
|
|
|
4
4
|
/** Any function arguments (designed for use with `extends Arguments` guards). */
|
|
5
5
|
export type AnyConstructor = new (...args: any) => any;
|
|
6
6
|
/** Class prototype that can be used with `instanceof` (string name, as per `Function`, and a prototype field matching the object). */
|
|
7
|
-
export type Class<T =
|
|
8
|
-
|
|
9
|
-
};
|
|
7
|
+
export type Class<T> = new (...args: any) => T;
|
|
8
|
+
export declare const abc: Class<String>;
|
|
10
9
|
/** Is a given value a class constructor? */
|
|
11
10
|
export declare const isConstructor: <T extends AnyConstructor>(v: unknown) => v is T;
|
|
12
11
|
/** Is a value an instance of a class? */
|
package/util/class.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { AssertionError } from "../error/AssertionError.js";
|
|
3
3
|
import { assertFunction } from "./function.js";
|
|
4
4
|
import { debug } from "./debug.js";
|
|
5
|
+
export const abc = String;
|
|
5
6
|
/** Is a given value a class constructor? */
|
|
6
7
|
export const isConstructor = (v) => typeof v === "function" && v.toString().startsWith("class");
|
|
7
8
|
/** Is a value an instance of a class? */
|
package/util/hydrate.d.ts
CHANGED
|
@@ -5,7 +5,7 @@ import { Transformable } from "./transform.js";
|
|
|
5
5
|
* A set of hydrations describes a set of string keys and the class constructor to be dehydrated and rehydrated.
|
|
6
6
|
* - We can't use `class.name` because we don't know that the name of the class will survive minification.
|
|
7
7
|
*/
|
|
8
|
-
export type Hydrations = ImmutableDictionary<Class
|
|
8
|
+
export type Hydrations = ImmutableDictionary<Class<unknown>>;
|
|
9
9
|
/**
|
|
10
10
|
* Deeply dehydrate a class instance based on a set of `Hydrations`
|
|
11
11
|
* - Dehydration allows you to pass class instances from a server back to a client.
|