Skip to content

Commit

Permalink
Merge pull request #66 from UCNot/form-serializer
Browse files Browse the repository at this point in the history
URI parameters serialization
  • Loading branch information
surol committed Aug 3, 2023
2 parents 28ccf43 + 02371f7 commit 64f3c61
Show file tree
Hide file tree
Showing 175 changed files with 4,305 additions and 1,604 deletions.
4 changes: 2 additions & 2 deletions build/emit-exports.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { UcValueCompiler } from '#churi/uc-value/compiler.js';
import { URIChargeCompiler } from '#churi/uri-charge/compiler.js';
import { UcdCompiler, ucdSupportDefaults } from 'churi/compiler.js';
import { UcdCompiler, ucdProcessDefaults } from 'churi/compiler.js';
import fs from 'node:fs/promises';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
Expand All @@ -26,7 +26,7 @@ async function emitDeserializerDefaults() {
exportDefaults: true,
features(compiler) {
// Call explicitly rather enable to force default handlers generation.
return ucdSupportDefaults(compiler);
return ucdProcessDefaults(compiler);
},
});

Expand Down
18 changes: 9 additions & 9 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,26 +76,26 @@
"httongue": "^3.1.0"
},
"devDependencies": {
"@jest/globals": "^29.6.1",
"@jest/globals": "^29.6.2",
"@proc7ts/async": "^2.1.0",
"@run-z/eslint-config": "^3.5.0",
"@run-z/prettier-config": "^2.0.0",
"@run-z/project-config": "^0.19.3",
"@swc/core": "^1.3.71",
"@swc/core": "^1.3.74",
"@swc/jest": "^0.2.27",
"@typescript-eslint/eslint-plugin": "^6.2.0",
"@typescript-eslint/parser": "^6.2.0",
"@typescript-eslint/eslint-plugin": "^6.2.1",
"@typescript-eslint/parser": "^6.2.1",
"esgen": "^0.2.9",
"eslint": "^8.45.0",
"eslint": "^8.46.0",
"eslint-plugin-jest": "^27.2.3",
"expect": "^29.6.1",
"expect": "^29.6.2",
"gh-pages": "^5.0.0",
"jest": "^29.6.1",
"jest": "^29.6.2",
"jest-junit": "^16.0.0",
"jest-mock": "^29.6.1",
"jest-mock": "^29.6.2",
"prettier": "^2.8.8",
"prettier-eslint-cli": "^7.1.0",
"rollup": "^3.26.3",
"rollup": "^3.27.0",
"run-z": "^1.11.0",
"ts-jest": "^29.1.1",
"tslib": "^2.6.1",
Expand Down
4 changes: 2 additions & 2 deletions project.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,15 @@ export default new ProjectConfig({
default: './dist/churi.core.js',
},
'./churi.uc-value.compiler.js': {
source: './src/compiler/impl/uc-value.compiler.ts',
source: './src/compiler/deserialization/impl/uc-value.compiler.ts',
default: './dist/churi.uc-value.compiler.js',
},
'./churi.uri-charge.js': {
source: './src/schema/uri-charge/impl/uri-charge.some.ts',
default: './dist/churi.uri-charge.js',
},
'./churi.uri-charge.compiler.js': {
source: './src/compiler/impl/uri-charge.compiler.ts',
source: './src/compiler/deserialization/impl/uri-charge.compiler.ts',
default: './dist/churi.uri-charge.compiler.js',
},
},
Expand Down
27 changes: 9 additions & 18 deletions src/compiler/deserialization/bigint.ucrx.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,38 +4,29 @@ import { UC_MODULE_DESERIALIZER } from '../impl/uc-modules.js';
import { UccConfig } from '../processor/ucc-config.js';
import { UcrxCore } from '../rx/ucrx-core.js';
import { UcrxLib } from '../rx/ucrx-lib.js';
import { UcrxProcessor } from '../rx/ucrx-processor.js';
import { UcrxSetup } from '../rx/ucrx-setup.js';
import { UcrxClass, UcrxSignature } from '../rx/ucrx.class.js';
import { UcdCompiler } from './ucd-compiler.js';

export class BigIntUcrxClass extends UcrxClass<UcrxSignature.Args, UcBigInt, UcBigInt.Schema> {

static uccProcess(compiler: UcdCompiler.Any): UccConfig {
static uccProcess(setup: UcrxSetup): UccConfig<UcBigInt.Variant | void> {
return {
configure: () => {
compiler.useUcrxClass<UcBigInt, UcBigInt.Schema>(
BigInt,
(lib, schema) => new this(lib, schema),
);
setup.useUcrxClass(BigInt, (lib, schema: UcBigInt.Schema) => new this(lib, schema));
},
};
}

static uccProcessSchema(
processor: UcrxProcessor.Any,
schema: UcBigInt.Schema,
): UccConfig<UcBigInt.Variant> {
return {
configure: variant => {
processor.useUcrxClass(schema, (lib, schema) => new this(lib, schema, variant));
configureSchema: (schema, variant) => {
setup.useUcrxClass(
schema,
(lib, schema) => new this(lib, schema as UcBigInt.Schema, variant),
);
},
};
}

constructor(
lib: UcrxLib,
schema: UcBigInt.Schema,
{ string = 'parse', number = 'parse' }: UcBigInt.Variant = {},
{ string = 'parse', number = 'parse' }: UcBigInt.Variant | void = {},
) {
super({
lib,
Expand Down
9 changes: 3 additions & 6 deletions src/compiler/deserialization/boolean.ucrx.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,15 @@ import { UcBoolean } from '../../schema/boolean/uc-boolean.js';
import { UccConfig } from '../processor/ucc-config.js';
import { UcrxCore } from '../rx/ucrx-core.js';
import { UcrxLib } from '../rx/ucrx-lib.js';
import { UcrxSetup } from '../rx/ucrx-setup.js';
import { UcrxClass, UcrxSignature } from '../rx/ucrx.class.js';
import { UcdCompiler } from './ucd-compiler.js';

export class BooleanUcrxClass extends UcrxClass<UcrxSignature.Args, UcBoolean, UcBoolean.Schema> {

static uccProcess(processor: UcdCompiler.Any): UccConfig {
static uccProcess(setup: UcrxSetup): UccConfig {
return {
configure: () => {
processor.useUcrxClass<UcBoolean, UcBoolean.Schema>(
Boolean,
(lib, schema) => new this(lib, schema),
);
setup.useUcrxClass(Boolean, (lib, schema: UcBoolean.Schema) => new this(lib, schema));
},
};
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
import { EsFunction, esline } from 'esgen';
import { UcUnknown, ucUnknown } from '../../schema/unknown/uc-unknown.js';
import { UcdCompiler } from '../deserialization/ucd-compiler.js';
import { UcdLib } from '../deserialization/ucd-lib.js';
import { UcdModels } from '../deserialization/ucd-models.js';
import { UcrxLib } from '../rx/ucrx-lib.js';
import { UcUnknown, ucUnknown } from '../../../schema/unknown/uc-unknown.js';
import { UcrxLib } from '../../rx/ucrx-lib.js';
import { UcdCompiler } from '../ucd-compiler.js';
import { UcdLib } from '../ucd-lib.js';
import { UcdModels } from '../ucd-models.js';

export class UcValueCompiler extends UcdCompiler<{
parseUcValue: UcdModels.SyncEntry<UcUnknown.Schema>;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,8 @@ import {
esMemberAccessor,
esline,
} from 'esgen';
import { UcdHandlerFeature } from '../deserialization/ucd-handler-feature.js';
import { UC_MODULE_DESERIALIZER_DEFAULTS } from './uc-modules.js';
import { UC_MODULE_DESERIALIZER_DEFAULTS } from '../../impl/uc-modules.js';
import { UcdHandlerFeature } from '../ucd-handler-feature.js';

export class UcdHandlerRegistry {

Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,28 @@
import { EsCode, EsSignature, EsSnippet, esStringLiteral, esline } from 'esgen';
import { COMPILER_MODULE } from '../../impl/module-names.js';
import { UcList, ucList } from '../../schema/list/uc-list.js';
import { UcMap, ucMap } from '../../schema/map/uc-map.js';
import { UcNullable } from '../../schema/uc-nullable.js';
import { UcSchema } from '../../schema/uc-schema.js';
import { URICharge } from '../../schema/uri-charge/uri-charge.js';
import { ListUcrxClass } from '../deserialization/list.ucrx.class.js';
import { MapUcrxClass, MapUcrxStore } from '../deserialization/map.ucrx.class.js';
import { UcdCompiler } from '../deserialization/ucd-compiler.js';
import { UcdLib } from '../deserialization/ucd-lib.js';
import { UcdModels } from '../deserialization/ucd-models.js';
import { ucdSupportDefaults } from '../deserialization/ucd-support-defaults.js';
import { UnknownUcrxClass } from '../deserialization/unknown.ucrx.class.js';
import { UcrxCore } from '../rx/ucrx-core.js';
import { UcrxEntitySetterSignature } from '../rx/ucrx-entity-setter.js';
import { UcrxFormattedSetterSignature } from '../rx/ucrx-formatted-setter.js';
import { UcrxBeforeMod, UcrxMethod } from '../rx/ucrx-method.js';
import { UcrxSetter, UcrxSetterSignature, isUcrxSetter } from '../rx/ucrx-setter.js';
import { COMPILER_MODULE } from '../../../impl/module-names.js';
import { UcList, ucList } from '../../../schema/list/uc-list.js';
import { UcMap, ucMap } from '../../../schema/map/uc-map.js';
import { UcNullable } from '../../../schema/uc-nullable.js';
import { UcSchema } from '../../../schema/uc-schema.js';
import { URICharge } from '../../../schema/uri-charge/uri-charge.js';
import {
UC_MODULE_CHURI,
UC_MODULE_UC_VALUE_DESERIALIZER,
UC_MODULE_URI_CHARGE,
} from './uc-modules.js';
} from '../../impl/uc-modules.js';
import { UcrxCore } from '../../rx/ucrx-core.js';
import { UcrxEntitySetterSignature } from '../../rx/ucrx-entity-setter.js';
import { UcrxFormattedSetterSignature } from '../../rx/ucrx-formatted-setter.js';
import { UcrxBeforeMod, UcrxMethod } from '../../rx/ucrx-method.js';
import { UcrxSetter, UcrxSetterSignature, isUcrxSetter } from '../../rx/ucrx-setter.js';
import { ucsProcessUnknown } from '../../serialization/ucs-process-unknown.js';
import { ListUcrxClass } from '../list.ucrx.class.js';
import { MapUcrxClass, MapUcrxStore } from '../map.ucrx.class.js';
import { UcdCompiler } from '../ucd-compiler.js';
import { UcdLib } from '../ucd-lib.js';
import { UcdModels } from '../ucd-models.js';
import { ucdProcessDefaults } from '../ucd-process-defaults.js';
import { UnknownUcrxClass } from '../unknown.ucrx.class.js';

export class URIChargeCompiler extends UcdCompiler<{
parseURICharge: UcdModels.SyncEntry<UcSchema<URICharge>>;
Expand All @@ -34,7 +35,7 @@ export class URIChargeCompiler extends UcdCompiler<{
return {
configure: () => {
compiler
.enable(ucdSupportDefaults)
.enable(ucdProcessDefaults)
.useUcrxClass(URICharge$Schema, (lib, schema) => new URIChargeUcrxClass(lib, schema))
.useUcrxClass(
ucList(URICharge$Schema),
Expand Down Expand Up @@ -68,12 +69,12 @@ const URICharge$Schema: UcNullable<URICharge> = {
nullable: true,
where: {
deserializer: {
use: 'UnknownUcrxClass',
use: UnknownUcrxClass.name,
from: COMPILER_MODULE,
with: 'charge',
},
serializer: {
use: 'ucsSupportUnknown',
use: ucsProcessUnknown.name,
from: COMPILER_MODULE,
with: 'charge',
},
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { noop } from '@proc7ts/primitives';
import { UcDeserializer } from '../../schema/uc-deserializer.js';
import { URICharge } from '../../schema/uri-charge/uri-charge.js';
import { UcDeserializer } from '../../../schema/uc-deserializer.js';
import { URICharge } from '../../../schema/uri-charge/uri-charge.js';

// istanbul ignore next
export const parseURICharge: UcDeserializer.Sync<URICharge> = noop as any;
14 changes: 7 additions & 7 deletions src/compiler/deserialization/integer.ucrx.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,18 @@ import { UC_MODULE_CHURI, UC_MODULE_DESERIALIZER } from '../impl/uc-modules.js';
import { UccConfig } from '../processor/ucc-config.js';
import { UcrxCore } from '../rx/ucrx-core.js';
import { UcrxLib } from '../rx/ucrx-lib.js';
import { UcrxProcessor } from '../rx/ucrx-processor.js';
import { UcrxSetup } from '../rx/ucrx-setup.js';
import { UcrxClass, UcrxSignature } from '../rx/ucrx.class.js';

export class IntegerUcrxClass extends UcrxClass<UcrxSignature.Args, UcInteger, UcInteger.Schema> {

static uccProcessSchema(
processor: UcrxProcessor.Any,
schema: UcInteger.Schema,
): UccConfig<UcInteger.Variant | undefined> {
static uccProcess(setup: UcrxSetup): UccConfig<UcInteger.Variant | undefined> {
return {
configure: variant => {
processor.useUcrxClass(schema, (lib, schema) => new this(lib, schema, variant));
configureSchema: (schema, variant) => {
setup.useUcrxClass(
schema,
(lib, schema: UcInteger.Schema) => new this(lib, schema, variant),
);
},
};
}
Expand Down
11 changes: 4 additions & 7 deletions src/compiler/deserialization/list.ucrx.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -23,21 +23,18 @@ import { UccConfig } from '../processor/ucc-config.js';
import { UcrxCore } from '../rx/ucrx-core.js';
import { UcrxLib } from '../rx/ucrx-lib.js';
import { UcrxBeforeMod, UcrxMethod } from '../rx/ucrx-method.js';
import { UcrxSetup } from '../rx/ucrx-setup.js';
import { UcrxClass, UcrxSignature } from '../rx/ucrx.class.js';
import { UcdCompiler } from './ucd-compiler.js';

export class ListUcrxClass<
TItem = unknown,
TItemModel extends UcModel<TItem> = UcModel<TItem>,
> extends UcrxClass<UcrxSignature.Args, TItem[], UcList.Schema<TItem, TItemModel>> {

static uccProcessSchema(
compiler: UcdCompiler.Any,
schema: UcList.Schema,
): UccConfig<UccListOptions> {
static uccProcess(setup: UcrxSetup): UccConfig<UccListOptions> {
return {
configure: options => {
compiler
configureSchema: (schema: UcList.Schema, options) => {
setup
.processModel(schema.item)
.useUcrxClass(schema, (lib, schema: UcList.Schema) => new this(lib, schema, options));
},
Expand Down
19 changes: 8 additions & 11 deletions src/compiler/deserialization/map.ucrx.class.ts
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ import { ucSchemaVariant } from '../impl/uc-schema-variant.js';
import { UccConfig } from '../processor/ucc-config.js';
import { UcrxCore } from '../rx/ucrx-core.js';
import { UcrxLib } from '../rx/ucrx-lib.js';
import { UcrxSetup } from '../rx/ucrx-setup.js';
import { UcrxClass, UcrxSignature } from '../rx/ucrx.class.js';
import { MapUcrxEntry } from './map.ucrx-entry.js';
import { UcdCompiler } from './ucd-compiler.js';

export class MapUcrxClass<
in out TEntriesModel extends UcMap.EntriesModel = UcMap.EntriesModel,
Expand All @@ -32,20 +32,17 @@ export class MapUcrxClass<
UcMap.Schema<TEntriesModel, TExtraModel>
> {

static uccProcessSchema(
compiler: UcdCompiler.Any,
schema: UcMap.Schema,
): UccConfig<UcMap.Variant> {
const { entries, extra } = schema;

static uccProcess(setup: UcrxSetup): UccConfig<UcMap.Variant> {
return {
configure: variant => {
compiler.useUcrxClass(schema, (lib, schema) => new this(lib, schema, variant));
configureSchema: (schema: UcMap.Schema, variant) => {
const { entries, extra } = schema;

setup.useUcrxClass(schema, (lib, schema: UcMap.Schema) => new this(lib, schema, variant));
for (const entrySchema of Object.values(entries)) {
compiler.processModel(entrySchema);
setup.processModel(entrySchema);
}
if (extra) {
compiler.processModel(extra);
setup.processModel(extra);
}
},
};
Expand Down
9 changes: 5 additions & 4 deletions src/compiler/deserialization/mod.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,9 @@ export * from './ucd-function.js';
export * from './ucd-handler-feature.js';
export * from './ucd-lib.js';
export * from './ucd-models.js';
export * from './ucd-support-defaults.js';
export * from './ucd-support-inset.js';
export * from './ucd-support-non-finite.js';
export * from './ucd-support-primitives.js';
export * from './ucd-process-defaults.js';
export * from './ucd-process-inset.js';
export * from './ucd-process-non-finite.js';
export * from './ucd-process-primitives.js';
export * from './ucd-setup.js';
export * from './unknown.ucrx.class.js';
Loading

0 comments on commit 64f3c61

Please sign in to comment.