@shaclmate/compiler 4.0.49 → 4.0.51

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.
Files changed (26) hide show
  1. package/dist/_ShapesGraphToAstTransformer/transformShapeToAstStructType.js +7 -2
  2. package/dist/generators/ts/ObjectType.d.ts +1 -0
  3. package/dist/generators/ts/ObjectType.js +12 -1
  4. package/dist/generators/ts/Snippets.d.ts +3 -0
  5. package/dist/generators/ts/Snippets.js +21 -0
  6. package/dist/generators/ts/_ObjectType/AbstractProperty.d.ts +1 -4
  7. package/dist/generators/ts/_ObjectType/IdentifierProperty.js +2 -13
  8. package/dist/generators/ts/_ObjectType/ObjectType_equalsFunctionExpression.js +6 -2
  9. package/dist/generators/ts/_ObjectType/ObjectType_fromRdfResourceFunctionExpression.js +6 -11
  10. package/dist/generators/ts/_ObjectType/ObjectType_schemaExpression.js +4 -1
  11. package/dist/generators/ts/_ObjectType/ObjectType_toRdfResourceFunctionExpression.js +3 -3
  12. package/dist/generators/ts/_ObjectType/ShaclProperty.js +8 -16
  13. package/dist/generators/ts/_snippets/snippets_EqualsFunction.d.ts +3 -0
  14. package/dist/generators/ts/_snippets/snippets_EqualsFunction.js +4 -0
  15. package/dist/generators/ts/_snippets/snippets_propertyEquals.d.ts +3 -0
  16. package/dist/generators/ts/_snippets/snippets_propertyEquals.js +11 -0
  17. package/dist/generators/ts/_snippets/snippets_rdfResourceIdentifierValues.d.ts +3 -0
  18. package/dist/generators/ts/_snippets/snippets_rdfResourceIdentifierValues.js +12 -0
  19. package/dist/input/ShapesGraph.d.ts +1 -1
  20. package/dist/input/ShapesGraph.js +1 -1
  21. package/dist/input/index.d.ts +1 -1
  22. package/dist/input/index.js +1 -1
  23. package/dist/input/{generated.d.ts → input.shaclmate.d.ts} +536 -43
  24. package/dist/input/{generated.js → input.shaclmate.js} +673 -495
  25. package/dist/input/input.shaclmate.ttl +85 -0
  26. package/package.json +602 -19
@@ -67,8 +67,13 @@ export function transformShapeToAstStructType(shape, shapeStack) {
67
67
  const isClass = nodeShape.subClassOf.length > 0 ||
68
68
  nodeShape.types.some((type) => type.equals(owl.Class) || type.equals(rdfs.Class));
69
69
  let fromRdfType = nodeShape.fromRdfType.alt(nodeShape.rdfType);
70
- if (isClass && nodeShapeIdentifier.termType === "NamedNode") {
71
- fromRdfType = fromRdfType.alt(Maybe.of(nodeShapeIdentifier));
70
+ if (isClass) {
71
+ if (nodeShapeIdentifier.termType === "NamedNode") {
72
+ fromRdfType = fromRdfType.alt(Maybe.of(nodeShapeIdentifier));
73
+ }
74
+ }
75
+ else if (nodeShape.targetClasses.length > 0) {
76
+ fromRdfType = fromRdfType.alt(Maybe.of(nodeShape.targetClasses[0]));
72
77
  }
73
78
  const toRdfTypes = nodeShape.toRdfTypes.concat();
74
79
  if (toRdfTypes.length === 0) {
@@ -69,6 +69,7 @@ export declare class ObjectType extends AbstractType {
69
69
  protected get createFunction(): Code;
70
70
  protected get thisVariable(): Code;
71
71
  protected get toJsonFunction(): Code;
72
+ protected get toRdfTypesVariable(): Maybe<Code>;
72
73
  protected get toStringFunction(): Code;
73
74
  private get inlineExpression();
74
75
  fromJsonExpression({ variables, }: Parameters<AbstractType["fromJsonExpression"]>[0]): Code;
@@ -40,7 +40,7 @@ import { ObjectType_valueSparqlConstructTriplesFunctionExpression } from "./_Obj
40
40
  import { ObjectType_valueSparqlWherePatternsFunctionExpression } from "./_ObjectType/ObjectType_valueSparqlWherePatternsFunctionExpression.js";
41
41
  import { ShaclProperty as _ShaclProperty } from "./_ObjectType/ShaclProperty.js";
42
42
  import { AbstractType } from "./AbstractType.js";
43
- import { code, def, joinCode } from "./ts-poet-wrapper.js";
43
+ import { arrayOf, code, def, joinCode } from "./ts-poet-wrapper.js";
44
44
  import { tsComment } from "./tsComment.js";
45
45
  export class ObjectType extends AbstractType {
46
46
  toRdfTypes;
@@ -339,6 +339,14 @@ ${joinCode(staticModuleDeclarations, { on: "\n\n" })}
339
339
  .map((name) => code `${name}.toJson`)
340
340
  .orDefaultLazy(() => ObjectType_toJsonFunctionExpression.call(this));
341
341
  }
342
+ get toRdfTypesVariable() {
343
+ if (this.toRdfTypes.length === 0) {
344
+ return Maybe.empty();
345
+ }
346
+ return Maybe.of(this.name
347
+ .map((name) => code `${name}.schema.toRdfTypes`)
348
+ .orDefaultLazy(() => code `${arrayOf(...this.toRdfTypes.map((toRdfType) => this.rdfjsTermExpression(toRdfType)))}`));
349
+ }
342
350
  get toStringFunction() {
343
351
  return this.name
344
352
  .map((name) => code `${name}.${this.configuration.syntheticNamePrefix}toString`)
@@ -478,6 +486,9 @@ __decorate([
478
486
  __decorate([
479
487
  Memoize()
480
488
  ], ObjectType.prototype, "toJsonFunction", null);
489
+ __decorate([
490
+ Memoize()
491
+ ], ObjectType.prototype, "toRdfTypesVariable", null);
481
492
  __decorate([
482
493
  Memoize()
483
494
  ], ObjectType.prototype, "toStringFunction", null);
@@ -22,6 +22,7 @@ export declare class Snippets {
22
22
  get DateFilter(): Snippet;
23
23
  get DateSchema(): Snippet;
24
24
  get DefaultValueSchema(): Snippet;
25
+ get EqualsFunction(): Snippet;
25
26
  get EqualsResult(): Snippet;
26
27
  get FocusSparqlConstructTriplesFunction(): Snippet;
27
28
  get FocusSparqlWherePatternsFunction(): Snippet;
@@ -147,6 +148,8 @@ export declare class Snippets {
147
148
  get parseBlankNode(): Snippet;
148
149
  get parseIdentifier(): Snippet;
149
150
  get parseIri(): Snippet;
151
+ get propertyEquals(): Snippet;
152
+ get rdfResourceIdentifierValues(): Snippet;
150
153
  get sequenceRecord(): Snippet;
151
154
  get setFromRdfResourceValues(): Snippet;
152
155
  get setSparqlConstructTriples(): Snippet;
@@ -53,6 +53,7 @@ import { snippets_decodeBigDecimalLiteral } from "./_snippets/snippets_decodeBig
53
53
  import { snippets_deduplicateSparqlPatterns } from "./_snippets/snippets_deduplicateSparqlPatterns.js";
54
54
  import { snippets_defaultValueFromRdfResourceValues } from "./_snippets/snippets_defaultValueFromRdfResourceValues.js";
55
55
  import { snippets_defaultValueSparqlWherePatterns } from "./_snippets/snippets_defaultValueSparqlWherePatterns.js";
56
+ import { snippets_EqualsFunction } from "./_snippets/snippets_EqualsFunction.js";
56
57
  import { snippets_EqualsResult } from "./_snippets/snippets_EqualsResult.js";
57
58
  import { snippets_ensureRdfResourceType } from "./_snippets/snippets_ensureRdfResourceType.js";
58
59
  import { snippets_FocusSparqlConstructTriplesFunction } from "./_snippets/snippets_FocusSparqlConstructTriplesFunction.js";
@@ -125,7 +126,9 @@ import { snippets_PropertyPath } from "./_snippets/snippets_PropertyPath.js";
125
126
  import { snippets_parseBlankNode } from "./_snippets/snippets_parseBlankNode.js";
126
127
  import { snippets_parseIdentifier } from "./_snippets/snippets_parseIdentifier.js";
127
128
  import { snippets_parseIri } from "./_snippets/snippets_parseIri.js";
129
+ import { snippets_propertyEquals } from "./_snippets/snippets_propertyEquals.js";
128
130
  import { snippets_RdfVocabularies } from "./_snippets/snippets_RdfVocabularies.js";
131
+ import { snippets_rdfResourceIdentifierValues } from "./_snippets/snippets_rdfResourceIdentifierValues.js";
129
132
  import { snippets_ShaclPropertySchema } from "./_snippets/snippets_ShaclPropertySchema.js";
130
133
  import { snippets_SparqlFilterPattern } from "./_snippets/snippets_SparqlFilterPattern.js";
131
134
  import { snippets_SparqlPattern } from "./_snippets/snippets_SparqlPattern.js";
@@ -205,6 +208,9 @@ export class Snippets {
205
208
  get DefaultValueSchema() {
206
209
  return this.snippet(snippets_DefaultValueSchema);
207
210
  }
211
+ get EqualsFunction() {
212
+ return this.snippet(snippets_EqualsFunction);
213
+ }
208
214
  get EqualsResult() {
209
215
  return this.snippet(snippets_EqualsResult);
210
216
  }
@@ -596,6 +602,12 @@ export class Snippets {
596
602
  get parseIri() {
597
603
  return this.snippet(snippets_parseIri);
598
604
  }
605
+ get propertyEquals() {
606
+ return this.snippet(snippets_propertyEquals);
607
+ }
608
+ get rdfResourceIdentifierValues() {
609
+ return this.snippet(snippets_rdfResourceIdentifierValues);
610
+ }
599
611
  get sequenceRecord() {
600
612
  return this.snippet(snippets_sequenceRecord);
601
613
  }
@@ -716,6 +728,9 @@ __decorate([
716
728
  __decorate([
717
729
  Memoize()
718
730
  ], Snippets.prototype, "DefaultValueSchema", null);
731
+ __decorate([
732
+ Memoize()
733
+ ], Snippets.prototype, "EqualsFunction", null);
719
734
  __decorate([
720
735
  Memoize()
721
736
  ], Snippets.prototype, "EqualsResult", null);
@@ -1088,6 +1103,12 @@ __decorate([
1088
1103
  __decorate([
1089
1104
  Memoize()
1090
1105
  ], Snippets.prototype, "parseIri", null);
1106
+ __decorate([
1107
+ Memoize()
1108
+ ], Snippets.prototype, "propertyEquals", null);
1109
+ __decorate([
1110
+ Memoize()
1111
+ ], Snippets.prototype, "rdfResourceIdentifierValues", null);
1091
1112
  __decorate([
1092
1113
  Memoize()
1093
1114
  ], Snippets.prototype, "sequenceRecord", null);
@@ -126,11 +126,8 @@ export declare abstract class AbstractProperty<TypeT extends Pick<Type, "express
126
126
  */
127
127
  abstract fromRdfResourceValuesInitializer(parameters: {
128
128
  variables: {
129
- context: Code;
130
129
  focusResource: Code;
131
- graph: Code;
132
- objectSet: Code;
133
- preferredLanguages: Code;
130
+ options: Code;
134
131
  };
135
132
  }): Maybe<Code>;
136
133
  /**
@@ -123,20 +123,9 @@ export class IdentifierProperty extends AbstractProperty {
123
123
  })}`);
124
124
  }
125
125
  fromRdfResourceValuesInitializer({ variables, }) {
126
- const options = {
127
- context: variables.context,
128
- graph: variables.graph,
129
- focusResource: variables.focusResource,
130
- preferredLanguages: variables.preferredLanguages,
131
- propertyPath: this.rdfjsTermExpression(rdf.subject),
132
- schema: this.typeSchemaVariable,
133
- };
134
- if (this.configuration.features.has("ObjectSet")) {
135
- options["objectSet"] = variables.objectSet;
136
- }
137
126
  return Maybe.of(code `${this.name}: ${this.type.fromRdfResourceValuesFunction}(
138
- new ${this.reusables.imports.Resource}.Value(${{ dataFactory: this.reusables.imports.dataFactory, focusResource: variables.focusResource, propertyPath: this.rdfjsTermExpression(rdf.subject), term: code `${variables.focusResource}.identifier` }}).toValues(),
139
- ${options}
127
+ ${this.reusables.snippets.rdfResourceIdentifierValues}(${variables.focusResource}),
128
+ { ...${variables.options}, focusResource: ${variables.focusResource}, propertyPath: ${this.rdfjsTermExpression(rdf.subject)}, schema: ${this.typeSchemaVariable} }
140
129
  ).chain(values => values.head())`);
141
130
  }
142
131
  hashStatements({ variables, }) {
@@ -1,11 +1,15 @@
1
- import { code, joinCode } from "../ts-poet-wrapper.js";
1
+ import { code, joinCode, literalOf } from "../ts-poet-wrapper.js";
2
2
  export function ObjectType_equalsFunctionExpression() {
3
3
  const chain = [];
4
4
  for (const property of this.properties) {
5
5
  if (property.kind === "Discriminant") {
6
6
  continue;
7
7
  }
8
- chain.push(code `(${property.type.equalsFunction})(${property.accessExpression({ variables: { object: code `left` } })}, ${property.accessExpression({ variables: { object: code `right` } })}).mapLeft(propertyValuesUnequal => ({ left, right, propertyName: "${property.name}", propertyValuesUnequal, type: "property" as const }))`);
8
+ chain.push(code `${this.reusables.snippets.propertyEquals}(
9
+ { equalsFunction: ${property.type.equalsFunction}, name: ${literalOf(property.name)} },
10
+ [left, ${property.accessExpression({ variables: { object: code `left` } })}],
11
+ [right, ${property.accessExpression({ variables: { object: code `right` } })}],
12
+ )`);
9
13
  }
10
14
  return code `\
11
15
  ((left, right) =>
@@ -1,22 +1,14 @@
1
1
  import { invariant } from "ts-invariant";
2
2
  import { arrayOf, code, joinCode } from "../ts-poet-wrapper.js";
3
3
  export function ObjectType_fromRdfResourceFunctionExpression() {
4
- const syntheticNamePrefix = this.configuration.syntheticNamePrefix;
5
- const optionsVariable = `_${syntheticNamePrefix}options`;
4
+ const optionsVariable = code `options`;
6
5
  const variables = {
7
6
  context: code `${optionsVariable}.context`,
8
7
  graph: code `${optionsVariable}.graph`,
9
8
  ignoreRdfType: code `${optionsVariable}.ignoreRdfType`,
10
9
  objectSet: code `${optionsVariable}.objectSet`,
11
10
  preferredLanguages: code `${optionsVariable}.preferredLanguages`,
12
- resource: code `${syntheticNamePrefix}resource`,
13
- };
14
- const propertyFromRdfResourceValuesVariables = {
15
- context: variables.context,
16
- focusResource: variables.resource,
17
- graph: variables.graph,
18
- objectSet: variables.objectSet,
19
- preferredLanguages: variables.preferredLanguages,
11
+ resource: code `resource`,
20
12
  };
21
13
  const chains = [];
22
14
  this.fromRdfTypeVariable.ifJust((fromRdfTypeVariable) => {
@@ -27,7 +19,10 @@ export function ObjectType_fromRdfResourceFunctionExpression() {
27
19
  });
28
20
  const propertyFromRdfResourceValuesInitializers = this.properties.flatMap((property) => property
29
21
  .fromRdfResourceValuesInitializer({
30
- variables: propertyFromRdfResourceValuesVariables,
22
+ variables: {
23
+ focusResource: variables.resource,
24
+ options: optionsVariable,
25
+ },
31
26
  })
32
27
  .toList());
33
28
  invariant(Object.keys(propertyFromRdfResourceValuesInitializers).length > 0);
@@ -1,5 +1,5 @@
1
1
  import { invariant } from "ts-invariant";
2
- import { code } from "../ts-poet-wrapper.js";
2
+ import { arrayOf, code } from "../ts-poet-wrapper.js";
3
3
  export function ObjectType_schemaExpression() {
4
4
  const schema = {};
5
5
  this.fromRdfType.ifJust((fromRdfType) => {
@@ -13,6 +13,9 @@ export function ObjectType_schemaExpression() {
13
13
  }
14
14
  invariant(Object.keys(properties).length > 0);
15
15
  schema["properties"] = properties;
16
+ if (this.toRdfTypes.length > 0) {
17
+ schema["toRdfTypes"] = arrayOf(...this.toRdfTypes.map((toRdfType) => this.rdfjsTermExpression(toRdfType)));
18
+ }
16
19
  return code `${schema} as const`;
17
20
  }
18
21
  //# sourceMappingURL=ObjectType_schemaExpression.js.map
@@ -2,9 +2,9 @@ import { rdf } from "@tpluscode/rdf-ns-builders";
2
2
  import { code, joinCode } from "../ts-poet-wrapper.js";
3
3
  export function ObjectType_toRdfResourceFunctionExpression() {
4
4
  const statements = [];
5
- if (this.toRdfTypes.length > 0) {
6
- statements.push(code `if (!${variables.ignoreRdfType}) { ${joinCode(this.toRdfTypes.map((toRdfType) => code `${variables.resource}.add(${this.rdfjsTermExpression(rdf.type)}, ${this.reusables.imports.dataFactory}.namedNode("${toRdfType.value}"), ${variables.graph});`), { on: " " })} }`);
7
- }
5
+ this.toRdfTypesVariable.ifJust((toRdfTypesVariable) => {
6
+ statements.push(code `if (!${variables.ignoreRdfType}) { ${variables.resource}.add(${this.rdfjsTermExpression(rdf.type)}, ${toRdfTypesVariable}, ${variables.graph}); }`);
7
+ });
8
8
  for (const property of this.properties) {
9
9
  statements.push(...property.toRdfRdfResourceValuesStatements({
10
10
  variables: {
@@ -166,22 +166,14 @@ export class ShaclProperty extends AbstractProperty {
166
166
  })}`);
167
167
  }
168
168
  fromRdfResourceValuesInitializer({ variables, }) {
169
- const parameters = {
170
- context: variables.context,
171
- graph: variables.graph,
172
- focusResource: variables.focusResource,
173
- // Assume the property has the correct range and ignore the object's RDF type.
174
- // This also accommodates the case where the object of a property is a dangling identifier that's not the
175
- // subject of any statements.
176
- ignoreRdfType: true,
177
- preferredLanguages: variables.preferredLanguages,
178
- propertySchema: this.schemaVariable,
179
- typeFromRdfResourceValues: this.type.fromRdfResourceValuesFunction,
180
- };
181
- if (this.configuration.features.has("ObjectSet")) {
182
- parameters["objectSet"] = variables.objectSet;
183
- }
184
- return Maybe.of(code `${this.name}: ${this.reusables.snippets.shaclPropertyFromRdf}<${this.type.expression}, ${this.type.schemaType}>(${parameters})`);
169
+ return Maybe.of(code `${this.name}:
170
+ ${this.reusables.snippets.shaclPropertyFromRdf}<${this.type.expression}, ${this.type.schemaType}>({
171
+ ...${variables.options},
172
+ focusResource: ${variables.focusResource},
173
+ ignoreRdfType: true,
174
+ propertySchema: ${this.schemaVariable},
175
+ typeFromRdfResourceValues: ${this.type.fromRdfResourceValuesFunction}
176
+ })`);
185
177
  }
186
178
  hashStatements({ variables, }) {
187
179
  return [
@@ -0,0 +1,3 @@
1
+ import type { SnippetFactory } from "../SnippetFactory.js";
2
+ export declare const snippets_EqualsFunction: SnippetFactory;
3
+ //# sourceMappingURL=snippets_EqualsFunction.d.ts.map
@@ -0,0 +1,4 @@
1
+ import { code, conditionalOutput } from "../ts-poet-wrapper.js";
2
+ export const snippets_EqualsFunction = ({ snippets, syntheticNamePrefix, }) => conditionalOutput(`${syntheticNamePrefix}EqualsFunction`, code `\
3
+ export type ${syntheticNamePrefix}EqualsFunction<T> = (left: T, right: T) => ${snippets.EqualsResult};`);
4
+ //# sourceMappingURL=snippets_EqualsFunction.js.map
@@ -0,0 +1,3 @@
1
+ import type { SnippetFactory } from "../SnippetFactory.js";
2
+ export declare const snippets_propertyEquals: SnippetFactory;
3
+ //# sourceMappingURL=snippets_propertyEquals.d.ts.map
@@ -0,0 +1,11 @@
1
+ import { code, conditionalOutput } from "../ts-poet-wrapper.js";
2
+ export const snippets_propertyEquals = ({ snippets, syntheticNamePrefix, }) => conditionalOutput(`${syntheticNamePrefix}propertyEquals`, code `\
3
+ function ${syntheticNamePrefix}propertyEquals<ObjectT, PropertyValueT>(
4
+ property: Readonly<{ equalsFunction: ${snippets.EqualsFunction}<PropertyValueT>; name: string; }>,
5
+ left: readonly [ObjectT, PropertyValueT],
6
+ right: readonly [ObjectT, PropertyValueT]
7
+ ): ${snippets.EqualsResult} {
8
+ return property.equalsFunction(left[1], right[1])
9
+ .mapLeft(propertyValuesUnequal => ({ left: left[0], right: right[0], propertyName: property.name, propertyValuesUnequal, type: "property" as const }));
10
+ }`);
11
+ //# sourceMappingURL=snippets_propertyEquals.js.map
@@ -0,0 +1,3 @@
1
+ import type { SnippetFactory } from "../SnippetFactory.js";
2
+ export declare const snippets_rdfResourceIdentifierValues: SnippetFactory;
3
+ //# sourceMappingURL=snippets_rdfResourceIdentifierValues.d.ts.map
@@ -0,0 +1,12 @@
1
+ import { rdf } from "@tpluscode/rdf-ns-builders";
2
+ import { code, conditionalOutput } from "../ts-poet-wrapper.js";
3
+ export const snippets_rdfResourceIdentifierValues = ({ imports, rdfjsTermExpression, syntheticNamePrefix, }) => conditionalOutput(`${syntheticNamePrefix}rdfResourceIdentifierValues`, code `\
4
+ function ${syntheticNamePrefix}rdfResourceIdentifierValues(resource: ${imports.Resource}): ${imports.Resource}.Values {
5
+ return new ${imports.Resource}.Value({
6
+ dataFactory: ${imports.dataFactory},
7
+ focusResource: resource,
8
+ propertyPath: ${rdfjsTermExpression(rdf.subject)},
9
+ term: resource.identifier,
10
+ }).toValues();
11
+ }`);
12
+ //# sourceMappingURL=snippets_rdfResourceIdentifierValues.js.map
@@ -3,7 +3,7 @@ import type { Either } from "purify-ts";
3
3
  import type { Logger } from "ts-log";
4
4
  import type { Ast } from "../ast/Ast.js";
5
5
  import type { Generator } from "../generators/Generator.js";
6
- import * as generated from "./generated.js";
6
+ import * as generated from "./input.shaclmate.js";
7
7
  export declare class ShapesGraph extends AbstractShapesGraph<generated.NodeShape, generated.Ontology, generated.PropertyGroup, generated.PropertyShape> {
8
8
  protected readonly typeFunctions: {
9
9
  readonly NodeShape: typeof generated.NodeShape;
@@ -1,7 +1,7 @@
1
1
  import { AbstractShapesGraph } from "@shaclmate/shacl-ast";
2
2
  import { Compiler } from "../Compiler.js";
3
3
  import { ShapesGraphToAstTransformer } from "../ShapesGraphToAstTransformer.js";
4
- import * as generated from "./generated.js";
4
+ import * as generated from "./input.shaclmate.js";
5
5
  const typeFunctions = {
6
6
  NodeShape: generated.NodeShape,
7
7
  Ontology: generated.Ontology,
@@ -1,3 +1,3 @@
1
- export { NodeShape, Ontology, PropertyGroup, PropertyShape, Shape, } from "./generated.js";
1
+ export { NodeShape, Ontology, PropertyGroup, PropertyShape, Shape, } from "./input.shaclmate.js";
2
2
  export * from "./ShapesGraph.js";
3
3
  //# sourceMappingURL=index.d.ts.map
@@ -1,3 +1,3 @@
1
- export { NodeShape, Ontology, PropertyGroup, PropertyShape, Shape, } from "./generated.js";
1
+ export { NodeShape, Ontology, PropertyGroup, PropertyShape, Shape, } from "./input.shaclmate.js";
2
2
  export * from "./ShapesGraph.js";
3
3
  //# sourceMappingURL=index.js.map