@duplojs/data-parser-tools 0.2.1 → 0.2.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.
@@ -38,6 +38,7 @@ exports.createToJsonSchemaKind = kind.createToJsonSchemaKind;
38
38
  exports.defaultTransformers = index.defaultTransformers;
39
39
  exports.createTransformer = create.createTransformer;
40
40
  exports.supportedVersions = create.supportedVersions;
41
+ exports.buildRef = transformer.buildRef;
41
42
  exports.transformer = transformer.transformer;
42
43
  exports.arrayTransformer = array.arrayTransformer;
43
44
  exports.bigIntTransformer = bigint.bigIntTransformer;
@@ -4,7 +4,7 @@ export { DataParserToJsonSchemaRenderError, render } from './render.mjs';
4
4
  export { createToJsonSchemaKind } from './kind.mjs';
5
5
  export { defaultTransformers } from './transformer/defaults/index.mjs';
6
6
  export { createTransformer, supportedVersions } from './transformer/create.mjs';
7
- export { transformer } from './transformer/transformer.mjs';
7
+ export { buildRef, transformer } from './transformer/transformer.mjs';
8
8
  export { arrayTransformer } from './transformer/defaults/array.mjs';
9
9
  export { bigIntTransformer } from './transformer/defaults/bigint.mjs';
10
10
  export { booleanTransformer } from './transformer/defaults/boolean.mjs';
@@ -16,21 +16,6 @@ class DataParserToJsonSchemaRenderError extends utils.kindHeritage("data-parser-
16
16
  this.error = error;
17
17
  }
18
18
  }
19
- function buildRef(name, version) {
20
- if (version === create.supportedVersions.openApi3 || version === create.supportedVersions.openApi31) {
21
- return { $ref: `#/components/schemas/${name}` };
22
- }
23
- if (version === create.supportedVersions.jsonSchema202012) {
24
- return { $ref: `#/$defs/${name}` };
25
- }
26
- return { $ref: `#/definitions/${name}` };
27
- }
28
- function getDefinitionKey(version) {
29
- if (version === create.supportedVersions.jsonSchema202012 || version === create.supportedVersions.openApi31) {
30
- return "$defs";
31
- }
32
- return "definitions";
33
- }
34
19
  function render(schema, params) {
35
20
  const context = new Map(params.context);
36
21
  const version = create.supportedVersions[params.version];
@@ -58,23 +43,27 @@ function render(schema, params) {
58
43
  ...definitions,
59
44
  [params.identifier]: built.schema,
60
45
  };
61
- if (utils.or(version, [
62
- utils.equal(create.supportedVersions.openApi3),
63
- utils.equal(create.supportedVersions.openApi31),
64
- ])) {
65
- return JSON.stringify({
46
+ if (version === create.supportedVersions.openApi3
47
+ || version === create.supportedVersions.openApi31) {
48
+ return {
49
+ $ref: transformer.buildRef(params.identifier, version),
66
50
  openapi: version,
67
51
  components: {
68
52
  schemas: definitionsWithIdentifier,
69
53
  },
70
- ...buildRef(params.identifier, version),
71
- }, null, 4);
54
+ };
55
+ }
56
+ if (version === create.supportedVersions.jsonSchema202012) {
57
+ return {
58
+ $ref: transformer.buildRef(params.identifier, version),
59
+ $schema: version,
60
+ $defs: definitionsWithIdentifier,
61
+ };
72
62
  }
73
- const definitionKey = getDefinitionKey(version);
74
63
  return {
64
+ $ref: transformer.buildRef(params.identifier, version),
75
65
  $schema: version,
76
- ...buildRef(params.identifier, version),
77
- [definitionKey]: definitionsWithIdentifier,
66
+ definitions: definitionsWithIdentifier,
78
67
  };
79
68
  }
80
69
 
@@ -1,13 +1,5 @@
1
- import { type DP } from "@duplojs/utils";
2
- import { type DataParserErrorEither, type DataParserNotSupportedEither, type MapContext, type TransformerMode, type TransformerHook, type createTransformer, type SupportedVersions } from "./transformer";
3
- export interface RenderParams {
4
- readonly identifier: string;
5
- readonly transformers: readonly ReturnType<typeof createTransformer>[];
6
- readonly context?: MapContext;
7
- readonly mode?: TransformerMode;
8
- readonly hooks?: readonly TransformerHook[];
9
- readonly version: SupportedVersions;
10
- }
1
+ import { type DP, type Or, type IsEqual } from "@duplojs/utils";
2
+ import { type DataParserErrorEither, type DataParserNotSupportedEither, type MapContext, type TransformerMode, type TransformerHook, type createTransformer, type SupportedVersions, type JsonSchema } from "./transformer";
11
3
  declare const DataParserToJsonSchemaRenderError_base: new (params: {
12
4
  "@DuplojsDataParserToolsToJsonSchema/data-parser-to-json-schema-render-error"?: unknown;
13
5
  }, parentParams: [message?: string | undefined, options?: ErrorOptions | undefined]) => Error & import("@duplojs/utils").Kind<import("@duplojs/utils").KindDefinition<"@DuplojsDataParserToolsToJsonSchema/data-parser-to-json-schema-render-error", unknown>, unknown> & import("@duplojs/utils").Kind<import("@duplojs/utils").KindDefinition<"data-parser-to-json-schema-render-error", unknown>, unknown>;
@@ -16,8 +8,34 @@ export declare class DataParserToJsonSchemaRenderError extends DataParserToJsonS
16
8
  error: DataParserNotSupportedEither | DataParserErrorEither;
17
9
  constructor(schema: DP.DataParsers, error: DataParserNotSupportedEither | DataParserErrorEither);
18
10
  }
19
- export declare function render(schema: DP.DataParsers, params: RenderParams): string | {
20
- $ref: string;
21
- $schema: "http://json-schema.org/draft-04/schema#" | "http://json-schema.org/draft-07/schema#" | "https://json-schema.org/draft/2020-12/schema";
22
- };
11
+ export interface RenderParams<GenericVersion extends unknown> {
12
+ readonly identifier: string;
13
+ readonly transformers: readonly ReturnType<typeof createTransformer>[];
14
+ readonly context?: MapContext;
15
+ readonly mode?: TransformerMode;
16
+ readonly hooks?: readonly TransformerHook[];
17
+ readonly version: GenericVersion;
18
+ }
19
+ type RenderResult<GenericVersion extends keyof SupportedVersions> = Or<[
20
+ IsEqual<GenericVersion, "openApi3">,
21
+ IsEqual<GenericVersion, "openApi31">
22
+ ]> extends true ? {
23
+ $ref: `#/components/schemas/${string}`;
24
+ openapi: SupportedVersions[GenericVersion];
25
+ components: {
26
+ schemas: Record<string, JsonSchema>;
27
+ };
28
+ } : Or<[
29
+ IsEqual<GenericVersion, "jsonSchema7">,
30
+ IsEqual<GenericVersion, "jsonSchema4">
31
+ ]> extends true ? {
32
+ $ref: `#/$defs/${string}`;
33
+ $schema: SupportedVersions[GenericVersion];
34
+ definitions: Record<string, JsonSchema>;
35
+ } : IsEqual<GenericVersion, "jsonSchema202012"> extends true ? {
36
+ $ref: `#/definitions/${string}`;
37
+ $schema: SupportedVersions[GenericVersion];
38
+ $defs: Record<string, JsonSchema>;
39
+ } : never;
40
+ export declare function render<GenericVersion extends keyof SupportedVersions>(schema: DP.DataParsers, params: RenderParams<GenericVersion>): RenderResult<GenericVersion>;
23
41
  export {};
@@ -1,9 +1,9 @@
1
- import { kindHeritage, E, unwrap, G, or, equal } from '@duplojs/utils';
1
+ import { kindHeritage, E, unwrap, G } from '@duplojs/utils';
2
2
  import './transformer/index.mjs';
3
3
  import { createToJsonSchemaKind } from './kind.mjs';
4
4
  import { getRecursiveDataParser } from '../utils/getRecursiveDataParser.mjs';
5
5
  import { supportedVersions } from './transformer/create.mjs';
6
- import { transformer } from './transformer/transformer.mjs';
6
+ import { transformer, buildRef } from './transformer/transformer.mjs';
7
7
 
8
8
  class DataParserToJsonSchemaRenderError extends kindHeritage("data-parser-to-json-schema-render-error", createToJsonSchemaKind("data-parser-to-json-schema-render-error"), Error) {
9
9
  schema;
@@ -14,21 +14,6 @@ class DataParserToJsonSchemaRenderError extends kindHeritage("data-parser-to-jso
14
14
  this.error = error;
15
15
  }
16
16
  }
17
- function buildRef(name, version) {
18
- if (version === supportedVersions.openApi3 || version === supportedVersions.openApi31) {
19
- return { $ref: `#/components/schemas/${name}` };
20
- }
21
- if (version === supportedVersions.jsonSchema202012) {
22
- return { $ref: `#/$defs/${name}` };
23
- }
24
- return { $ref: `#/definitions/${name}` };
25
- }
26
- function getDefinitionKey(version) {
27
- if (version === supportedVersions.jsonSchema202012 || version === supportedVersions.openApi31) {
28
- return "$defs";
29
- }
30
- return "definitions";
31
- }
32
17
  function render(schema, params) {
33
18
  const context = new Map(params.context);
34
19
  const version = supportedVersions[params.version];
@@ -56,23 +41,27 @@ function render(schema, params) {
56
41
  ...definitions,
57
42
  [params.identifier]: built.schema,
58
43
  };
59
- if (or(version, [
60
- equal(supportedVersions.openApi3),
61
- equal(supportedVersions.openApi31),
62
- ])) {
63
- return JSON.stringify({
44
+ if (version === supportedVersions.openApi3
45
+ || version === supportedVersions.openApi31) {
46
+ return {
47
+ $ref: buildRef(params.identifier, version),
64
48
  openapi: version,
65
49
  components: {
66
50
  schemas: definitionsWithIdentifier,
67
51
  },
68
- ...buildRef(params.identifier, version),
69
- }, null, 4);
52
+ };
53
+ }
54
+ if (version === supportedVersions.jsonSchema202012) {
55
+ return {
56
+ $ref: buildRef(params.identifier, version),
57
+ $schema: version,
58
+ $defs: definitionsWithIdentifier,
59
+ };
70
60
  }
71
- const definitionKey = getDefinitionKey(version);
72
61
  return {
62
+ $ref: buildRef(params.identifier, version),
73
63
  $schema: version,
74
- ...buildRef(params.identifier, version),
75
- [definitionKey]: definitionsWithIdentifier,
64
+ definitions: definitionsWithIdentifier,
76
65
  };
77
66
  }
78
67
 
@@ -29,8 +29,8 @@ export declare const supportedVersions: {
29
29
  readonly openApi3: "https://spec.openapis.org/oas/3.0.3";
30
30
  readonly openApi31: "https://spec.openapis.org/oas/3.1.0";
31
31
  };
32
- export type SupportedVersions = keyof typeof supportedVersions;
33
- export type SupportedVersionsUrl = typeof supportedVersions[SupportedVersions];
32
+ export type SupportedVersions = typeof supportedVersions;
33
+ export type SupportedVersionsUrl = typeof supportedVersions[keyof SupportedVersions];
34
34
  export interface TransformerParams {
35
35
  readonly mode: TransformerMode;
36
36
  readonly context: MapContext;
@@ -9,5 +9,6 @@ var index = require('./defaults/index.cjs');
9
9
 
10
10
  exports.createTransformer = create.createTransformer;
11
11
  exports.supportedVersions = create.supportedVersions;
12
+ exports.buildRef = transformer.buildRef;
12
13
  exports.transformer = transformer.transformer;
13
14
  exports.defaultTransformers = index.defaultTransformers;
@@ -1,4 +1,4 @@
1
1
  export { createTransformer, supportedVersions } from './create.mjs';
2
- export { transformer } from './transformer.mjs';
2
+ export { buildRef, transformer } from './transformer.mjs';
3
3
  import './hook.mjs';
4
4
  export { defaultTransformers } from './defaults/index.mjs';
@@ -3,13 +3,14 @@
3
3
  var utils = require('@duplojs/utils');
4
4
 
5
5
  function buildRef(name, version) {
6
- if (version === "https://spec.openapis.org/oas/3.0.3" || version === "https://spec.openapis.org/oas/3.1.0") {
7
- return { $ref: `#/components/schemas/${name}` };
6
+ if (version === "https://spec.openapis.org/oas/3.0.3"
7
+ || version === "https://spec.openapis.org/oas/3.1.0") {
8
+ return `#/components/schemas/${name}`;
8
9
  }
9
10
  if (version === "https://json-schema.org/draft/2020-12/schema") {
10
- return { $ref: `#/$defs/${name}` };
11
+ return `#/$defs/${name}`;
11
12
  }
12
- return { $ref: `#/definitions/${name}` };
13
+ return `#/definitions/${name}`;
13
14
  }
14
15
  function transformer(schema, params) {
15
16
  const currentSchema = utils.A.reduce(params.hooks, utils.A.reduceFrom(schema), ({ element: hook, lastValue, next, exit }) => {
@@ -31,7 +32,7 @@ function transformer(schema, params) {
31
32
  const currentDeclaration = params.context.get(currentSchema);
32
33
  if (currentDeclaration) {
33
34
  return utils.E.right("buildSuccess", {
34
- schema: buildRef(currentDeclaration.name, params.version),
35
+ schema: { $ref: buildRef(currentDeclaration.name, params.version) },
35
36
  canBeUndefined: currentDeclaration.canBeUndefined,
36
37
  });
37
38
  }
@@ -80,9 +81,10 @@ function transformer(schema, params) {
80
81
  schema: builtSchema,
81
82
  canBeUndefined,
82
83
  });
83
- return functionParams.success(buildRef(currentIdentifier, params.version), canBeUndefined);
84
+ return functionParams.success({ $ref: buildRef(currentIdentifier, params.version) }, canBeUndefined);
84
85
  }
85
86
  return result;
86
87
  }
87
88
 
89
+ exports.buildRef = buildRef;
88
90
  exports.transformer = transformer;
@@ -1,4 +1,4 @@
1
- import { type DP } from "@duplojs/utils";
1
+ import { E, type DP } from "@duplojs/utils";
2
2
  import { type MapContext, type DataParserNotSupportedEither, type createTransformer, type TransformerMode, type SupportedVersionsUrl, type DataParserErrorEither } from "./create";
3
3
  import { type TransformerHook } from "./hook";
4
4
  export interface TransformerFunctionParams {
@@ -9,4 +9,10 @@ export interface TransformerFunctionParams {
9
9
  readonly hooks: readonly TransformerHook[];
10
10
  readonly recursiveDataParsers: DP.DataParser[];
11
11
  }
12
- export declare function transformer(schema: DP.DataParser, params: TransformerFunctionParams): import("./create").TransformerSuccessEither | DataParserNotSupportedEither | DataParserErrorEither;
12
+ export declare function buildRef(name: string, version: SupportedVersionsUrl): string;
13
+ export declare function transformer(schema: DP.DataParser, params: TransformerFunctionParams): import("./create").TransformerSuccessEither | DataParserNotSupportedEither | DataParserErrorEither | E.EitherRight<"buildSuccess", {
14
+ readonly schema: {
15
+ readonly $ref: string;
16
+ };
17
+ readonly canBeUndefined: boolean;
18
+ }>;
@@ -1,13 +1,14 @@
1
1
  import { A, E, whenElse, justReturn, unwrap } from '@duplojs/utils';
2
2
 
3
3
  function buildRef(name, version) {
4
- if (version === "https://spec.openapis.org/oas/3.0.3" || version === "https://spec.openapis.org/oas/3.1.0") {
5
- return { $ref: `#/components/schemas/${name}` };
4
+ if (version === "https://spec.openapis.org/oas/3.0.3"
5
+ || version === "https://spec.openapis.org/oas/3.1.0") {
6
+ return `#/components/schemas/${name}`;
6
7
  }
7
8
  if (version === "https://json-schema.org/draft/2020-12/schema") {
8
- return { $ref: `#/$defs/${name}` };
9
+ return `#/$defs/${name}`;
9
10
  }
10
- return { $ref: `#/definitions/${name}` };
11
+ return `#/definitions/${name}`;
11
12
  }
12
13
  function transformer(schema, params) {
13
14
  const currentSchema = A.reduce(params.hooks, A.reduceFrom(schema), ({ element: hook, lastValue, next, exit }) => {
@@ -29,7 +30,7 @@ function transformer(schema, params) {
29
30
  const currentDeclaration = params.context.get(currentSchema);
30
31
  if (currentDeclaration) {
31
32
  return E.right("buildSuccess", {
32
- schema: buildRef(currentDeclaration.name, params.version),
33
+ schema: { $ref: buildRef(currentDeclaration.name, params.version) },
33
34
  canBeUndefined: currentDeclaration.canBeUndefined,
34
35
  });
35
36
  }
@@ -78,9 +79,9 @@ function transformer(schema, params) {
78
79
  schema: builtSchema,
79
80
  canBeUndefined,
80
81
  });
81
- return functionParams.success(buildRef(currentIdentifier, params.version), canBeUndefined);
82
+ return functionParams.success({ $ref: buildRef(currentIdentifier, params.version) }, canBeUndefined);
82
83
  }
83
84
  return result;
84
85
  }
85
86
 
86
- export { transformer };
87
+ export { buildRef, transformer };
@@ -6,28 +6,42 @@ function getRecursiveDataParser(schema) {
6
6
  const countMap = new Map();
7
7
  void (function countDataParser(schema) {
8
8
  utils.P.match(schema)
9
- .when((value) => (utils.DP.stringKind.has(value)
10
- || utils.DP.stringKind.has(value)
11
- || utils.DP.numberKind.has(value)
12
- || utils.DP.nilKind.has(value)
13
- || utils.DP.dateKind.has(value)
14
- || utils.DP.emptyKind.has(value)
15
- || utils.DP.bigIntKind.has(value)
16
- || utils.DP.booleanKind.has(value)
17
- || utils.DP.literalKind.has(value)
18
- || utils.DP.unknownKind.has(value)
19
- || utils.DP.templateLiteralKind.has(value)
20
- || utils.DP.recordKind.has(value)), () => void 0)
21
- .when((value) => (utils.DP.nullableKind.has(value)
22
- || utils.DP.optionalKind.has(value)
23
- || utils.DP.recoverKind.has(value)
24
- || utils.DP.transformKind.has(value)), (dataParser) => void countDataParser(dataParser.definition.inner))
9
+ .when(utils.hasSomeKinds([
10
+ utils.DP.stringKind,
11
+ utils.DP.stringKind,
12
+ utils.DP.numberKind,
13
+ utils.DP.nilKind,
14
+ utils.DP.dateKind,
15
+ utils.DP.emptyKind,
16
+ utils.DP.bigIntKind,
17
+ utils.DP.booleanKind,
18
+ utils.DP.literalKind,
19
+ utils.DP.unknownKind,
20
+ utils.DP.templateLiteralKind,
21
+ utils.DP.recordKind,
22
+ ]), () => void 0)
23
+ .when(utils.hasSomeKinds([
24
+ utils.DP.nullableKind,
25
+ utils.DP.optionalKind,
26
+ utils.DP.recoverKind,
27
+ utils.DP.transformKind,
28
+ ]), (dataParser) => void countDataParser(dataParser.definition.inner))
25
29
  .when(utils.DP.lazyKind.has, (dataParser) => void countDataParser(dataParser.definition.getter.value))
26
30
  .when(utils.DP.pipeKind.has, (dataParser) => {
27
31
  countDataParser(dataParser.definition.input);
28
32
  countDataParser(dataParser.definition.output);
29
33
  })
30
- .when(utils.DP.unionKind.has, (dataParser) => utils.A.map(dataParser.definition.options, countDataParser))
34
+ .when(utils.DP.unionKind.has, (dataParser) => {
35
+ const count = (countMap.get(dataParser) ?? 0) + 1;
36
+ countMap.set(dataParser, count);
37
+ if (count > 1) {
38
+ return;
39
+ }
40
+ utils.A.map(dataParser.definition.options, countDataParser);
41
+ if (countMap.get(dataParser) === 1) {
42
+ countMap.delete(dataParser);
43
+ }
44
+ })
31
45
  .when(utils.DP.arrayKind.has, (dataParser) => {
32
46
  const count = (countMap.get(dataParser) ?? 0) + 1;
33
47
  countMap.set(dataParser, count);
@@ -35,6 +49,9 @@ function getRecursiveDataParser(schema) {
35
49
  return;
36
50
  }
37
51
  countDataParser(dataParser.definition.element);
52
+ if (countMap.get(dataParser) === 1) {
53
+ countMap.delete(dataParser);
54
+ }
38
55
  })
39
56
  .when(utils.DP.objectKind.has, (dataParser) => {
40
57
  const count = (countMap.get(dataParser) ?? 0) + 1;
@@ -43,6 +60,9 @@ function getRecursiveDataParser(schema) {
43
60
  return;
44
61
  }
45
62
  utils.pipe(dataParser.definition.shape, utils.O.entries, utils.A.map(([, value]) => void countDataParser(value)));
63
+ if (countMap.get(dataParser) === 1) {
64
+ countMap.delete(dataParser);
65
+ }
46
66
  })
47
67
  .when(utils.DP.tupleKind.has, (dataParser) => {
48
68
  const count = (countMap.get(dataParser) ?? 0) + 1;
@@ -51,6 +71,9 @@ function getRecursiveDataParser(schema) {
51
71
  return;
52
72
  }
53
73
  utils.A.map(dataParser.definition.shape, countDataParser);
74
+ if (countMap.get(dataParser) === 1) {
75
+ countMap.delete(dataParser);
76
+ }
54
77
  })
55
78
  .when(utils.DP.dataParserKind.has, () => void 0)
56
79
  .exhaustive();
@@ -1,31 +1,45 @@
1
- import { P, DP, A, pipe, O, G } from '@duplojs/utils';
1
+ import { P, hasSomeKinds, DP, A, pipe, O, G } from '@duplojs/utils';
2
2
 
3
3
  function getRecursiveDataParser(schema) {
4
4
  const countMap = new Map();
5
5
  void (function countDataParser(schema) {
6
6
  P.match(schema)
7
- .when((value) => (DP.stringKind.has(value)
8
- || DP.stringKind.has(value)
9
- || DP.numberKind.has(value)
10
- || DP.nilKind.has(value)
11
- || DP.dateKind.has(value)
12
- || DP.emptyKind.has(value)
13
- || DP.bigIntKind.has(value)
14
- || DP.booleanKind.has(value)
15
- || DP.literalKind.has(value)
16
- || DP.unknownKind.has(value)
17
- || DP.templateLiteralKind.has(value)
18
- || DP.recordKind.has(value)), () => void 0)
19
- .when((value) => (DP.nullableKind.has(value)
20
- || DP.optionalKind.has(value)
21
- || DP.recoverKind.has(value)
22
- || DP.transformKind.has(value)), (dataParser) => void countDataParser(dataParser.definition.inner))
7
+ .when(hasSomeKinds([
8
+ DP.stringKind,
9
+ DP.stringKind,
10
+ DP.numberKind,
11
+ DP.nilKind,
12
+ DP.dateKind,
13
+ DP.emptyKind,
14
+ DP.bigIntKind,
15
+ DP.booleanKind,
16
+ DP.literalKind,
17
+ DP.unknownKind,
18
+ DP.templateLiteralKind,
19
+ DP.recordKind,
20
+ ]), () => void 0)
21
+ .when(hasSomeKinds([
22
+ DP.nullableKind,
23
+ DP.optionalKind,
24
+ DP.recoverKind,
25
+ DP.transformKind,
26
+ ]), (dataParser) => void countDataParser(dataParser.definition.inner))
23
27
  .when(DP.lazyKind.has, (dataParser) => void countDataParser(dataParser.definition.getter.value))
24
28
  .when(DP.pipeKind.has, (dataParser) => {
25
29
  countDataParser(dataParser.definition.input);
26
30
  countDataParser(dataParser.definition.output);
27
31
  })
28
- .when(DP.unionKind.has, (dataParser) => A.map(dataParser.definition.options, countDataParser))
32
+ .when(DP.unionKind.has, (dataParser) => {
33
+ const count = (countMap.get(dataParser) ?? 0) + 1;
34
+ countMap.set(dataParser, count);
35
+ if (count > 1) {
36
+ return;
37
+ }
38
+ A.map(dataParser.definition.options, countDataParser);
39
+ if (countMap.get(dataParser) === 1) {
40
+ countMap.delete(dataParser);
41
+ }
42
+ })
29
43
  .when(DP.arrayKind.has, (dataParser) => {
30
44
  const count = (countMap.get(dataParser) ?? 0) + 1;
31
45
  countMap.set(dataParser, count);
@@ -33,6 +47,9 @@ function getRecursiveDataParser(schema) {
33
47
  return;
34
48
  }
35
49
  countDataParser(dataParser.definition.element);
50
+ if (countMap.get(dataParser) === 1) {
51
+ countMap.delete(dataParser);
52
+ }
36
53
  })
37
54
  .when(DP.objectKind.has, (dataParser) => {
38
55
  const count = (countMap.get(dataParser) ?? 0) + 1;
@@ -41,6 +58,9 @@ function getRecursiveDataParser(schema) {
41
58
  return;
42
59
  }
43
60
  pipe(dataParser.definition.shape, O.entries, A.map(([, value]) => void countDataParser(value)));
61
+ if (countMap.get(dataParser) === 1) {
62
+ countMap.delete(dataParser);
63
+ }
44
64
  })
45
65
  .when(DP.tupleKind.has, (dataParser) => {
46
66
  const count = (countMap.get(dataParser) ?? 0) + 1;
@@ -49,6 +69,9 @@ function getRecursiveDataParser(schema) {
49
69
  return;
50
70
  }
51
71
  A.map(dataParser.definition.shape, countDataParser);
72
+ if (countMap.get(dataParser) === 1) {
73
+ countMap.delete(dataParser);
74
+ }
52
75
  })
53
76
  .when(DP.dataParserKind.has, () => void 0)
54
77
  .exhaustive();
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@duplojs/data-parser-tools",
3
- "version": "0.2.1",
3
+ "version": "0.2.3",
4
4
  "license": "MIT",
5
5
  "author": "duplojs",
6
6
  "contributors": [