@openclaw/firecrawl-plugin 2026.11.3 → 2026.11.5-beta.2
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/dist/.setup/{firecrawl-client--j4MjwgU.mjs → firecrawl-client-Bx1Mas0Y.mjs} +108 -143
- package/dist/.setup/{firecrawl-fetch-provider-Br32KRpR.mjs → firecrawl-fetch-provider-DTGxGqmO.mjs} +4 -9
- package/dist/.setup/{firecrawl-search-provider-D_gyroLO.mjs → firecrawl-search-provider-DBouVH9p.mjs} +6 -17
- package/dist/.source-module-urls/ad8205c790d921269d4ea28d22ab658579b9674fd00e025664fcf0b8ea32155c.json +1 -0
- package/dist/api.js +1 -1
- package/dist/index.js +69 -89
- package/dist/web-fetch-contract-api.js +1 -2
- package/dist/web-fetch-provider.js +1 -2
- package/dist/web-search-contract-api.js +1 -2
- package/dist/web-search-provider.js +1 -2
- package/node_modules/typebox/build/format/duration.d.mts +2 -2
- package/node_modules/typebox/build/format/duration.mjs +2 -2
- package/node_modules/typebox/build/format/idn_email.d.mts +1 -0
- package/node_modules/typebox/build/format/idn_email.mjs +1 -0
- package/node_modules/typebox/build/format/idn_hostname.d.mts +1 -1
- package/node_modules/typebox/build/format/idn_hostname.mjs +1 -1
- package/node_modules/typebox/build/format/ipv4.d.mts +2 -2
- package/node_modules/typebox/build/format/ipv4.mjs +2 -2
- package/node_modules/typebox/build/format/ipv6.d.mts +1 -1
- package/node_modules/typebox/build/format/ipv6.mjs +1 -1
- package/node_modules/typebox/build/format/relative_json_pointer.d.mts +2 -2
- package/node_modules/typebox/build/format/relative_json_pointer.mjs +2 -2
- package/node_modules/typebox/build/schema/build.mjs +1 -0
- package/node_modules/typebox/build/schema/engine/_unique.d.mts +4 -2
- package/node_modules/typebox/build/schema/engine/_unique.mjs +7 -3
- package/node_modules/typebox/build/schema/engine/additionalItems.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/additionalProperties.d.mts +0 -3
- package/node_modules/typebox/build/schema/engine/additionalProperties.mjs +15 -17
- package/node_modules/typebox/build/schema/engine/contains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/index.d.mts +1 -0
- package/node_modules/typebox/build/schema/engine/index.mjs +1 -0
- package/node_modules/typebox/build/schema/engine/items.mjs +7 -4
- package/node_modules/typebox/build/schema/engine/maxContains.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/minContains.mjs +3 -3
- package/node_modules/typebox/build/schema/engine/oneOf.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/patternProperties.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/propertyNames.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/unevaluatedItems.mjs +2 -2
- package/node_modules/typebox/build/schema/engine/unevaluatedProperties.mjs +2 -2
- package/node_modules/typebox/build/system/hashing/hash.mjs +63 -34
- package/node_modules/typebox/build/system/locale/en_US.mjs +2 -1
- package/node_modules/typebox/build/system/memory/assign.d.mts +2 -8
- package/node_modules/typebox/build/system/memory/assign.mjs +13 -6
- package/node_modules/typebox/build/system/memory/clone.d.mts +4 -5
- package/node_modules/typebox/build/system/memory/clone.mjs +8 -96
- package/node_modules/typebox/build/system/memory/create.d.mts +1 -5
- package/node_modules/typebox/build/system/memory/create.mjs +18 -13
- package/node_modules/typebox/build/system/memory/deep.d.mts +2 -0
- package/node_modules/typebox/build/system/memory/deep.mjs +108 -0
- package/node_modules/typebox/build/system/memory/discard.d.mts +1 -1
- package/node_modules/typebox/build/system/memory/discard.mjs +9 -8
- package/node_modules/typebox/build/system/memory/finalize.d.mts +4 -0
- package/node_modules/typebox/build/system/memory/finalize.mjs +30 -0
- package/node_modules/typebox/build/system/memory/keys.d.mts +2 -0
- package/node_modules/typebox/build/system/memory/keys.mjs +8 -0
- package/node_modules/typebox/build/system/memory/update.d.mts +1 -4
- package/node_modules/typebox/build/system/memory/update.mjs +43 -16
- package/node_modules/typebox/build/type/engine/call/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/call/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/composite.d.mts +2 -24
- package/node_modules/typebox/build/type/engine/evaluate/composite.mjs +2 -29
- package/node_modules/typebox/build/type/engine/evaluate/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/index.mjs +1 -0
- package/node_modules/typebox/build/type/engine/evaluate/narrow.d.mts +5 -1
- package/node_modules/typebox/build/type/engine/evaluate/narrow.mjs +6 -1
- package/node_modules/typebox/build/type/engine/evaluate/property.d.mts +30 -0
- package/node_modules/typebox/build/type/engine/evaluate/property.mjs +29 -0
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/immutable/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/object/from_intersect.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/object/from_intersect.mjs +2 -2
- package/node_modules/typebox/build/type/engine/object/from_union.d.mts +2 -2
- package/node_modules/typebox/build/type/engine/object/from_union.mjs +2 -2
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/optional/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.d.mts +1 -3
- package/node_modules/typebox/build/type/engine/readonly/instantiate_add.mjs +1 -4
- package/node_modules/typebox/build/type/engine/this/index.d.mts +1 -0
- package/node_modules/typebox/build/type/engine/this/index.mjs +1 -0
- package/node_modules/typebox/build/value/clone/clone.d.mts +4 -3
- package/node_modules/typebox/build/value/clone/clone.mjs +5 -7
- package/node_modules/typebox/build/value/repair/from_cyclic.d.mts +2 -0
- package/node_modules/typebox/build/value/repair/from_cyclic.mjs +6 -0
- package/node_modules/typebox/build/value/shared/union_priority_sort.mjs +25 -14
- package/node_modules/typebox/package.json +1 -1
- package/node_modules/typebox/readme.md +1 -1
- package/package.json +5 -5
- package/node_modules/typebox/build/system/memory/freeze.d.mts +0 -4
- package/node_modules/typebox/build/system/memory/freeze.mjs +0 -6
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
export { t as createFirecrawlFreeWebSearchProvider, n as createFirecrawlWebSearchProvider } from "./.setup/firecrawl-search-provider-DBouVH9p.mjs";
|
|
2
2
|
import "./web-search-provider.js";
|
|
3
|
-
export { createFirecrawlFreeWebSearchProvider, createFirecrawlWebSearchProvider };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
|
|
2
|
-
export { createFirecrawlFreeWebSearchProvider, createFirecrawlWebSearchProvider };
|
|
1
|
+
export { t as createFirecrawlFreeWebSearchProvider, n as createFirecrawlWebSearchProvider } from "./.setup/firecrawl-search-provider-DBouVH9p.mjs";
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns true if the value is a valid
|
|
3
|
-
* @specification https://
|
|
2
|
+
* Returns true if the value is a valid duration.
|
|
3
|
+
* @specification https://www.rfc-editor.org/rfc/rfc3339.html#appendix-A
|
|
4
4
|
*/
|
|
5
5
|
export declare function IsDuration(value: string): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const Duration = /^P((\d+Y(\d+M(\d+D)?)?|\d+M(\d+D)?|\d+D)(T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S))?|T(\d+H(\d+M(\d+S)?)?|\d+M(\d+S)?|\d+S)|\d+W)$/;
|
|
2
2
|
/**
|
|
3
|
-
* Returns true if the value is a valid
|
|
4
|
-
* @specification https://
|
|
3
|
+
* Returns true if the value is a valid duration.
|
|
4
|
+
* @specification https://www.rfc-editor.org/rfc/rfc3339.html#appendix-A
|
|
5
5
|
*/
|
|
6
6
|
export function IsDuration(value) {
|
|
7
7
|
return Duration.test(value);
|
|
@@ -2,6 +2,7 @@ const IdnEmail = /^(?:[A-Za-z0-9!#$%&'*+\/=?^_`{|}~\u{0080}-\u{10FFFF}-]+(?:\.[A
|
|
|
2
2
|
/**
|
|
3
3
|
* Returns true if the value is an IdnEmail
|
|
4
4
|
* @specification https://datatracker.ietf.org/doc/html/rfc4952
|
|
5
|
+
* @specification https://datatracker.ietf.org/doc/html/rfc6531
|
|
5
6
|
*/
|
|
6
7
|
export function IsIdnEmail(value) {
|
|
7
8
|
return IdnEmail.test(value.normalize('NFC'));
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Returns true if the value is a valid internationalized (IDN) hostname.
|
|
3
|
-
* @specification https://
|
|
3
|
+
* @specification https://datatracker.ietf.org/doc/html/rfc5890
|
|
4
4
|
* @specification https://tools.ietf.org/html/rfc5891
|
|
5
5
|
* @specification https://tools.ietf.org/html/rfc5892
|
|
6
6
|
* @specification https://tools.ietf.org/html/rfc5893
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import * as Idna from './idna/index.mjs';
|
|
2
2
|
/**
|
|
3
3
|
* Returns true if the value is a valid internationalized (IDN) hostname.
|
|
4
|
-
* @specification https://
|
|
4
|
+
* @specification https://datatracker.ietf.org/doc/html/rfc5890
|
|
5
5
|
* @specification https://tools.ietf.org/html/rfc5891
|
|
6
6
|
* @specification https://tools.ietf.org/html/rfc5892
|
|
7
7
|
* @specification https://tools.ietf.org/html/rfc5893
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns true if the value is
|
|
3
|
-
* @specification
|
|
2
|
+
* Returns true if the value is an IPv4 address
|
|
3
|
+
* @specification https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2
|
|
4
4
|
*/
|
|
5
5
|
export declare function IsIPv4(value: string): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const IPv4 = /^(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)$/;
|
|
2
2
|
/**
|
|
3
|
-
* Returns true if the value is
|
|
4
|
-
* @specification
|
|
3
|
+
* Returns true if the value is an IPv4 address
|
|
4
|
+
* @specification https://datatracker.ietf.org/doc/html/rfc3986#section-3.2.2
|
|
5
5
|
*/
|
|
6
6
|
export function IsIPv4(value) {
|
|
7
7
|
return IPv4.test(value);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const IPv6 = /^(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:)?[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d)\.){3}(?:25[0-5]|2[0-4]\d|1\d\d|[1-9]?\d))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)$/i;
|
|
2
2
|
/**
|
|
3
3
|
* Returns true if the value is an IPv6 address
|
|
4
|
-
* @specification
|
|
4
|
+
* @specification https://datatracker.ietf.org/doc/html/rfc4291#section-2.2
|
|
5
5
|
*/
|
|
6
6
|
export function IsIPv6(value) {
|
|
7
7
|
return IPv6.test(value);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Returns true if the value is a relative
|
|
3
|
-
* @specification https://datatracker.ietf.org/doc/html/
|
|
2
|
+
* Returns true if the value is a relative JSON Pointer
|
|
3
|
+
* @specification https://datatracker.ietf.org/doc/html/draft-handrews-relative-json-pointer/
|
|
4
4
|
* @source https://github.com/ajv-validator/ajv-formats
|
|
5
5
|
*/
|
|
6
6
|
export declare function IsRelativeJsonPointer(value: string): boolean;
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
const RelativeJsonPointer = /^(?:0|[1-9][0-9]*)(?:#|(?:\/(?:[^~/]|~0|~1)*)*)$/;
|
|
2
2
|
/**
|
|
3
|
-
* Returns true if the value is a relative
|
|
4
|
-
* @specification https://datatracker.ietf.org/doc/html/
|
|
3
|
+
* Returns true if the value is a relative JSON Pointer
|
|
4
|
+
* @specification https://datatracker.ietf.org/doc/html/draft-handrews-relative-json-pointer/
|
|
5
5
|
* @source https://github.com/ajv-validator/ajv-formats
|
|
6
6
|
*/
|
|
7
7
|
export function IsRelativeJsonPointer(value) {
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
let index = 0;
|
|
2
|
-
/**
|
|
3
|
-
export function
|
|
4
|
-
return `
|
|
2
|
+
/** Creates a unique variable name */
|
|
3
|
+
export function CreateUnique() {
|
|
4
|
+
return `unique_${index++}`;
|
|
5
|
+
}
|
|
6
|
+
/** Resets the unique variable name counter */
|
|
7
|
+
export function ResetUnique() {
|
|
8
|
+
index = 0;
|
|
5
9
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Schema from '../types/index.mjs';
|
|
3
|
-
import
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
4
4
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
5
5
|
import { BuildSchemaPushStack, CheckSchemaPushStack, ErrorSchemaPushStack } from './schema.mjs';
|
|
6
6
|
// ------------------------------------------------------------------
|
|
@@ -13,14 +13,14 @@ function IsValid(schema) {
|
|
|
13
13
|
// Build
|
|
14
14
|
// ------------------------------------------------------------------
|
|
15
15
|
function BuildAdditionalItemsStandard(stack, context, schema, value) {
|
|
16
|
-
const [item, index] = [Unique(), Unique()];
|
|
16
|
+
const [item, index] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
17
17
|
const isSchema = BuildSchemaPushStack(stack, context, schema.additionalItems, item);
|
|
18
18
|
const isLength = E.IsLessThan(index, E.Constant(schema.items.length));
|
|
19
19
|
const addIndex = context.AddIndex(index);
|
|
20
20
|
return E.Every(value, E.Constant(0), [item, index], E.Or(isLength, E.And(isSchema, addIndex)));
|
|
21
21
|
}
|
|
22
22
|
function BuildAdditionalItemsFast(stack, context, schema, value) {
|
|
23
|
-
const [item, index] = [Unique(), Unique()];
|
|
23
|
+
const [item, index] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
24
24
|
const isSchema = BuildSchemaPushStack(stack, context, schema.additionalItems, item);
|
|
25
25
|
const isLength = E.IsLessThan(index, E.Constant(schema.items.length));
|
|
26
26
|
return E.Every(value, E.Constant(0), [item, index], E.Or(isLength, isSchema));
|
|
@@ -1,9 +1,6 @@
|
|
|
1
1
|
import * as Schema from '../types/index.mjs';
|
|
2
2
|
import * as Stack from './_stack.mjs';
|
|
3
3
|
import { BuildContext, CheckContext, ErrorContext } from './_context.mjs';
|
|
4
|
-
export declare function CanAdditionalPropertiesFast(_context: BuildContext, schema: Schema.XAdditionalProperties, _value: string): schema is Schema.XAdditionalProperties & Schema.XRequired;
|
|
5
|
-
export declare function BuildAdditionalPropertiesFast(_context: BuildContext, schema: Schema.XAdditionalProperties & Schema.XRequired, value: string): string;
|
|
6
|
-
export declare function BuildAdditionalPropertiesStandard(stack: Stack.XStack, context: BuildContext, schema: Schema.XAdditionalProperties, value: string): string;
|
|
7
4
|
export declare function BuildAdditionalProperties(stack: Stack.XStack, context: BuildContext, schema: Schema.XAdditionalProperties, value: string): string;
|
|
8
5
|
export declare function CheckAdditionalProperties(stack: Stack.XStack, context: CheckContext, schema: Schema.XAdditionalProperties, value: Record<PropertyKey, unknown>): boolean;
|
|
9
6
|
export declare function ErrorAdditionalProperties(stack: Stack.XStack, context: ErrorContext, schemaPath: string, instancePath: string, schema: Schema.XAdditionalProperties, value: Record<PropertyKey, unknown>): boolean;
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Schema from '../types/index.mjs';
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
3
4
|
import * as Externals from './_externals.mjs';
|
|
4
5
|
import * as Pathing from './_pathing.mjs';
|
|
5
|
-
import { Unique } from './_unique.mjs';
|
|
6
6
|
import { UnicodeRegExp } from './_regexp.mjs';
|
|
7
7
|
import { EmitGuard as E, Guard as G } from '../../guard/index.mjs';
|
|
8
8
|
import { BuildSchemaPushStack, CheckSchemaPushStack, ErrorSchemaPushStack } from './schema.mjs';
|
|
@@ -42,35 +42,33 @@ function GetPropertiesPattern(schema) {
|
|
|
42
42
|
return G.IsEqual(patterns.length, 0) ? '(?!)' : `(${patterns.join('|')})`;
|
|
43
43
|
}
|
|
44
44
|
// ------------------------------------------------------------------
|
|
45
|
-
// BuildAdditionalPropertiesFast
|
|
45
|
+
// BuildAdditionalPropertiesFast (AdditionalProperties False)
|
|
46
46
|
//
|
|
47
|
-
//
|
|
48
|
-
//
|
|
49
|
-
//
|
|
50
|
-
// - `additionalProperties` is explicitly set to false,
|
|
51
|
-
// - the schema uses only `properties` (no `patternProperties`),
|
|
52
|
-
// - and all defined properties are required (i.e., no optional keys).
|
|
53
|
-
//
|
|
54
|
-
// This constraint is common when enforcing strict object shapes
|
|
55
|
-
// with only known, fixed keys. When all these conditions are met,
|
|
56
|
-
// we can generate a simplified and efficient runtime check.
|
|
47
|
+
// - AdditionalProperties is explicitly set to false,
|
|
48
|
+
// - The schema uses only Properties (no PatternProperties),
|
|
49
|
+
// - Required contains exactly the keys in Properties.
|
|
57
50
|
//
|
|
58
51
|
// ------------------------------------------------------------------
|
|
59
|
-
|
|
52
|
+
function HasExactRequiredProperties(schema) {
|
|
53
|
+
const keys = G.Keys(schema.properties);
|
|
54
|
+
return G.IsEqual(keys.length, schema.required.length)
|
|
55
|
+
&& G.Every(keys, 0, (key) => schema.required.includes(key));
|
|
56
|
+
}
|
|
57
|
+
function CanAdditionalPropertiesFast(_context, schema, _value) {
|
|
60
58
|
return Schema.IsRequired(schema)
|
|
61
59
|
&& Schema.IsProperties(schema)
|
|
62
60
|
&& !Schema.IsPatternProperties(schema)
|
|
63
61
|
&& G.IsEqual(schema.additionalProperties, false)
|
|
64
|
-
&&
|
|
62
|
+
&& HasExactRequiredProperties(schema);
|
|
65
63
|
}
|
|
66
|
-
|
|
64
|
+
function BuildAdditionalPropertiesFast(_context, schema, value) {
|
|
67
65
|
return E.IsEqual(E.Member(E.Call(E.Member('Object', 'getOwnPropertyNames'), [value]), 'length'), E.Constant(schema.required.length));
|
|
68
66
|
}
|
|
69
67
|
// ------------------------------------------------------------------
|
|
70
68
|
// BuildAdditionalPropertiesStandard
|
|
71
69
|
// ------------------------------------------------------------------
|
|
72
|
-
|
|
73
|
-
const [key, _index] = [Unique(), Unique()];
|
|
70
|
+
function BuildAdditionalPropertiesStandard(stack, context, schema, value) {
|
|
71
|
+
const [key, _index] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
74
72
|
const regexp = Externals.CreateVariable(UnicodeRegExp(GetPropertiesPattern(schema)));
|
|
75
73
|
const isSchema = BuildSchemaPushStack(stack, context, schema.additionalProperties, `${value}[${key}]`);
|
|
76
74
|
const isKey = E.Call(E.Member(regexp, 'test'), [key]);
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Schema from '../types/index.mjs';
|
|
3
|
-
import
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
4
4
|
import { EmitGuard as E, Guard as G } from '../../guard/index.mjs';
|
|
5
5
|
import { BuildSchema, CheckSchema } from './schema.mjs';
|
|
6
6
|
// ------------------------------------------------------------------
|
|
@@ -13,13 +13,13 @@ function IsValid(schema) {
|
|
|
13
13
|
// Build
|
|
14
14
|
// ------------------------------------------------------------------
|
|
15
15
|
function BuildContainsStandard(stack, context, schema, value) {
|
|
16
|
-
const [item, index] = [Unique(), Unique()];
|
|
16
|
+
const [item, index] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
17
17
|
const isLength = E.Not(E.IsEqual(E.Member(value, 'length'), E.Constant(0)));
|
|
18
18
|
const isSome = E.SomeAll(value, [item, index], E.And(BuildSchema(stack, context, schema.contains, item), context.AddIndex(index)));
|
|
19
19
|
return E.And(isLength, isSome);
|
|
20
20
|
}
|
|
21
21
|
function BuildContainsFast(stack, context, schema, value) {
|
|
22
|
-
const [item] = [Unique()];
|
|
22
|
+
const [item] = [Unique.CreateUnique()];
|
|
23
23
|
const isLength = E.Not(E.IsEqual(E.Member(value, 'length'), E.Constant(0)));
|
|
24
24
|
const isSome = E.Some(value, [item, '_'], BuildSchema(stack, context, schema.contains, item));
|
|
25
25
|
return E.And(isLength, isSome);
|
|
@@ -4,6 +4,7 @@ export * from './_functions.mjs';
|
|
|
4
4
|
export * from './_reducer.mjs';
|
|
5
5
|
export * from './_refine.mjs';
|
|
6
6
|
export * from './_stack.mjs';
|
|
7
|
+
export * from './_unique.mjs';
|
|
7
8
|
export * from './additionalItems.mjs';
|
|
8
9
|
export * from './additionalProperties.mjs';
|
|
9
10
|
export * from './allOf.mjs';
|
|
@@ -7,6 +7,7 @@ export * from './_functions.mjs';
|
|
|
7
7
|
export * from './_reducer.mjs';
|
|
8
8
|
export * from './_refine.mjs';
|
|
9
9
|
export * from './_stack.mjs';
|
|
10
|
+
export * from './_unique.mjs';
|
|
10
11
|
// ------------------------------------------------------------------
|
|
11
12
|
// Schematics
|
|
12
13
|
// ------------------------------------------------------------------
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Schema from '../types/index.mjs';
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
3
4
|
import { BuildSchemaPushStack, CheckSchemaPushStack, ErrorSchemaPushStack } from './schema.mjs';
|
|
4
5
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
5
6
|
// ------------------------------------------------------------------
|
|
@@ -44,14 +45,16 @@ function ErrorItemsSized(stack, context, schemaPath, instancePath, schema, value
|
|
|
44
45
|
// ------------------------------------------------------------------
|
|
45
46
|
function BuildItemsUnsizedStandard(stack, context, schema, value) {
|
|
46
47
|
const offset = Schema.IsPrefixItems(schema) ? schema.prefixItems.length : 0;
|
|
47
|
-
const
|
|
48
|
+
const [item] = [Unique.CreateUnique()];
|
|
49
|
+
const isSchema = BuildSchemaPushStack(stack, context, schema.items, item);
|
|
48
50
|
const addIndex = context.AddIndex('index');
|
|
49
|
-
return E.Every(value, E.Constant(offset), [
|
|
51
|
+
return E.Every(value, E.Constant(offset), [item, 'index'], E.And(isSchema, addIndex));
|
|
50
52
|
}
|
|
51
53
|
function BuildItemsUnsizedFast(stack, context, schema, value) {
|
|
52
54
|
const offset = Schema.IsPrefixItems(schema) ? schema.prefixItems.length : 0;
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
+
const [item] = [Unique.CreateUnique()];
|
|
56
|
+
const isSchema = BuildSchemaPushStack(stack, context, schema.items, item);
|
|
57
|
+
return E.Every(value, E.Constant(offset), [item, 'index'], isSchema);
|
|
55
58
|
}
|
|
56
59
|
function BuildItemsUnsized(stack, context, schema, value) {
|
|
57
60
|
return context.UseUnevaluated()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Schema from '../types/index.mjs';
|
|
3
|
-
import
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
4
4
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
5
5
|
import { BuildSchema, CheckSchema } from './schema.mjs';
|
|
6
6
|
// ------------------------------------------------------------------
|
|
@@ -15,7 +15,7 @@ function IsValid(schema) {
|
|
|
15
15
|
export function BuildMaxContains(stack, context, schema, value) {
|
|
16
16
|
if (!IsValid(schema))
|
|
17
17
|
return E.Constant(true);
|
|
18
|
-
const [item] = [Unique()];
|
|
18
|
+
const [item] = [Unique.CreateUnique()];
|
|
19
19
|
const count = E.Counted(value, [item, '_'], BuildSchema(stack, context, schema.contains, item));
|
|
20
20
|
return E.IsLessEqualThan(count, E.Constant(schema.maxContains));
|
|
21
21
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Schema from '../types/index.mjs';
|
|
3
|
-
import
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
4
4
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
5
5
|
import { BuildSchema, CheckSchema } from './schema.mjs';
|
|
6
6
|
// ------------------------------------------------------------------
|
|
@@ -13,12 +13,12 @@ function IsValid(schema) {
|
|
|
13
13
|
// Build
|
|
14
14
|
// ------------------------------------------------------------------
|
|
15
15
|
function BuildMinContainsStandard(stack, context, schema, value) {
|
|
16
|
-
const [item, index] = [Unique(), Unique()];
|
|
16
|
+
const [item, index] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
17
17
|
const count = E.Counted(value, [item, index], E.And(BuildSchema(stack, context, schema.contains, item), context.AddIndex(index)));
|
|
18
18
|
return E.IsGreaterEqualThan(count, E.Constant(schema.minContains));
|
|
19
19
|
}
|
|
20
20
|
function BuildMinContainsFast(stack, context, schema, value) {
|
|
21
|
-
const [item] = [Unique()];
|
|
21
|
+
const [item] = [Unique.CreateUnique()];
|
|
22
22
|
const count = E.Counted(value, [item, '_'], BuildSchema(stack, context, schema.contains, item));
|
|
23
23
|
return E.IsGreaterEqualThan(count, E.Constant(schema.minContains));
|
|
24
24
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import { Reducer } from './_reducer.mjs';
|
|
3
|
-
import
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
4
4
|
import { CheckContext, ErrorContext } from './_context.mjs';
|
|
5
5
|
import { BuildSchema, CheckSchema, ErrorSchema } from './schema.mjs';
|
|
6
6
|
import { EmitGuard as E, Guard as G } from '../../guard/index.mjs';
|
|
@@ -11,7 +11,7 @@ function BuildOneOfStandard(stack, context, schema, value) {
|
|
|
11
11
|
return Reducer(stack, context, schema.oneOf, value, E.IsEqual(E.Member('results', 'length'), E.Constant(1)));
|
|
12
12
|
}
|
|
13
13
|
function BuildOneOfFast(stack, context, schema, value) {
|
|
14
|
-
const [result] = [Unique()];
|
|
14
|
+
const [result] = [Unique.CreateUnique()];
|
|
15
15
|
const results = E.ArrayLiteral(schema.oneOf.map((schema) => BuildSchema(stack, context, schema, value)));
|
|
16
16
|
const count = E.Counted(results, [result, '_'], E.IsEqual(result, E.Constant(true)));
|
|
17
17
|
return E.IsEqual(count, E.Constant(1));
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
|
+
import * as Unique from './_unique.mjs';
|
|
2
3
|
import * as Externals from './_externals.mjs';
|
|
3
4
|
import * as Pathing from './_pathing.mjs';
|
|
4
|
-
import { Unique } from './_unique.mjs';
|
|
5
5
|
import { UnicodeRegExp } from './_regexp.mjs';
|
|
6
6
|
import { BuildSchemaPushStack, CheckSchemaPushStack, ErrorSchemaPushStack } from './schema.mjs';
|
|
7
7
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
@@ -10,7 +10,7 @@ import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
|
10
10
|
// ------------------------------------------------------------------
|
|
11
11
|
export function BuildPatternProperties(stack, context, schema, value) {
|
|
12
12
|
return E.ReduceAnd(G.Entries(schema.patternProperties).map(([pattern, schema]) => {
|
|
13
|
-
const [key, prop] = [Unique(), Unique()];
|
|
13
|
+
const [key, prop] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
14
14
|
const regexp = Externals.CreateVariable(UnicodeRegExp(pattern));
|
|
15
15
|
const notKey = E.Not(E.Call(E.Member(regexp, 'test'), [key]));
|
|
16
16
|
const isSchema = BuildSchemaPushStack(stack, context, schema, prop);
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import * as Pathing from './_pathing.mjs';
|
|
3
|
-
import
|
|
3
|
+
import * as Unique from './_unique.mjs';
|
|
4
4
|
import { BuildSchema, CheckSchema, ErrorSchema } from './schema.mjs';
|
|
5
5
|
import { EmitGuard as E, Guard as G } from '../../guard/index.mjs';
|
|
6
6
|
// ------------------------------------------------------------------
|
|
7
7
|
// Build
|
|
8
8
|
// ------------------------------------------------------------------
|
|
9
9
|
export function BuildPropertyNames(stack, context, schema, value) {
|
|
10
|
-
const [key, _index] = [Unique(), Unique()];
|
|
10
|
+
const [key, _index] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
11
11
|
return E.Every(E.Keys(value), E.Constant(0), [key, _index], BuildSchema(stack, context, schema.propertyNames, key));
|
|
12
12
|
}
|
|
13
13
|
// ------------------------------------------------------------------
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
|
-
import
|
|
2
|
+
import * as Unique from './_unique.mjs';
|
|
3
3
|
import { ErrorContext } from './_context.mjs';
|
|
4
4
|
import { BuildSchema, CheckSchema, ErrorSchema } from './schema.mjs';
|
|
5
5
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
@@ -7,7 +7,7 @@ import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
|
7
7
|
// Build
|
|
8
8
|
// ------------------------------------------------------------------
|
|
9
9
|
export function BuildUnevaluatedItems(stack, context, schema, value) {
|
|
10
|
-
const [index, item] = [Unique(), Unique()];
|
|
10
|
+
const [index, item] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
11
11
|
const indices = E.Call(E.Member('context', 'GetIndices'), []);
|
|
12
12
|
const hasIndex = E.Call(E.Member('indices', 'has'), [index]);
|
|
13
13
|
const isSchema = BuildSchema(stack, context, schema.unevaluatedItems, item);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
|
-
import
|
|
2
|
+
import * as Unique from './_unique.mjs';
|
|
3
3
|
import { ErrorContext } from './_context.mjs';
|
|
4
4
|
import { BuildSchema, CheckSchema, ErrorSchema } from './schema.mjs';
|
|
5
5
|
import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
@@ -7,7 +7,7 @@ import { Guard as G, EmitGuard as E } from '../../guard/index.mjs';
|
|
|
7
7
|
// Build
|
|
8
8
|
// ------------------------------------------------------------------
|
|
9
9
|
export function BuildUnevaluatedProperties(stack, context, schema, value) {
|
|
10
|
-
const [key, prop] = [Unique(), Unique()];
|
|
10
|
+
const [key, prop] = [Unique.CreateUnique(), Unique.CreateUnique()];
|
|
11
11
|
const keys = E.Call(E.Member('context', 'GetKeys'), []);
|
|
12
12
|
const hasKey = E.Call(E.Member('keys', 'has'), [key]);
|
|
13
13
|
const addKey = E.Call(E.Member('context', 'AddKey'), [key]);
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
// deno-fmt-ignore-file
|
|
2
2
|
import { Unreachable } from '../unreachable/index.mjs';
|
|
3
|
-
import {
|
|
3
|
+
import { GlobalsGuard, Guard } from '../../guard/index.mjs';
|
|
4
4
|
// ------------------------------------------------------------------
|
|
5
5
|
// InstanceKeys
|
|
6
6
|
//
|
|
7
|
-
// Retrieves all enumerable and non-enumerable own property keys
|
|
8
|
-
// and inherited prototype keys (excluding symbols and the 'constructor')
|
|
7
|
+
// Retrieves all enumerable and non-enumerable own property keys
|
|
8
|
+
// and inherited prototype keys (excluding symbols and the 'constructor')
|
|
9
9
|
// from an object instance.
|
|
10
10
|
//
|
|
11
|
-
// This function is useful for differentiating between class instances
|
|
12
|
-
// based on their structural keys rather than relying on the
|
|
13
|
-
// constructor name. It provides a more reliable structural comparison
|
|
11
|
+
// This function is useful for differentiating between class instances
|
|
12
|
+
// based on their structural keys rather than relying on the
|
|
13
|
+
// constructor name. It provides a more reliable structural comparison
|
|
14
14
|
// by capturing both own and prototype properties.
|
|
15
15
|
//
|
|
16
16
|
// ------------------------------------------------------------------
|
|
@@ -40,38 +40,57 @@ function IsIEEE754(value) {
|
|
|
40
40
|
// ------------------------------------------------------------------
|
|
41
41
|
// ByteMarker
|
|
42
42
|
// ------------------------------------------------------------------
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
})(ByteMarker || (ByteMarker = {}));
|
|
43
|
+
const ByteMarker = {
|
|
44
|
+
Array: 0x0,
|
|
45
|
+
BigInt: 0x1,
|
|
46
|
+
Boolean: 0x2,
|
|
47
|
+
Date: 0x3,
|
|
48
|
+
Constructor: 0x4,
|
|
49
|
+
Function: 0x5,
|
|
50
|
+
Null: 0x6,
|
|
51
|
+
Number: 0x7,
|
|
52
|
+
Object: 0x8,
|
|
53
|
+
RegExp: 0x9,
|
|
54
|
+
String: 0xA,
|
|
55
|
+
Symbol: 0xB,
|
|
56
|
+
TypeArray: 0xC,
|
|
57
|
+
Undefined: 0xD
|
|
58
|
+
};
|
|
60
59
|
// ------------------------------------------------------------------
|
|
61
60
|
// State
|
|
62
61
|
// ------------------------------------------------------------------
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
62
|
+
//
|
|
63
|
+
// The 64-bit accumulator is held as four 16-bit limbs (A0 is the least
|
|
64
|
+
// significant) so the FNV1A64 operation can be computed with number
|
|
65
|
+
// arithmetic, avoiding a BigInt multiply and modulo for every byte.
|
|
66
|
+
//
|
|
67
|
+
// Offset: 14695981039346656037 (0xCBF29CE484222325)
|
|
68
|
+
//
|
|
69
|
+
// ------------------------------------------------------------------
|
|
70
|
+
let A0 = 0x2325, A1 = 0x8422, A2 = 0x9CE4, A3 = 0xCBF2;
|
|
66
71
|
const F64 = new Float64Array(1);
|
|
67
72
|
const F64In = new DataView(F64.buffer);
|
|
68
73
|
const F64Out = new Uint8Array(F64.buffer);
|
|
69
74
|
// ------------------------------------------------------------------
|
|
70
75
|
// Operation
|
|
76
|
+
//
|
|
77
|
+
// Prime: 1099511628211 (0x100000001B3 = 2^40 + 0x1B3)
|
|
78
|
+
//
|
|
79
|
+
// The multiply is computed as (A * 0x1B3) + (A << 40) modulo 2^64,
|
|
80
|
+
// where (A << 40) adds (A0 << 8) to the third limb and (A1 << 8)
|
|
81
|
+
// to the fourth.
|
|
82
|
+
//
|
|
71
83
|
// ------------------------------------------------------------------
|
|
72
84
|
function FNV1A64_OP(byte) {
|
|
73
|
-
|
|
74
|
-
|
|
85
|
+
const L0 = A0 ^ byte;
|
|
86
|
+
const T0 = L0 * 0x1B3;
|
|
87
|
+
const T1 = A1 * 0x1B3 + (T0 >>> 16);
|
|
88
|
+
const T2 = A2 * 0x1B3 + (T1 >>> 16) + (L0 << 8);
|
|
89
|
+
const T3 = A3 * 0x1B3 + (T2 >>> 16) + (A1 << 8);
|
|
90
|
+
A0 = T0 & 0xFFFF;
|
|
91
|
+
A1 = T1 & 0xFFFF;
|
|
92
|
+
A2 = T2 & 0xFFFF;
|
|
93
|
+
A3 = T3 & 0xFFFF;
|
|
75
94
|
}
|
|
76
95
|
// ------------------------------------------------------------------
|
|
77
96
|
// Array
|
|
@@ -159,8 +178,15 @@ function FromRegExp(value) {
|
|
|
159
178
|
const encoder = new TextEncoder();
|
|
160
179
|
function FromString(value) {
|
|
161
180
|
FNV1A64_OP(ByteMarker.String);
|
|
162
|
-
for (
|
|
163
|
-
|
|
181
|
+
for (let i = 0; i < value.length; i++) {
|
|
182
|
+
const code = value.charCodeAt(i);
|
|
183
|
+
if (code > 0x7F) {
|
|
184
|
+
for (const byte of encoder.encode(value.slice(i))) {
|
|
185
|
+
FNV1A64_OP(byte);
|
|
186
|
+
}
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
FNV1A64_OP(code);
|
|
164
190
|
}
|
|
165
191
|
}
|
|
166
192
|
// ------------------------------------------------------------------
|
|
@@ -220,13 +246,16 @@ function FromValue(value) {
|
|
|
220
246
|
// ------------------------------------------------------------------
|
|
221
247
|
// Hash
|
|
222
248
|
// ------------------------------------------------------------------
|
|
249
|
+
function Hex(limb) {
|
|
250
|
+
return limb.toString(16).padStart(4, '0');
|
|
251
|
+
}
|
|
223
252
|
/** Generates a FNV1A-64 non cryptographic hash of the given value */
|
|
224
253
|
export function HashCode(value) {
|
|
225
|
-
|
|
226
|
-
FromValue(value);
|
|
227
|
-
return Accumulator;
|
|
254
|
+
return BigInt(`0x${Hash(value)}`);
|
|
228
255
|
}
|
|
229
256
|
/** Generates a FNV1A-64 non cryptographic hash of the given value */
|
|
230
257
|
export function Hash(value) {
|
|
231
|
-
|
|
258
|
+
A0 = 0x2325, A1 = 0x8422, A2 = 0x9CE4, A3 = 0xCBF2;
|
|
259
|
+
FromValue(value);
|
|
260
|
+
return `${Hex(A3)}${Hex(A2)}${Hex(A1)}${Hex(A0)}`;
|
|
232
261
|
}
|
|
@@ -33,7 +33,8 @@ export function en_US(error) {
|
|
|
33
33
|
case 'unevaluatedProperties': return 'must not have unevaluated properties';
|
|
34
34
|
case 'uniqueItems': return `must not have duplicate items`;
|
|
35
35
|
case '~refine': return error.params.message;
|
|
36
|
-
// deno-coverage-ignore - unreachable
|
|
36
|
+
// deno-coverage-ignore-start - unreachable
|
|
37
37
|
default: return 'an unknown validation error occurred';
|
|
38
|
+
// deno-coverage-ignore-stop
|
|
38
39
|
}
|
|
39
40
|
}
|