@duplojs/data-parser-tools 0.2.9 → 0.4.0
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/index.cjs +2 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.mjs +2 -0
- package/dist/toDataParser/buildContext.cjs +63 -0
- package/dist/toDataParser/buildContext.d.ts +27 -0
- package/dist/toDataParser/buildContext.mjs +61 -0
- package/dist/toDataParser/checkerTransformer/create.cjs +11 -0
- package/dist/toDataParser/checkerTransformer/create.d.ts +20 -0
- package/dist/toDataParser/checkerTransformer/create.mjs +9 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/index.cjs +9 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/index.d.ts +2 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/index.mjs +2 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/max.cjs +15 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/max.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/max.mjs +13 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/min.cjs +15 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/min.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/array/min.mjs +13 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/index.cjs +9 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/index.d.ts +2 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/index.mjs +2 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/max.cjs +15 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/max.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/max.mjs +13 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/min.cjs +15 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/min.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/bigint/min.mjs +13 -0
- package/dist/toDataParser/checkerTransformer/defaults/index.cjs +60 -0
- package/dist/toDataParser/checkerTransformer/defaults/index.d.ts +4 -0
- package/dist/toDataParser/checkerTransformer/defaults/index.mjs +47 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/index.cjs +11 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/index.d.ts +3 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/index.mjs +3 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/int.cjs +12 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/int.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/int.mjs +10 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/max.cjs +19 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/max.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/max.mjs +17 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/min.cjs +19 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/min.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/number/min.mjs +17 -0
- package/dist/toDataParser/checkerTransformer/defaults/refine.cjs +32 -0
- package/dist/toDataParser/checkerTransformer/defaults/refine.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/refine.mjs +30 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/email.cjs +12 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/email.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/email.mjs +10 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/index.cjs +17 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/index.d.ts +6 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/index.mjs +6 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/max.cjs +15 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/max.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/max.mjs +13 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/min.cjs +15 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/min.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/min.mjs +13 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/regex.cjs +16 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/regex.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/regex.mjs +14 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/url.cjs +22 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/url.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/url.mjs +20 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/uuid.cjs +12 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/uuid.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/string/uuid.mjs +10 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/index.cjs +9 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/index.d.ts +2 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/index.mjs +2 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/max.cjs +19 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/max.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/max.mjs +17 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/min.cjs +19 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/min.d.ts +1 -0
- package/dist/toDataParser/checkerTransformer/defaults/time/min.mjs +17 -0
- package/dist/toDataParser/checkerTransformer/index.cjs +12 -0
- package/dist/toDataParser/checkerTransformer/index.d.ts +3 -0
- package/dist/toDataParser/checkerTransformer/index.mjs +3 -0
- package/dist/toDataParser/checkerTransformer/transformer.cjs +47 -0
- package/dist/toDataParser/checkerTransformer/transformer.d.ts +10 -0
- package/dist/toDataParser/checkerTransformer/transformer.mjs +44 -0
- package/dist/toDataParser/dataParserTransformer/create.cjs +11 -0
- package/dist/toDataParser/dataParserTransformer/create.d.ts +34 -0
- package/dist/toDataParser/dataParserTransformer/create.mjs +9 -0
- package/dist/toDataParser/dataParserTransformer/createIdentifier.cjs +9 -0
- package/dist/toDataParser/dataParserTransformer/createIdentifier.d.ts +1 -0
- package/dist/toDataParser/dataParserTransformer/createIdentifier.mjs +7 -0
- package/dist/toDataParser/dataParserTransformer/defaults/array.cjs +22 -0
- package/dist/toDataParser/dataParserTransformer/defaults/array.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/array.mjs +20 -0
- package/dist/toDataParser/dataParserTransformer/defaults/bigint.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/bigint.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/bigint.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/boolean.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/boolean.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/boolean.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/date.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/date.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/date.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/empty.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/empty.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/empty.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/file.cjs +44 -0
- package/dist/toDataParser/dataParserTransformer/defaults/file.d.ts +1 -0
- package/dist/toDataParser/dataParserTransformer/defaults/file.mjs +42 -0
- package/dist/toDataParser/dataParserTransformer/defaults/index.cjs +76 -0
- package/dist/toDataParser/dataParserTransformer/defaults/index.d.ts +24 -0
- package/dist/toDataParser/dataParserTransformer/defaults/index.mjs +51 -0
- package/dist/toDataParser/dataParserTransformer/defaults/lazy.cjs +22 -0
- package/dist/toDataParser/dataParserTransformer/defaults/lazy.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/lazy.mjs +20 -0
- package/dist/toDataParser/dataParserTransformer/defaults/literal.cjs +28 -0
- package/dist/toDataParser/dataParserTransformer/defaults/literal.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/literal.mjs +26 -0
- package/dist/toDataParser/dataParserTransformer/defaults/nil.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/nil.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/nil.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/nullable.cjs +22 -0
- package/dist/toDataParser/dataParserTransformer/defaults/nullable.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/nullable.mjs +20 -0
- package/dist/toDataParser/dataParserTransformer/defaults/number.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/number.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/number.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/object.cjs +22 -0
- package/dist/toDataParser/dataParserTransformer/defaults/object.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/object.mjs +20 -0
- package/dist/toDataParser/dataParserTransformer/defaults/optional.cjs +22 -0
- package/dist/toDataParser/dataParserTransformer/defaults/optional.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/optional.mjs +20 -0
- package/dist/toDataParser/dataParserTransformer/defaults/pipe.cjs +27 -0
- package/dist/toDataParser/dataParserTransformer/defaults/pipe.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/pipe.mjs +25 -0
- package/dist/toDataParser/dataParserTransformer/defaults/record.cjs +27 -0
- package/dist/toDataParser/dataParserTransformer/defaults/record.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/record.mjs +25 -0
- package/dist/toDataParser/dataParserTransformer/defaults/recover.cjs +8 -0
- package/dist/toDataParser/dataParserTransformer/defaults/recover.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/recover.mjs +6 -0
- package/dist/toDataParser/dataParserTransformer/defaults/string.cjs +15 -0
- package/dist/toDataParser/dataParserTransformer/defaults/string.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/string.mjs +13 -0
- package/dist/toDataParser/dataParserTransformer/defaults/templateLiteral.cjs +41 -0
- package/dist/toDataParser/dataParserTransformer/defaults/templateLiteral.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/templateLiteral.mjs +39 -0
- package/dist/toDataParser/dataParserTransformer/defaults/time.cjs +19 -0
- package/dist/toDataParser/dataParserTransformer/defaults/time.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/time.mjs +17 -0
- package/dist/toDataParser/dataParserTransformer/defaults/transform.cjs +40 -0
- package/dist/toDataParser/dataParserTransformer/defaults/transform.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/transform.mjs +38 -0
- package/dist/toDataParser/dataParserTransformer/defaults/tuple.cjs +36 -0
- package/dist/toDataParser/dataParserTransformer/defaults/tuple.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/tuple.mjs +34 -0
- package/dist/toDataParser/dataParserTransformer/defaults/union.cjs +28 -0
- package/dist/toDataParser/dataParserTransformer/defaults/union.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/union.mjs +26 -0
- package/dist/toDataParser/dataParserTransformer/defaults/unknown.cjs +15 -0
- package/dist/toDataParser/dataParserTransformer/defaults/unknown.d.ts +2 -0
- package/dist/toDataParser/dataParserTransformer/defaults/unknown.mjs +13 -0
- package/dist/toDataParser/dataParserTransformer/getDefinitionDataParser.cjs +36 -0
- package/dist/toDataParser/dataParserTransformer/getDefinitionDataParser.d.ts +14 -0
- package/dist/toDataParser/dataParserTransformer/getDefinitionDataParser.mjs +34 -0
- package/dist/toDataParser/dataParserTransformer/hook.cjs +2 -0
- package/dist/toDataParser/dataParserTransformer/hook.d.ts +15 -0
- package/dist/toDataParser/dataParserTransformer/hook.mjs +1 -0
- package/dist/toDataParser/dataParserTransformer/index.cjs +16 -0
- package/dist/toDataParser/dataParserTransformer/index.d.ts +6 -0
- package/dist/toDataParser/dataParserTransformer/index.mjs +6 -0
- package/dist/toDataParser/dataParserTransformer/transformer.cjs +129 -0
- package/dist/toDataParser/dataParserTransformer/transformer.d.ts +23 -0
- package/dist/toDataParser/dataParserTransformer/transformer.mjs +127 -0
- package/dist/toDataParser/index.cjs +103 -0
- package/dist/toDataParser/index.d.ts +7 -0
- package/dist/toDataParser/index.mjs +49 -0
- package/dist/toDataParser/kind.cjs +9 -0
- package/dist/toDataParser/kind.d.ts +6 -0
- package/dist/toDataParser/kind.mjs +7 -0
- package/dist/toDataParser/override.cjs +29 -0
- package/dist/toDataParser/override.d.ts +20 -0
- package/dist/toDataParser/override.mjs +27 -0
- package/dist/toDataParser/printer.cjs +23 -0
- package/dist/toDataParser/printer.d.ts +2 -0
- package/dist/toDataParser/printer.mjs +21 -0
- package/dist/toDataParser/render.cjs +50 -0
- package/dist/toDataParser/render.d.ts +19 -0
- package/dist/toDataParser/render.mjs +46 -0
- package/dist/toJsonSchema/override.cjs +4 -4
- package/dist/toJsonSchema/override.d.ts +1 -1
- package/dist/toJsonSchema/override.mjs +5 -5
- package/dist/toJsonSchema/transformer/defaults/string.cjs +2 -2
- package/dist/toJsonSchema/transformer/defaults/string.mjs +2 -2
- package/dist/toTypescript/buildContext.cjs +37 -0
- package/dist/toTypescript/buildContext.d.ts +15 -0
- package/dist/toTypescript/buildContext.mjs +35 -0
- package/dist/toTypescript/index.cjs +10 -0
- package/dist/toTypescript/index.d.ts +2 -0
- package/dist/toTypescript/index.mjs +5 -0
- package/dist/toTypescript/override.cjs +4 -4
- package/dist/toTypescript/override.d.ts +1 -1
- package/dist/toTypescript/override.mjs +5 -5
- package/dist/toTypescript/printer.cjs +17 -0
- package/dist/toTypescript/printer.d.ts +2 -0
- package/dist/toTypescript/printer.mjs +15 -0
- package/dist/toTypescript/render.cjs +8 -26
- package/dist/toTypescript/render.d.ts +5 -12
- package/dist/toTypescript/render.mjs +9 -27
- package/dist/toTypescript/transformer/addImport.cjs +21 -0
- package/dist/toTypescript/transformer/addImport.d.ts +2 -0
- package/dist/toTypescript/transformer/addImport.mjs +19 -0
- package/dist/toTypescript/transformer/create.d.ts +7 -3
- package/dist/toTypescript/transformer/createIdentifier.cjs +9 -0
- package/dist/toTypescript/transformer/createIdentifier.d.ts +1 -0
- package/dist/toTypescript/transformer/createIdentifier.mjs +7 -0
- package/dist/toTypescript/transformer/createImportDeclaration.cjs +17 -0
- package/dist/toTypescript/transformer/createImportDeclaration.d.ts +3 -0
- package/dist/toTypescript/transformer/createImportDeclaration.mjs +15 -0
- package/dist/toTypescript/transformer/hook.d.ts +2 -2
- package/dist/toTypescript/transformer/index.cjs +6 -0
- package/dist/toTypescript/transformer/index.d.ts +3 -0
- package/dist/toTypescript/transformer/index.mjs +3 -0
- package/dist/toTypescript/transformer/transformer.cjs +8 -9
- package/dist/toTypescript/transformer/transformer.d.ts +2 -2
- package/dist/toTypescript/transformer/transformer.mjs +8 -9
- package/package.json +8 -3
- package/dist/toTypescript/transformer/importTypesTransformer.cjs +0 -10
- package/dist/toTypescript/transformer/importTypesTransformer.d.ts +0 -2
- package/dist/toTypescript/transformer/importTypesTransformer.mjs +0 -8
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { DP, E, pipe, unwrap } from '@duplojs/utils';
|
|
2
|
+
import { createTransformer } from '../create.mjs';
|
|
3
|
+
import { createSourceFile, ScriptTarget, isExpressionStatement, isParenthesizedExpression, isFunctionExpression, isArrowFunction, factory } from 'typescript';
|
|
4
|
+
|
|
5
|
+
const transformTransformer = createTransformer(DP.transformKind.has, (dataParser, { success, dependencyIdentifier, getDefinition, transformer, buildError, }) => {
|
|
6
|
+
const inner = transformer(dataParser.definition.inner);
|
|
7
|
+
if (E.isLeft(inner)) {
|
|
8
|
+
return inner;
|
|
9
|
+
}
|
|
10
|
+
const theFunction = dataParser.definition.theFunction.toString();
|
|
11
|
+
if (theFunction.includes("[native code]")) {
|
|
12
|
+
return buildError();
|
|
13
|
+
}
|
|
14
|
+
const sourceFile = createSourceFile("refine-function.ts", `(${theFunction})`, ScriptTarget.Latest, false);
|
|
15
|
+
const statement = sourceFile.statements[0];
|
|
16
|
+
if (!statement || !isExpressionStatement(statement)) {
|
|
17
|
+
return buildError();
|
|
18
|
+
}
|
|
19
|
+
const functionExpression = isParenthesizedExpression(statement.expression)
|
|
20
|
+
? statement.expression.expression
|
|
21
|
+
: undefined;
|
|
22
|
+
if (!functionExpression
|
|
23
|
+
|| (!isFunctionExpression(functionExpression)
|
|
24
|
+
&& !isArrowFunction(functionExpression))) {
|
|
25
|
+
return buildError();
|
|
26
|
+
}
|
|
27
|
+
const definition = getDefinition();
|
|
28
|
+
if (E.isLeft(definition)) {
|
|
29
|
+
return definition;
|
|
30
|
+
}
|
|
31
|
+
return pipe(factory.createCallExpression(factory.createPropertyAccessExpression(dependencyIdentifier, factory.createIdentifier("transform")), undefined, [
|
|
32
|
+
unwrap(inner),
|
|
33
|
+
functionExpression,
|
|
34
|
+
...definition,
|
|
35
|
+
]), success);
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
export { transformTransformer };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@duplojs/utils');
|
|
4
|
+
var create = require('../create.cjs');
|
|
5
|
+
var typescript = require('typescript');
|
|
6
|
+
|
|
7
|
+
const tupleTransformer = create.createTransformer(utils.DP.tupleKind.has, (dataParser, { success, dependencyIdentifier, getDefinition, transformer, }) => {
|
|
8
|
+
const shape = utils.A.reduce(dataParser.definition.shape, utils.A.reduceFrom([]), ({ element, lastValue, nextPush, exit }) => {
|
|
9
|
+
const result = transformer(element);
|
|
10
|
+
if (utils.E.isLeft(result)) {
|
|
11
|
+
return exit(result);
|
|
12
|
+
}
|
|
13
|
+
return nextPush(lastValue, utils.unwrap(result));
|
|
14
|
+
});
|
|
15
|
+
if (utils.E.isLeft(shape)) {
|
|
16
|
+
return shape;
|
|
17
|
+
}
|
|
18
|
+
const rest = dataParser.definition.rest
|
|
19
|
+
? utils.pipe(dataParser.definition.rest, transformer, utils.E.whenIsRight((expression) => [
|
|
20
|
+
typescript.factory.createPropertyAssignment(typescript.factory.createIdentifier("rest"), expression),
|
|
21
|
+
]))
|
|
22
|
+
: undefined;
|
|
23
|
+
if (utils.E.isLeft(rest)) {
|
|
24
|
+
return rest;
|
|
25
|
+
}
|
|
26
|
+
const definition = getDefinition(rest);
|
|
27
|
+
if (utils.E.isLeft(definition)) {
|
|
28
|
+
return definition;
|
|
29
|
+
}
|
|
30
|
+
return utils.pipe(typescript.factory.createCallExpression(typescript.factory.createPropertyAccessExpression(dependencyIdentifier, typescript.factory.createIdentifier("tuple")), undefined, [
|
|
31
|
+
typescript.factory.createArrayLiteralExpression(shape, utils.A.minElements(shape, 3)),
|
|
32
|
+
...definition,
|
|
33
|
+
]), success);
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
exports.tupleTransformer = tupleTransformer;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { DP, A, E, unwrap, pipe } from '@duplojs/utils';
|
|
2
|
+
import { createTransformer } from '../create.mjs';
|
|
3
|
+
import { factory } from 'typescript';
|
|
4
|
+
|
|
5
|
+
const tupleTransformer = createTransformer(DP.tupleKind.has, (dataParser, { success, dependencyIdentifier, getDefinition, transformer, }) => {
|
|
6
|
+
const shape = A.reduce(dataParser.definition.shape, A.reduceFrom([]), ({ element, lastValue, nextPush, exit }) => {
|
|
7
|
+
const result = transformer(element);
|
|
8
|
+
if (E.isLeft(result)) {
|
|
9
|
+
return exit(result);
|
|
10
|
+
}
|
|
11
|
+
return nextPush(lastValue, unwrap(result));
|
|
12
|
+
});
|
|
13
|
+
if (E.isLeft(shape)) {
|
|
14
|
+
return shape;
|
|
15
|
+
}
|
|
16
|
+
const rest = dataParser.definition.rest
|
|
17
|
+
? pipe(dataParser.definition.rest, transformer, E.whenIsRight((expression) => [
|
|
18
|
+
factory.createPropertyAssignment(factory.createIdentifier("rest"), expression),
|
|
19
|
+
]))
|
|
20
|
+
: undefined;
|
|
21
|
+
if (E.isLeft(rest)) {
|
|
22
|
+
return rest;
|
|
23
|
+
}
|
|
24
|
+
const definition = getDefinition(rest);
|
|
25
|
+
if (E.isLeft(definition)) {
|
|
26
|
+
return definition;
|
|
27
|
+
}
|
|
28
|
+
return pipe(factory.createCallExpression(factory.createPropertyAccessExpression(dependencyIdentifier, factory.createIdentifier("tuple")), undefined, [
|
|
29
|
+
factory.createArrayLiteralExpression(shape, A.minElements(shape, 3)),
|
|
30
|
+
...definition,
|
|
31
|
+
]), success);
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
export { tupleTransformer };
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@duplojs/utils');
|
|
4
|
+
var create = require('../create.cjs');
|
|
5
|
+
var typescript = require('typescript');
|
|
6
|
+
|
|
7
|
+
const unionTransformer = create.createTransformer(utils.DP.unionKind.has, (dataParser, { dependencyIdentifier, getDefinition, success, transformer, }) => {
|
|
8
|
+
const options = utils.A.reduce(dataParser.definition.options, utils.A.reduceFrom([]), ({ element, lastValue, nextPush, exit }) => {
|
|
9
|
+
const result = transformer(element);
|
|
10
|
+
if (utils.E.isLeft(result)) {
|
|
11
|
+
return exit(result);
|
|
12
|
+
}
|
|
13
|
+
return nextPush(lastValue, utils.unwrap(result));
|
|
14
|
+
});
|
|
15
|
+
if (utils.E.isLeft(options)) {
|
|
16
|
+
return options;
|
|
17
|
+
}
|
|
18
|
+
const definition = getDefinition();
|
|
19
|
+
if (utils.E.isLeft(definition)) {
|
|
20
|
+
return definition;
|
|
21
|
+
}
|
|
22
|
+
return utils.pipe(typescript.factory.createCallExpression(typescript.factory.createPropertyAccessExpression(dependencyIdentifier, typescript.factory.createIdentifier("union")), undefined, [
|
|
23
|
+
typescript.factory.createArrayLiteralExpression(options, true),
|
|
24
|
+
...definition,
|
|
25
|
+
]), success);
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
exports.unionTransformer = unionTransformer;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { DP, A, E, unwrap, pipe } from '@duplojs/utils';
|
|
2
|
+
import { createTransformer } from '../create.mjs';
|
|
3
|
+
import { factory } from 'typescript';
|
|
4
|
+
|
|
5
|
+
const unionTransformer = createTransformer(DP.unionKind.has, (dataParser, { dependencyIdentifier, getDefinition, success, transformer, }) => {
|
|
6
|
+
const options = A.reduce(dataParser.definition.options, A.reduceFrom([]), ({ element, lastValue, nextPush, exit }) => {
|
|
7
|
+
const result = transformer(element);
|
|
8
|
+
if (E.isLeft(result)) {
|
|
9
|
+
return exit(result);
|
|
10
|
+
}
|
|
11
|
+
return nextPush(lastValue, unwrap(result));
|
|
12
|
+
});
|
|
13
|
+
if (E.isLeft(options)) {
|
|
14
|
+
return options;
|
|
15
|
+
}
|
|
16
|
+
const definition = getDefinition();
|
|
17
|
+
if (E.isLeft(definition)) {
|
|
18
|
+
return definition;
|
|
19
|
+
}
|
|
20
|
+
return pipe(factory.createCallExpression(factory.createPropertyAccessExpression(dependencyIdentifier, factory.createIdentifier("union")), undefined, [
|
|
21
|
+
factory.createArrayLiteralExpression(options, true),
|
|
22
|
+
...definition,
|
|
23
|
+
]), success);
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
export { unionTransformer };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@duplojs/utils');
|
|
4
|
+
var create = require('../create.cjs');
|
|
5
|
+
var typescript = require('typescript');
|
|
6
|
+
|
|
7
|
+
const unknownTransformer = create.createTransformer(utils.DP.unknownKind.has, (dataParser, { success, dependencyIdentifier, getDefinition, }) => {
|
|
8
|
+
const definition = getDefinition();
|
|
9
|
+
if (utils.E.isLeft(definition)) {
|
|
10
|
+
return definition;
|
|
11
|
+
}
|
|
12
|
+
return utils.pipe(typescript.factory.createCallExpression(typescript.factory.createPropertyAccessExpression(dependencyIdentifier, typescript.factory.createIdentifier("unknown")), undefined, definition), success);
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
exports.unknownTransformer = unknownTransformer;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { DP, E, pipe } from '@duplojs/utils';
|
|
2
|
+
import { createTransformer } from '../create.mjs';
|
|
3
|
+
import { factory } from 'typescript';
|
|
4
|
+
|
|
5
|
+
const unknownTransformer = createTransformer(DP.unknownKind.has, (dataParser, { success, dependencyIdentifier, getDefinition, }) => {
|
|
6
|
+
const definition = getDefinition();
|
|
7
|
+
if (E.isLeft(definition)) {
|
|
8
|
+
return definition;
|
|
9
|
+
}
|
|
10
|
+
return pipe(factory.createCallExpression(factory.createPropertyAccessExpression(dependencyIdentifier, factory.createIdentifier("unknown")), undefined, definition), success);
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
export { unknownTransformer };
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@duplojs/utils');
|
|
4
|
+
require('../checkerTransformer/index.cjs');
|
|
5
|
+
var typescript = require('typescript');
|
|
6
|
+
var transformer = require('../checkerTransformer/transformer.cjs');
|
|
7
|
+
|
|
8
|
+
function getDefinitionDataParser(params) {
|
|
9
|
+
const propertyAssignments = [];
|
|
10
|
+
if (params.dataParser.definition.errorMessage) {
|
|
11
|
+
propertyAssignments.push(typescript.factory.createPropertyAssignment(typescript.factory.createIdentifier("errorMessage"), typescript.factory.createStringLiteral(params.dataParser.definition.errorMessage)));
|
|
12
|
+
}
|
|
13
|
+
if (utils.A.minElements(params.customProperties, 1)) {
|
|
14
|
+
propertyAssignments.push(...params.customProperties);
|
|
15
|
+
}
|
|
16
|
+
if (utils.A.minElements(params.dataParser.definition.checkers, 1)) {
|
|
17
|
+
const checkers = utils.A.reduce(params.dataParser.definition.checkers, utils.A.reduceFrom([]), ({ element, lastValue, nextPush, exit }) => utils.pipe(transformer.checkerTransformer(element, {
|
|
18
|
+
transformers: params.checkerTransformers,
|
|
19
|
+
importContext: params.importContext,
|
|
20
|
+
}), utils.E.whenIsRight((value) => nextPush(lastValue, value)), utils.when(utils.E.isLeft, exit)));
|
|
21
|
+
if (utils.E.isLeft(checkers)) {
|
|
22
|
+
return utils.E.left("buildDataParserGetDefinitionError", {
|
|
23
|
+
dataParser: params.dataParser,
|
|
24
|
+
error: checkers,
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
propertyAssignments.push(typescript.factory.createPropertyAssignment(typescript.factory.createIdentifier("checkers"), typescript.factory.createArrayLiteralExpression(checkers, utils.A.minElements(checkers, 2))));
|
|
28
|
+
}
|
|
29
|
+
return utils.A.minElements(propertyAssignments, 1)
|
|
30
|
+
? [
|
|
31
|
+
typescript.factory.createObjectLiteralExpression(propertyAssignments, utils.A.minElements(propertyAssignments, 2)),
|
|
32
|
+
]
|
|
33
|
+
: [];
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
exports.getDefinitionDataParser = getDefinitionDataParser;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type DP, E } from "@duplojs/utils";
|
|
2
|
+
import { type createCheckerTransformer } from "../checkerTransformer";
|
|
3
|
+
import { type PropertyAssignment } from "typescript";
|
|
4
|
+
import type * as TST from "../../toTypescript";
|
|
5
|
+
export interface getDefinitionDataParserParams {
|
|
6
|
+
readonly dataParser: DP.DataParser;
|
|
7
|
+
readonly checkerTransformers: readonly ReturnType<typeof createCheckerTransformer>[];
|
|
8
|
+
readonly importContext: TST.MapImportContext;
|
|
9
|
+
readonly customProperties: readonly PropertyAssignment[];
|
|
10
|
+
}
|
|
11
|
+
export declare function getDefinitionDataParser(params: getDefinitionDataParserParams): readonly [] | readonly [import("typescript").ObjectLiteralExpression] | E.Left<"buildDataParserGetDefinitionError", {
|
|
12
|
+
readonly dataParser: DP.DataParser<unknown, unknown>;
|
|
13
|
+
readonly error: import("..").CheckerTransformerCheckerNotSupportedEither | import("..").CheckerTransformerBuildErrorEither;
|
|
14
|
+
}>;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { A, pipe, E, when } from '@duplojs/utils';
|
|
2
|
+
import '../checkerTransformer/index.mjs';
|
|
3
|
+
import { factory } from 'typescript';
|
|
4
|
+
import { checkerTransformer } from '../checkerTransformer/transformer.mjs';
|
|
5
|
+
|
|
6
|
+
function getDefinitionDataParser(params) {
|
|
7
|
+
const propertyAssignments = [];
|
|
8
|
+
if (params.dataParser.definition.errorMessage) {
|
|
9
|
+
propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("errorMessage"), factory.createStringLiteral(params.dataParser.definition.errorMessage)));
|
|
10
|
+
}
|
|
11
|
+
if (A.minElements(params.customProperties, 1)) {
|
|
12
|
+
propertyAssignments.push(...params.customProperties);
|
|
13
|
+
}
|
|
14
|
+
if (A.minElements(params.dataParser.definition.checkers, 1)) {
|
|
15
|
+
const checkers = A.reduce(params.dataParser.definition.checkers, A.reduceFrom([]), ({ element, lastValue, nextPush, exit }) => pipe(checkerTransformer(element, {
|
|
16
|
+
transformers: params.checkerTransformers,
|
|
17
|
+
importContext: params.importContext,
|
|
18
|
+
}), E.whenIsRight((value) => nextPush(lastValue, value)), when(E.isLeft, exit)));
|
|
19
|
+
if (E.isLeft(checkers)) {
|
|
20
|
+
return E.left("buildDataParserGetDefinitionError", {
|
|
21
|
+
dataParser: params.dataParser,
|
|
22
|
+
error: checkers,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
propertyAssignments.push(factory.createPropertyAssignment(factory.createIdentifier("checkers"), factory.createArrayLiteralExpression(checkers, A.minElements(checkers, 2))));
|
|
26
|
+
}
|
|
27
|
+
return A.minElements(propertyAssignments, 1)
|
|
28
|
+
? [
|
|
29
|
+
factory.createObjectLiteralExpression(propertyAssignments, A.minElements(propertyAssignments, 2)),
|
|
30
|
+
]
|
|
31
|
+
: [];
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export { getDefinitionDataParser };
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { DP } from "@duplojs/utils";
|
|
2
|
+
import type * as TST from "../../toTypescript";
|
|
3
|
+
import type { MapContext } from "./create";
|
|
4
|
+
export type TransformerHookAction = "stop" | "next";
|
|
5
|
+
export interface TransformerHookOutput {
|
|
6
|
+
dataParser: DP.DataParsers;
|
|
7
|
+
action: TransformerHookAction;
|
|
8
|
+
}
|
|
9
|
+
export interface TransformerHookParams {
|
|
10
|
+
dataParser: DP.DataParsers;
|
|
11
|
+
context: MapContext;
|
|
12
|
+
importContext: TST.MapImportContext;
|
|
13
|
+
output(action: TransformerHookAction, dataParser: DP.DataParsers): TransformerHookOutput;
|
|
14
|
+
}
|
|
15
|
+
export type TransformerHook = (params: TransformerHookParams) => TransformerHookOutput;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var create = require('./create.cjs');
|
|
4
|
+
var transformer = require('./transformer.cjs');
|
|
5
|
+
require('./hook.cjs');
|
|
6
|
+
var index = require('./defaults/index.cjs');
|
|
7
|
+
var getDefinitionDataParser = require('./getDefinitionDataParser.cjs');
|
|
8
|
+
var createIdentifier = require('./createIdentifier.cjs');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.createTransformer = create.createTransformer;
|
|
13
|
+
exports.transformer = transformer.transformer;
|
|
14
|
+
exports.defaultTransformers = index.defaultTransformers;
|
|
15
|
+
exports.getDefinitionDataParser = getDefinitionDataParser.getDefinitionDataParser;
|
|
16
|
+
exports.createIdentifier = createIdentifier.createIdentifier;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { createTransformer } from './create.mjs';
|
|
2
|
+
export { transformer } from './transformer.mjs';
|
|
3
|
+
import './hook.mjs';
|
|
4
|
+
export { defaultTransformers } from './defaults/index.mjs';
|
|
5
|
+
export { getDefinitionDataParser } from './getDefinitionDataParser.mjs';
|
|
6
|
+
export { createIdentifier } from './createIdentifier.mjs';
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var utils = require('@duplojs/utils');
|
|
4
|
+
require('../../toTypescript/index.cjs');
|
|
5
|
+
var typescript = require('typescript');
|
|
6
|
+
var getDefinitionDataParser = require('./getDefinitionDataParser.cjs');
|
|
7
|
+
var createIdentifier = require('./createIdentifier.cjs');
|
|
8
|
+
var addImport = require('../../toTypescript/transformer/addImport.cjs');
|
|
9
|
+
var buildContext = require('../../toTypescript/buildContext.cjs');
|
|
10
|
+
|
|
11
|
+
function transformer(dataParser, params) {
|
|
12
|
+
const currentDataParser = utils.A.reduce(params.hooks, utils.A.reduceFrom(dataParser), ({ element: hook, lastValue, next, exit }) => {
|
|
13
|
+
const result = hook({
|
|
14
|
+
dataParser: lastValue,
|
|
15
|
+
context: params.context,
|
|
16
|
+
importContext: params.importContext,
|
|
17
|
+
output: (action, dataParser) => ({
|
|
18
|
+
dataParser,
|
|
19
|
+
action,
|
|
20
|
+
}),
|
|
21
|
+
});
|
|
22
|
+
if (result.action === "stop") {
|
|
23
|
+
return exit(result.dataParser);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
return next(result.dataParser);
|
|
27
|
+
}
|
|
28
|
+
});
|
|
29
|
+
if (currentDataParser.definition.identifier) {
|
|
30
|
+
params.dependenciesContext.add(currentDataParser);
|
|
31
|
+
}
|
|
32
|
+
const identifiedDataParser = params.context.get(currentDataParser);
|
|
33
|
+
if (identifiedDataParser) {
|
|
34
|
+
return utils.E.right("buildSuccess", identifiedDataParser.identifier);
|
|
35
|
+
}
|
|
36
|
+
const newIdentifiedDataParser = utils.justExec(() => {
|
|
37
|
+
const currentIdentifier = utils.A.includes(params.recursiveDataParsers, currentDataParser)
|
|
38
|
+
|| !!currentDataParser.definition.identifier
|
|
39
|
+
? typescript.factory.createIdentifier(currentDataParser.definition.identifier !== undefined
|
|
40
|
+
? createIdentifier.createIdentifier(currentDataParser.definition.identifier)
|
|
41
|
+
: `recursive${params.context.size}DataParser`)
|
|
42
|
+
: undefined;
|
|
43
|
+
if (!currentIdentifier) {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
const contextValue = {
|
|
47
|
+
identifier: currentIdentifier,
|
|
48
|
+
expression: typescript.factory.createIdentifier("undefined"),
|
|
49
|
+
typeIdentifier: null,
|
|
50
|
+
dependencies: new Set(),
|
|
51
|
+
};
|
|
52
|
+
params.context.set(currentDataParser, contextValue);
|
|
53
|
+
return contextValue;
|
|
54
|
+
});
|
|
55
|
+
const functionParams = {
|
|
56
|
+
success(result) {
|
|
57
|
+
return utils.E.right("buildSuccess", result);
|
|
58
|
+
},
|
|
59
|
+
transformer(dataParser) {
|
|
60
|
+
return transformer(dataParser, {
|
|
61
|
+
...params,
|
|
62
|
+
dependenciesContext: newIdentifiedDataParser?.dependencies
|
|
63
|
+
?? params.dependenciesContext,
|
|
64
|
+
});
|
|
65
|
+
},
|
|
66
|
+
context: params.context,
|
|
67
|
+
dependencyIdentifier: params.dependencyIdentifier,
|
|
68
|
+
buildError() {
|
|
69
|
+
return utils.E.left("buildDataParserError", currentDataParser);
|
|
70
|
+
},
|
|
71
|
+
importContext: params.importContext,
|
|
72
|
+
getDefinition(customProperties = []) {
|
|
73
|
+
return getDefinitionDataParser.getDefinitionDataParser({
|
|
74
|
+
dataParser: currentDataParser,
|
|
75
|
+
checkerTransformers: params.checkerTransformers,
|
|
76
|
+
importContext: params.importContext,
|
|
77
|
+
customProperties,
|
|
78
|
+
});
|
|
79
|
+
},
|
|
80
|
+
addImport: addImport.createAddImport(params.importContext),
|
|
81
|
+
};
|
|
82
|
+
const result = currentDataParser.definition.overrideDataParserTransformer
|
|
83
|
+
? currentDataParser.definition.overrideDataParserTransformer(currentDataParser.addOverrideDataParserTransformer(null), functionParams)
|
|
84
|
+
: utils.A.reduce(params.dataParserTransformers, utils.A.reduceFrom(utils.E.left("dataParserNotSupport", currentDataParser)), ({ element: functionBuilder, lastValue, next, exit, }) => {
|
|
85
|
+
const result = functionBuilder(currentDataParser, functionParams);
|
|
86
|
+
if (utils.E.isLeft(result)) {
|
|
87
|
+
if (!utils.E.hasInformation(result, "dataParserNotSupport")) {
|
|
88
|
+
return exit(result);
|
|
89
|
+
}
|
|
90
|
+
return next(lastValue);
|
|
91
|
+
}
|
|
92
|
+
return exit(result);
|
|
93
|
+
});
|
|
94
|
+
if (utils.E.isLeft(result)) {
|
|
95
|
+
return result;
|
|
96
|
+
}
|
|
97
|
+
if (newIdentifiedDataParser) {
|
|
98
|
+
const typeIdentifier = utils.justExec(() => {
|
|
99
|
+
if (!utils.A.includes(params.recursiveDataParsers, currentDataParser)) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
const identifier = `$${newIdentifiedDataParser.identifier.text}`;
|
|
103
|
+
const result = buildContext.buildContext(currentDataParser, {
|
|
104
|
+
identifier,
|
|
105
|
+
transformers: params.typescriptTransformers,
|
|
106
|
+
context: params.typescriptContext,
|
|
107
|
+
importContext: params.importContext,
|
|
108
|
+
...params.toTypescript,
|
|
109
|
+
});
|
|
110
|
+
return utils.E.matchInformationOtherwise(result, {
|
|
111
|
+
buildDataParserError: (dataParser) => utils.E.left("toTypescriptBuildDataParserError", dataParser),
|
|
112
|
+
dataParserNotSupport: (dataParser) => utils.E.left("toTypescriptDataParserNotSupport", dataParser),
|
|
113
|
+
}, () => typescript.factory.createIdentifier(identifier));
|
|
114
|
+
});
|
|
115
|
+
if (utils.E.isLeft(typeIdentifier)) {
|
|
116
|
+
return typeIdentifier;
|
|
117
|
+
}
|
|
118
|
+
params.context.delete(currentDataParser);
|
|
119
|
+
params.context.set(currentDataParser, {
|
|
120
|
+
...newIdentifiedDataParser,
|
|
121
|
+
expression: utils.unwrap(result),
|
|
122
|
+
typeIdentifier: typeIdentifier,
|
|
123
|
+
});
|
|
124
|
+
return utils.E.right("buildSuccess", newIdentifiedDataParser.identifier);
|
|
125
|
+
}
|
|
126
|
+
return utils.E.right("buildSuccess", utils.unwrap(result));
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
exports.transformer = transformer;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { E, type DP } from "@duplojs/utils";
|
|
2
|
+
import * as TST from "../../toTypescript";
|
|
3
|
+
import type { MapContext, createTransformer, DependenciesContext } from "./create";
|
|
4
|
+
import { type Identifier } from "typescript";
|
|
5
|
+
import type { TransformerHook } from "./hook";
|
|
6
|
+
import type { createCheckerTransformer } from "../checkerTransformer";
|
|
7
|
+
export interface TransformerFunctionParams {
|
|
8
|
+
readonly dataParserTransformers: readonly ReturnType<typeof createTransformer>[];
|
|
9
|
+
readonly checkerTransformers: readonly ReturnType<typeof createCheckerTransformer>[];
|
|
10
|
+
readonly typescriptTransformers: readonly ReturnType<typeof TST.createTransformer>[];
|
|
11
|
+
readonly context: MapContext;
|
|
12
|
+
readonly typescriptContext: TST.MapContext;
|
|
13
|
+
readonly importContext: TST.MapImportContext;
|
|
14
|
+
readonly dependenciesContext: DependenciesContext;
|
|
15
|
+
readonly dependencyIdentifier: Identifier;
|
|
16
|
+
readonly hooks: readonly TransformerHook[];
|
|
17
|
+
readonly recursiveDataParsers: DP.DataParser[];
|
|
18
|
+
readonly toTypescript?: {
|
|
19
|
+
readonly mode?: TST.TransformerMode;
|
|
20
|
+
readonly hooks?: readonly TST.TransformerHook[];
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
export declare function transformer(dataParser: DP.DataParser, params: TransformerFunctionParams): import("./create").DataParserNotSupportedEither | import("./create").DataParserErrorEither | import("./create").DataParserGetDefinitionErrorEither | import("./create").ToTypescriptDataParserNotSupportedEither | import("./create").ToTypescriptDataParserErrorEither | E.Right<"buildSuccess", import("typescript").CallExpression | Identifier>;
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { A, E, justExec, unwrap } from '@duplojs/utils';
|
|
2
|
+
import '../../toTypescript/index.mjs';
|
|
3
|
+
import { factory } from 'typescript';
|
|
4
|
+
import { getDefinitionDataParser } from './getDefinitionDataParser.mjs';
|
|
5
|
+
import { createIdentifier } from './createIdentifier.mjs';
|
|
6
|
+
import { createAddImport } from '../../toTypescript/transformer/addImport.mjs';
|
|
7
|
+
import { buildContext } from '../../toTypescript/buildContext.mjs';
|
|
8
|
+
|
|
9
|
+
function transformer(dataParser, params) {
|
|
10
|
+
const currentDataParser = A.reduce(params.hooks, A.reduceFrom(dataParser), ({ element: hook, lastValue, next, exit }) => {
|
|
11
|
+
const result = hook({
|
|
12
|
+
dataParser: lastValue,
|
|
13
|
+
context: params.context,
|
|
14
|
+
importContext: params.importContext,
|
|
15
|
+
output: (action, dataParser) => ({
|
|
16
|
+
dataParser,
|
|
17
|
+
action,
|
|
18
|
+
}),
|
|
19
|
+
});
|
|
20
|
+
if (result.action === "stop") {
|
|
21
|
+
return exit(result.dataParser);
|
|
22
|
+
}
|
|
23
|
+
else {
|
|
24
|
+
return next(result.dataParser);
|
|
25
|
+
}
|
|
26
|
+
});
|
|
27
|
+
if (currentDataParser.definition.identifier) {
|
|
28
|
+
params.dependenciesContext.add(currentDataParser);
|
|
29
|
+
}
|
|
30
|
+
const identifiedDataParser = params.context.get(currentDataParser);
|
|
31
|
+
if (identifiedDataParser) {
|
|
32
|
+
return E.right("buildSuccess", identifiedDataParser.identifier);
|
|
33
|
+
}
|
|
34
|
+
const newIdentifiedDataParser = justExec(() => {
|
|
35
|
+
const currentIdentifier = A.includes(params.recursiveDataParsers, currentDataParser)
|
|
36
|
+
|| !!currentDataParser.definition.identifier
|
|
37
|
+
? factory.createIdentifier(currentDataParser.definition.identifier !== undefined
|
|
38
|
+
? createIdentifier(currentDataParser.definition.identifier)
|
|
39
|
+
: `recursive${params.context.size}DataParser`)
|
|
40
|
+
: undefined;
|
|
41
|
+
if (!currentIdentifier) {
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
const contextValue = {
|
|
45
|
+
identifier: currentIdentifier,
|
|
46
|
+
expression: factory.createIdentifier("undefined"),
|
|
47
|
+
typeIdentifier: null,
|
|
48
|
+
dependencies: new Set(),
|
|
49
|
+
};
|
|
50
|
+
params.context.set(currentDataParser, contextValue);
|
|
51
|
+
return contextValue;
|
|
52
|
+
});
|
|
53
|
+
const functionParams = {
|
|
54
|
+
success(result) {
|
|
55
|
+
return E.right("buildSuccess", result);
|
|
56
|
+
},
|
|
57
|
+
transformer(dataParser) {
|
|
58
|
+
return transformer(dataParser, {
|
|
59
|
+
...params,
|
|
60
|
+
dependenciesContext: newIdentifiedDataParser?.dependencies
|
|
61
|
+
?? params.dependenciesContext,
|
|
62
|
+
});
|
|
63
|
+
},
|
|
64
|
+
context: params.context,
|
|
65
|
+
dependencyIdentifier: params.dependencyIdentifier,
|
|
66
|
+
buildError() {
|
|
67
|
+
return E.left("buildDataParserError", currentDataParser);
|
|
68
|
+
},
|
|
69
|
+
importContext: params.importContext,
|
|
70
|
+
getDefinition(customProperties = []) {
|
|
71
|
+
return getDefinitionDataParser({
|
|
72
|
+
dataParser: currentDataParser,
|
|
73
|
+
checkerTransformers: params.checkerTransformers,
|
|
74
|
+
importContext: params.importContext,
|
|
75
|
+
customProperties,
|
|
76
|
+
});
|
|
77
|
+
},
|
|
78
|
+
addImport: createAddImport(params.importContext),
|
|
79
|
+
};
|
|
80
|
+
const result = currentDataParser.definition.overrideDataParserTransformer
|
|
81
|
+
? currentDataParser.definition.overrideDataParserTransformer(currentDataParser.addOverrideDataParserTransformer(null), functionParams)
|
|
82
|
+
: A.reduce(params.dataParserTransformers, A.reduceFrom(E.left("dataParserNotSupport", currentDataParser)), ({ element: functionBuilder, lastValue, next, exit, }) => {
|
|
83
|
+
const result = functionBuilder(currentDataParser, functionParams);
|
|
84
|
+
if (E.isLeft(result)) {
|
|
85
|
+
if (!E.hasInformation(result, "dataParserNotSupport")) {
|
|
86
|
+
return exit(result);
|
|
87
|
+
}
|
|
88
|
+
return next(lastValue);
|
|
89
|
+
}
|
|
90
|
+
return exit(result);
|
|
91
|
+
});
|
|
92
|
+
if (E.isLeft(result)) {
|
|
93
|
+
return result;
|
|
94
|
+
}
|
|
95
|
+
if (newIdentifiedDataParser) {
|
|
96
|
+
const typeIdentifier = justExec(() => {
|
|
97
|
+
if (!A.includes(params.recursiveDataParsers, currentDataParser)) {
|
|
98
|
+
return null;
|
|
99
|
+
}
|
|
100
|
+
const identifier = `$${newIdentifiedDataParser.identifier.text}`;
|
|
101
|
+
const result = buildContext(currentDataParser, {
|
|
102
|
+
identifier,
|
|
103
|
+
transformers: params.typescriptTransformers,
|
|
104
|
+
context: params.typescriptContext,
|
|
105
|
+
importContext: params.importContext,
|
|
106
|
+
...params.toTypescript,
|
|
107
|
+
});
|
|
108
|
+
return E.matchInformationOtherwise(result, {
|
|
109
|
+
buildDataParserError: (dataParser) => E.left("toTypescriptBuildDataParserError", dataParser),
|
|
110
|
+
dataParserNotSupport: (dataParser) => E.left("toTypescriptDataParserNotSupport", dataParser),
|
|
111
|
+
}, () => factory.createIdentifier(identifier));
|
|
112
|
+
});
|
|
113
|
+
if (E.isLeft(typeIdentifier)) {
|
|
114
|
+
return typeIdentifier;
|
|
115
|
+
}
|
|
116
|
+
params.context.delete(currentDataParser);
|
|
117
|
+
params.context.set(currentDataParser, {
|
|
118
|
+
...newIdentifiedDataParser,
|
|
119
|
+
expression: unwrap(result),
|
|
120
|
+
typeIdentifier: typeIdentifier,
|
|
121
|
+
});
|
|
122
|
+
return E.right("buildSuccess", newIdentifiedDataParser.identifier);
|
|
123
|
+
}
|
|
124
|
+
return E.right("buildSuccess", unwrap(result));
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
export { transformer };
|