@danielfgray/pg-sourcerer 0.2.1 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +3 -4
- package/dist/cli.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +1 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +14 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +2 -0
- package/dist/errors.js.map +1 -1
- package/dist/generate.d.ts +5 -9
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +27 -29
- package/dist/generate.js.map +1 -1
- package/dist/index.d.ts +19 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +25 -13
- package/dist/index.js.map +1 -1
- package/dist/init.d.ts.map +1 -1
- package/dist/init.js +39 -9
- package/dist/init.js.map +1 -1
- package/dist/ir/extensions/queries.d.ts +264 -0
- package/dist/ir/extensions/queries.d.ts.map +1 -0
- package/dist/ir/extensions/queries.js +153 -0
- package/dist/ir/extensions/queries.js.map +1 -0
- package/dist/ir/extensions/schema-builder.d.ts +61 -0
- package/dist/ir/extensions/schema-builder.d.ts.map +1 -0
- package/dist/ir/extensions/schema-builder.js +5 -0
- package/dist/ir/extensions/schema-builder.js.map +1 -0
- package/dist/lib/conjure.d.ts +66 -0
- package/dist/lib/conjure.d.ts.map +1 -1
- package/dist/lib/conjure.js +127 -29
- package/dist/lib/conjure.js.map +1 -1
- package/dist/lib/hex.d.ts +10 -3
- package/dist/lib/hex.d.ts.map +1 -1
- package/dist/lib/hex.js +18 -8
- package/dist/lib/hex.js.map +1 -1
- package/dist/plugins/arktype.d.ts +27 -14
- package/dist/plugins/arktype.d.ts.map +1 -1
- package/dist/plugins/arktype.js +166 -130
- package/dist/plugins/arktype.js.map +1 -1
- package/dist/plugins/effect.d.ts +53 -0
- package/dist/plugins/effect.d.ts.map +1 -0
- package/dist/plugins/effect.js +1074 -0
- package/dist/plugins/effect.js.map +1 -0
- package/dist/plugins/http-elysia.d.ts +32 -0
- package/dist/plugins/http-elysia.d.ts.map +1 -0
- package/dist/plugins/http-elysia.js +613 -0
- package/dist/plugins/http-elysia.js.map +1 -0
- package/dist/plugins/http-express.d.ts +36 -0
- package/dist/plugins/http-express.d.ts.map +1 -0
- package/dist/plugins/http-express.js +388 -0
- package/dist/plugins/http-express.js.map +1 -0
- package/dist/plugins/http-hono.d.ts +36 -0
- package/dist/plugins/http-hono.d.ts.map +1 -0
- package/dist/plugins/http-hono.js +453 -0
- package/dist/plugins/http-hono.js.map +1 -0
- package/dist/plugins/http-orpc.d.ts +55 -0
- package/dist/plugins/http-orpc.d.ts.map +1 -0
- package/dist/plugins/http-orpc.js +370 -0
- package/dist/plugins/http-orpc.js.map +1 -0
- package/dist/plugins/http-trpc.d.ts +59 -0
- package/dist/plugins/http-trpc.d.ts.map +1 -0
- package/dist/plugins/http-trpc.js +392 -0
- package/dist/plugins/http-trpc.js.map +1 -0
- package/dist/plugins/kysely/queries.d.ts +92 -0
- package/dist/plugins/kysely/queries.d.ts.map +1 -0
- package/dist/plugins/kysely/queries.js +1169 -0
- package/dist/plugins/kysely/queries.js.map +1 -0
- package/dist/plugins/kysely/shared.d.ts +59 -0
- package/dist/plugins/kysely/shared.d.ts.map +1 -0
- package/dist/plugins/kysely/shared.js +247 -0
- package/dist/plugins/kysely/shared.js.map +1 -0
- package/dist/plugins/kysely/types.d.ts +22 -0
- package/dist/plugins/kysely/types.d.ts.map +1 -0
- package/dist/plugins/kysely/types.js +428 -0
- package/dist/plugins/kysely/types.js.map +1 -0
- package/dist/plugins/kysely.d.ts +72 -0
- package/dist/plugins/kysely.d.ts.map +1 -0
- package/dist/plugins/kysely.js +906 -0
- package/dist/plugins/kysely.js.map +1 -0
- package/dist/plugins/sql-queries.d.ts +55 -11
- package/dist/plugins/sql-queries.d.ts.map +1 -1
- package/dist/plugins/sql-queries.js +467 -218
- package/dist/plugins/sql-queries.js.map +1 -1
- package/dist/plugins/types.d.ts +20 -14
- package/dist/plugins/types.d.ts.map +1 -1
- package/dist/plugins/types.js +90 -112
- package/dist/plugins/types.js.map +1 -1
- package/dist/plugins/valibot.d.ts +45 -0
- package/dist/plugins/valibot.d.ts.map +1 -0
- package/dist/plugins/valibot.js +422 -0
- package/dist/plugins/valibot.js.map +1 -0
- package/dist/plugins/zod.d.ts +27 -14
- package/dist/plugins/zod.d.ts.map +1 -1
- package/dist/plugins/zod.js +231 -166
- package/dist/plugins/zod.js.map +1 -1
- package/dist/services/artifact-store.d.ts +11 -1
- package/dist/services/artifact-store.d.ts.map +1 -1
- package/dist/services/artifact-store.js +9 -0
- package/dist/services/artifact-store.js.map +1 -1
- package/dist/services/core-providers.d.ts +15 -0
- package/dist/services/core-providers.d.ts.map +1 -0
- package/dist/services/core-providers.js +23 -0
- package/dist/services/core-providers.js.map +1 -0
- package/dist/services/emissions.d.ts +14 -0
- package/dist/services/emissions.d.ts.map +1 -1
- package/dist/services/emissions.js +86 -47
- package/dist/services/emissions.js.map +1 -1
- package/dist/services/execution.d.ts +35 -0
- package/dist/services/execution.d.ts.map +1 -0
- package/dist/services/execution.js +86 -0
- package/dist/services/execution.js.map +1 -0
- package/dist/services/file-builder.d.ts +4 -0
- package/dist/services/file-builder.d.ts.map +1 -1
- package/dist/services/file-builder.js.map +1 -1
- package/dist/services/inflection.d.ts +2 -2
- package/dist/services/inflection.d.ts.map +1 -1
- package/dist/services/inflection.js +4 -4
- package/dist/services/inflection.js.map +1 -1
- package/dist/services/ir-builder.d.ts.map +1 -1
- package/dist/services/ir-builder.js +10 -3
- package/dist/services/ir-builder.js.map +1 -1
- package/dist/services/pg-types.d.ts +31 -0
- package/dist/services/pg-types.d.ts.map +1 -1
- package/dist/services/pg-types.js +24 -0
- package/dist/services/pg-types.js.map +1 -1
- package/dist/services/plugin-runner.d.ts +27 -37
- package/dist/services/plugin-runner.d.ts.map +1 -1
- package/dist/services/plugin-runner.js +73 -171
- package/dist/services/plugin-runner.js.map +1 -1
- package/dist/services/plugin.d.ts +349 -217
- package/dist/services/plugin.d.ts.map +1 -1
- package/dist/services/plugin.js +182 -130
- package/dist/services/plugin.js.map +1 -1
- package/dist/services/resolution.d.ts +38 -0
- package/dist/services/resolution.d.ts.map +1 -0
- package/dist/services/resolution.js +242 -0
- package/dist/services/resolution.js.map +1 -0
- package/dist/services/service-registry.d.ts +74 -0
- package/dist/services/service-registry.d.ts.map +1 -0
- package/dist/services/service-registry.js +61 -0
- package/dist/services/service-registry.js.map +1 -0
- package/dist/services/symbols.d.ts +59 -0
- package/dist/services/symbols.d.ts.map +1 -1
- package/dist/services/symbols.js +16 -0
- package/dist/services/symbols.js.map +1 -1
- package/dist/testing.d.ts +4 -25
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +2 -23
- package/dist/testing.js.map +1 -1
- package/package.json +1 -1
- package/dist/plugins/effect-model.d.ts +0 -17
- package/dist/plugins/effect-model.d.ts.map +0 -1
- package/dist/plugins/effect-model.js +0 -409
- package/dist/plugins/effect-model.js.map +0 -1
- package/dist/plugins/kysely-queries.d.ts +0 -66
- package/dist/plugins/kysely-queries.d.ts.map +0 -1
- package/dist/plugins/kysely-queries.js +0 -951
- package/dist/plugins/kysely-queries.js.map +0 -1
- package/dist/plugins/kysely-types.d.ts +0 -35
- package/dist/plugins/kysely-types.d.ts.map +0 -1
- package/dist/plugins/kysely-types.js +0 -601
- package/dist/plugins/kysely-types.js.map +0 -1
package/dist/testing.js
CHANGED
|
@@ -11,9 +11,8 @@ import { TypeHintsLive } from "./services/type-hints.js";
|
|
|
11
11
|
import { ArtifactStoreLive } from "./services/artifact-store.js";
|
|
12
12
|
import { PluginMeta } from "./services/plugin-meta.js";
|
|
13
13
|
import { IR } from "./services/ir.js";
|
|
14
|
-
import { PluginRunner } from "./services/plugin-runner.js";
|
|
15
14
|
/**
|
|
16
|
-
* Base test layers for direct plugin testing
|
|
15
|
+
* Base test layers for direct plugin testing.
|
|
17
16
|
*
|
|
18
17
|
* Provides all shared services except IR and PluginMeta,
|
|
19
18
|
* which are test-specific.
|
|
@@ -28,26 +27,6 @@ import { PluginRunner } from "./services/plugin-runner.js";
|
|
|
28
27
|
* ```
|
|
29
28
|
*/
|
|
30
29
|
export const PluginTestLayers = Layer.mergeAll(InflectionLive, EmissionsLive, SymbolsLive, TypeHintsLive([]), ArtifactStoreLive);
|
|
31
|
-
/**
|
|
32
|
-
* Test layer for PluginRunner integration tests.
|
|
33
|
-
*
|
|
34
|
-
* PluginRunner.Default includes InflectionLive by default.
|
|
35
|
-
* Add TypeHintsLive for complete test setup.
|
|
36
|
-
*
|
|
37
|
-
* Usage:
|
|
38
|
-
* ```typescript
|
|
39
|
-
* layer(PluginRunnerTestLayer)("my tests", (it) => {
|
|
40
|
-
* it.effect("runs plugins", () =>
|
|
41
|
-
* Effect.gen(function* () {
|
|
42
|
-
* const runner = yield* PluginRunner
|
|
43
|
-
* const prepared = yield* runner.prepare(plugins)
|
|
44
|
-
* const result = yield* runner.run(prepared, ir)
|
|
45
|
-
* })
|
|
46
|
-
* )
|
|
47
|
-
* })
|
|
48
|
-
* ```
|
|
49
|
-
*/
|
|
50
|
-
export const PluginRunnerTestLayer = Layer.mergeAll(PluginRunner.Default, TypeHintsLive([]));
|
|
51
30
|
/**
|
|
52
31
|
* Create a complete test layer for a specific plugin test.
|
|
53
32
|
*
|
|
@@ -79,6 +58,6 @@ export { IR } from "./services/ir.js";
|
|
|
79
58
|
export { PluginMeta } from "./services/plugin-meta.js";
|
|
80
59
|
export { Emissions } from "./services/emissions.js";
|
|
81
60
|
export { Symbols } from "./services/symbols.js";
|
|
82
|
-
export {
|
|
61
|
+
export { runPlugins } from "./services/plugin-runner.js";
|
|
83
62
|
export { createIRBuilder, freezeIR } from "./ir/semantic-ir.js";
|
|
84
63
|
//# sourceMappingURL=testing.js.map
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAA;AAC9B,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAA;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAA;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAA;AAChE,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AAGrC;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,QAAQ,CAC5C,cAAc,EACd,aAAa,EACb,WAAW,EACX,aAAa,CAAC,EAAE,CAAC,EACjB,iBAAiB,CAClB,CAAA;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,qBAAqB,CAAC,EAAc,EAAE,UAAkB;IACtE,OAAO,KAAK,CAAC,QAAQ,CACnB,gBAAgB,EAChB,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,EACrB,KAAK,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAChD,CAAA;AACH,CAAC;AAED,4CAA4C;AAC5C,OAAO,EAAE,EAAE,EAAE,MAAM,kBAAkB,CAAA;AACrC,OAAO,EAAE,UAAU,EAAE,MAAM,2BAA2B,CAAA;AACtD,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAA;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAA;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Effect Model Plugin
|
|
3
|
-
*
|
|
4
|
-
* Generates @effect/sql Model classes for each entity.
|
|
5
|
-
*/
|
|
6
|
-
export declare const effectModelPlugin: import("../index.js").PluginFactory<{
|
|
7
|
-
readonly outputDir: string;
|
|
8
|
-
readonly exportTypes: boolean;
|
|
9
|
-
readonly enumStyle: "enum" | "strings";
|
|
10
|
-
readonly typeReferences: "inline" | "separate";
|
|
11
|
-
}, {
|
|
12
|
-
readonly outputDir?: string | undefined;
|
|
13
|
-
readonly exportTypes?: boolean | undefined;
|
|
14
|
-
readonly enumStyle?: "enum" | "strings" | undefined;
|
|
15
|
-
readonly typeReferences?: "inline" | "separate" | undefined;
|
|
16
|
-
}>;
|
|
17
|
-
//# sourceMappingURL=effect-model.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect-model.d.ts","sourceRoot":"","sources":["../../src/plugins/effect-model.ts"],"names":[],"mappings":"AAodA;;;;GAIG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;EAsH5B,CAAC"}
|
|
@@ -1,409 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Effect Model Plugin - Generate @effect/sql Model classes for entities
|
|
3
|
-
*
|
|
4
|
-
* Generates Model classes with proper variants based on:
|
|
5
|
-
* - Field properties (isGenerated, isIdentity, hasDefault, nullable)
|
|
6
|
-
* - Smart tags (sensitive, insert override)
|
|
7
|
-
*/
|
|
8
|
-
import { Array as Arr, Option, pipe, Schema as S } from "effect";
|
|
9
|
-
import { definePlugin } from "../services/plugin.js";
|
|
10
|
-
import { inflect } from "../services/inflection.js";
|
|
11
|
-
import { findEnumByPgName, TsType } from "../services/pg-types.js";
|
|
12
|
-
import { getEnumEntities, getTableEntities, getCompositeEntities } from "../ir/semantic-ir.js";
|
|
13
|
-
import { conjure } from "../lib/conjure.js";
|
|
14
|
-
import { isUuidType, isDateType, isBigIntType, isEnumType, getPgTypeName, resolveFieldType } from "../lib/field-utils.js";
|
|
15
|
-
const { ts, exp, obj } = conjure;
|
|
16
|
-
// ============================================================================
|
|
17
|
-
// Configuration
|
|
18
|
-
// ============================================================================
|
|
19
|
-
const EffectModelPluginConfig = S.Struct({
|
|
20
|
-
/** Output directory relative to main outputDir */
|
|
21
|
-
outputDir: S.optionalWith(S.String, { default: () => "effect-model" }),
|
|
22
|
-
/** How to represent enum values: 'strings' uses S.Union(S.Literal(...)), 'enum' uses S.Enums(TsEnum) */
|
|
23
|
-
enumStyle: S.optionalWith(S.Union(S.Literal("strings"), S.Literal("enum")), { default: () => "strings" }),
|
|
24
|
-
/** Where to define enum types: 'inline' embeds at usage, 'separate' generates enum files */
|
|
25
|
-
typeReferences: S.optionalWith(S.Union(S.Literal("inline"), S.Literal("separate")), { default: () => "separate" }),
|
|
26
|
-
/** Export inferred types for composite schemas (default: true) */
|
|
27
|
-
exportTypes: S.optionalWith(S.Boolean, { default: () => true }),
|
|
28
|
-
});
|
|
29
|
-
// ============================================================================
|
|
30
|
-
// Smart Tags
|
|
31
|
-
// ============================================================================
|
|
32
|
-
const EffectModelTagsSchema = S.Struct({
|
|
33
|
-
/** Override insert optionality: "optional" or "required" */
|
|
34
|
-
insert: S.optional(S.Union(S.Literal("optional"), S.Literal("required"))),
|
|
35
|
-
/** Mark field as sensitive - excluded from json variants */
|
|
36
|
-
sensitive: S.optional(S.Boolean),
|
|
37
|
-
});
|
|
38
|
-
const getEffectModelTags = (field) => {
|
|
39
|
-
const pluginTags = field.tags["effect:model"];
|
|
40
|
-
if (!pluginTags)
|
|
41
|
-
return {};
|
|
42
|
-
return S.decodeUnknownSync(EffectModelTagsSchema)(pluginTags);
|
|
43
|
-
};
|
|
44
|
-
const isSensitive = (field) => getEffectModelTags(field).sensitive === true;
|
|
45
|
-
const getInsertOverride = (field) => getEffectModelTags(field).insert;
|
|
46
|
-
// ============================================================================
|
|
47
|
-
// Schema Builders (pure functions)
|
|
48
|
-
// ============================================================================
|
|
49
|
-
/** Cast n.Expression to ExpressionKind for recast compatibility */
|
|
50
|
-
const toExprKind = (expr) => expr;
|
|
51
|
-
/** Map TypeScript type to Effect Schema property access */
|
|
52
|
-
const tsTypeToEffectSchema = (tsType) => {
|
|
53
|
-
const prop = tsType === TsType.String
|
|
54
|
-
? "String"
|
|
55
|
-
: tsType === TsType.Number
|
|
56
|
-
? "Number"
|
|
57
|
-
: tsType === TsType.Boolean
|
|
58
|
-
? "Boolean"
|
|
59
|
-
: tsType === TsType.BigInt
|
|
60
|
-
? "BigInt"
|
|
61
|
-
: tsType === TsType.Date
|
|
62
|
-
? "Date"
|
|
63
|
-
: "Unknown";
|
|
64
|
-
return conjure.id("S").prop(prop).build();
|
|
65
|
-
};
|
|
66
|
-
/** Build S.Union(S.Literal(...), ...) for an enum */
|
|
67
|
-
const buildEnumSchema = (enumResult) => conjure
|
|
68
|
-
.id("S")
|
|
69
|
-
.method("Union", enumResult.values.map(v => conjure
|
|
70
|
-
.id("S")
|
|
71
|
-
.method("Literal", [conjure.str(v)])
|
|
72
|
-
.build()))
|
|
73
|
-
.build();
|
|
74
|
-
// ============================================================================
|
|
75
|
-
// Schema Wrappers
|
|
76
|
-
// ============================================================================
|
|
77
|
-
const wrapIf = (schema, condition, wrapper) => (condition ? wrapper(schema) : schema);
|
|
78
|
-
const wrapNullable = (schema) => conjure.id("S").method("NullOr", [schema]).build();
|
|
79
|
-
const wrapArray = (schema) => conjure.id("S").method("Array", [schema]).build();
|
|
80
|
-
const wrapGenerated = (schema) => conjure.id("Model").method("Generated", [schema]).build();
|
|
81
|
-
const wrapSensitive = (schema) => conjure.id("Model").method("Sensitive", [schema]).build();
|
|
82
|
-
const wrapFieldOption = (schema) => conjure.id("Model").method("FieldOption", [schema]).build();
|
|
83
|
-
/**
|
|
84
|
-
* Determine if a field should be treated as DB-generated.
|
|
85
|
-
* Includes GENERATED ALWAYS, IDENTITY, and PK fields with defaults.
|
|
86
|
-
*/
|
|
87
|
-
const isDbGenerated = (field, entity) => field.isGenerated ||
|
|
88
|
-
field.isIdentity ||
|
|
89
|
-
(field.hasDefault && entity.primaryKey?.columns.includes(field.columnName) === true);
|
|
90
|
-
/**
|
|
91
|
-
* Check for auto-timestamp patterns (created_at, updated_at)
|
|
92
|
-
*/
|
|
93
|
-
const getAutoTimestamp = (field) => {
|
|
94
|
-
if (!field.hasDefault)
|
|
95
|
-
return undefined;
|
|
96
|
-
const name = field.columnName.toLowerCase();
|
|
97
|
-
if (name === "created_at" || name === "createdat")
|
|
98
|
-
return "insert";
|
|
99
|
-
if (name === "updated_at" || name === "updatedat")
|
|
100
|
-
return "update";
|
|
101
|
-
return undefined;
|
|
102
|
-
};
|
|
103
|
-
// ============================================================================
|
|
104
|
-
// Field → Schema Expression
|
|
105
|
-
// ============================================================================
|
|
106
|
-
/**
|
|
107
|
-
* Build the base Effect Schema type for a field
|
|
108
|
-
*/
|
|
109
|
-
const buildBaseSchemaType = (field, ctx) => {
|
|
110
|
-
const resolved = resolveFieldType(field, ctx.enums, ctx.extensions);
|
|
111
|
-
if (resolved.enumDef) {
|
|
112
|
-
if (ctx.typeReferences === "separate") {
|
|
113
|
-
// Reference by name - the enum schema is imported
|
|
114
|
-
return conjure.id(resolved.enumDef.name).build();
|
|
115
|
-
}
|
|
116
|
-
else if (ctx.enumStyle === "enum") {
|
|
117
|
-
// Inline native enum: S.Enums(EnumName)
|
|
118
|
-
// Note: This requires the TS enum to be generated/imported
|
|
119
|
-
return conjure.id("S").method("Enums", [
|
|
120
|
-
conjure.id(resolved.enumDef.name).build()
|
|
121
|
-
]).build();
|
|
122
|
-
}
|
|
123
|
-
else {
|
|
124
|
-
// Inline strings: S.Union(S.Literal(...), ...)
|
|
125
|
-
return buildEnumSchema(resolved.enumDef);
|
|
126
|
-
}
|
|
127
|
-
}
|
|
128
|
-
if (isUuidType(field))
|
|
129
|
-
return conjure.id("S").prop("UUID").build();
|
|
130
|
-
if (isDateType(field))
|
|
131
|
-
return conjure.id("S").prop("Date").build();
|
|
132
|
-
if (isBigIntType(field))
|
|
133
|
-
return conjure.id("S").prop("BigInt").build();
|
|
134
|
-
return tsTypeToEffectSchema(resolved.tsType);
|
|
135
|
-
};
|
|
136
|
-
/**
|
|
137
|
-
* Build the complete field schema expression with all wrappers applied
|
|
138
|
-
*/
|
|
139
|
-
const buildFieldSchema = (field, ctx) => {
|
|
140
|
-
// Check for auto-timestamp patterns first (returns early with special type)
|
|
141
|
-
const autoTs = getAutoTimestamp(field);
|
|
142
|
-
if (autoTs === "insert")
|
|
143
|
-
return conjure.id("Model").prop("DateTimeInsertFromDate").build();
|
|
144
|
-
if (autoTs === "update")
|
|
145
|
-
return conjure.id("Model").prop("DateTimeUpdateFromDate").build();
|
|
146
|
-
// Build base type with array/nullable wrappers
|
|
147
|
-
let schema = buildBaseSchemaType(field, ctx);
|
|
148
|
-
schema = wrapIf(schema, field.isArray, wrapArray);
|
|
149
|
-
schema = wrapIf(schema, field.nullable, wrapNullable);
|
|
150
|
-
schema = wrapIf(schema, isSensitive(field), wrapSensitive);
|
|
151
|
-
// Determine generated/optional status
|
|
152
|
-
const insertOverride = getInsertOverride(field);
|
|
153
|
-
const shouldBeGenerated = insertOverride === "required"
|
|
154
|
-
? field.isGenerated || field.isIdentity
|
|
155
|
-
: isDbGenerated(field, ctx.entity);
|
|
156
|
-
if (shouldBeGenerated) {
|
|
157
|
-
schema = wrapGenerated(schema);
|
|
158
|
-
}
|
|
159
|
-
else if (insertOverride === "optional") {
|
|
160
|
-
schema = wrapFieldOption(schema);
|
|
161
|
-
}
|
|
162
|
-
return schema;
|
|
163
|
-
};
|
|
164
|
-
// ============================================================================
|
|
165
|
-
// Entity → Model Class
|
|
166
|
-
// ============================================================================
|
|
167
|
-
/**
|
|
168
|
-
* Build Model.Class<ClassName>("table_name")({ ...fields })
|
|
169
|
-
*/
|
|
170
|
-
const buildModelClass = (entity, className, ctx) => {
|
|
171
|
-
// Build fields object from row shape
|
|
172
|
-
const fieldsObj = entity.shapes.row.fields.reduce((builder, field) => builder.prop(field.name, buildFieldSchema(field, ctx)), obj());
|
|
173
|
-
// Build: Model.Class<ClassName>("table_name")
|
|
174
|
-
const modelClassRef = conjure.b.memberExpression(conjure.b.identifier("Model"), conjure.b.identifier("Class"));
|
|
175
|
-
const modelClassWithType = conjure.b.callExpression(modelClassRef, [
|
|
176
|
-
conjure.str(entity.name),
|
|
177
|
-
]);
|
|
178
|
-
// Add type parameters: Model.Class<ClassName>
|
|
179
|
-
// Use typeParameters for TypeScript (not typeArguments which is for Flow)
|
|
180
|
-
modelClassWithType.typeParameters =
|
|
181
|
-
conjure.b.tsTypeParameterInstantiation([
|
|
182
|
-
conjure.b.tsTypeReference(conjure.b.identifier(className)),
|
|
183
|
-
]);
|
|
184
|
-
// Call with fields: Model.Class<ClassName>("table_name")({ ... })
|
|
185
|
-
return conjure.b.callExpression(modelClassWithType, [fieldsObj.build()]);
|
|
186
|
-
};
|
|
187
|
-
/**
|
|
188
|
-
* Generate: export class ClassName extends Model.Class<ClassName>("table")({ ... }) {}
|
|
189
|
-
*/
|
|
190
|
-
const generateModelStatement = (entity, className, ctx) => {
|
|
191
|
-
const modelExpr = buildModelClass(entity, className, ctx);
|
|
192
|
-
const classDecl = conjure.b.classDeclaration(conjure.b.identifier(className), conjure.b.classBody([]), toExprKind(modelExpr));
|
|
193
|
-
return {
|
|
194
|
-
_tag: "SymbolStatement",
|
|
195
|
-
node: conjure.b.exportNamedDeclaration(classDecl, []),
|
|
196
|
-
symbol: {
|
|
197
|
-
name: className,
|
|
198
|
-
capability: "models:effect",
|
|
199
|
-
entity: entity.name,
|
|
200
|
-
isType: false,
|
|
201
|
-
},
|
|
202
|
-
};
|
|
203
|
-
};
|
|
204
|
-
/**
|
|
205
|
-
* Generate enum schema: export const EnumName = S.Union(S.Literal(...), ...)
|
|
206
|
-
*/
|
|
207
|
-
const generateEnumStatement = (enumEntity) => exp.const(enumEntity.name, { capability: "models:effect", entity: enumEntity.name }, buildEnumSchema({
|
|
208
|
-
name: enumEntity.name,
|
|
209
|
-
pgName: enumEntity.pgName,
|
|
210
|
-
values: enumEntity.values,
|
|
211
|
-
}));
|
|
212
|
-
/**
|
|
213
|
-
* Build the base Effect Schema type for a composite field (no Model wrappers)
|
|
214
|
-
*/
|
|
215
|
-
const buildCompositeFieldSchema = (field, ctx) => {
|
|
216
|
-
const resolved = resolveFieldType(field, ctx.enums, ctx.extensions);
|
|
217
|
-
if (resolved.enumDef) {
|
|
218
|
-
if (ctx.typeReferences === "separate") {
|
|
219
|
-
return conjure.id(resolved.enumDef.name).build();
|
|
220
|
-
}
|
|
221
|
-
else if (ctx.enumStyle === "enum") {
|
|
222
|
-
return conjure.id("S").method("Enums", [
|
|
223
|
-
conjure.id(resolved.enumDef.name).build()
|
|
224
|
-
]).build();
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
return buildEnumSchema(resolved.enumDef);
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
if (isUuidType(field))
|
|
231
|
-
return conjure.id("S").prop("UUID").build();
|
|
232
|
-
if (isDateType(field))
|
|
233
|
-
return conjure.id("S").prop("Date").build();
|
|
234
|
-
if (isBigIntType(field))
|
|
235
|
-
return conjure.id("S").prop("BigInt").build();
|
|
236
|
-
return tsTypeToEffectSchema(resolved.tsType);
|
|
237
|
-
};
|
|
238
|
-
/**
|
|
239
|
-
* Generate: export const CompositeName = S.Struct({ ... })
|
|
240
|
-
* Optionally: export type CompositeName = S.Schema.Type<typeof CompositeName>
|
|
241
|
-
*/
|
|
242
|
-
const generateCompositeStatements = (composite, ctx, exportTypes) => {
|
|
243
|
-
// Build S.Struct({ ... }) for composite fields
|
|
244
|
-
const fieldsObj = composite.fields.reduce((builder, field) => {
|
|
245
|
-
let schema = buildCompositeFieldSchema(field, ctx);
|
|
246
|
-
schema = wrapIf(schema, field.isArray, wrapArray);
|
|
247
|
-
schema = wrapIf(schema, field.nullable, wrapNullable);
|
|
248
|
-
return builder.prop(field.name, schema);
|
|
249
|
-
}, obj());
|
|
250
|
-
const structExpr = conjure.id("S").method("Struct", [fieldsObj.build()]).build();
|
|
251
|
-
const symbolCtx = { capability: "models:effect", entity: composite.name };
|
|
252
|
-
const schemaStatement = exp.const(composite.name, symbolCtx, structExpr);
|
|
253
|
-
if (!exportTypes) {
|
|
254
|
-
return [schemaStatement];
|
|
255
|
-
}
|
|
256
|
-
// Generate: export type CompositeName = S.Schema.Type<typeof CompositeName>
|
|
257
|
-
const inferType = ts.qualifiedRefWithParams(["S", "Schema", "Type"], [ts.typeof(composite.name)]);
|
|
258
|
-
const typeStatement = exp.type(composite.name, symbolCtx, inferType);
|
|
259
|
-
return [schemaStatement, typeStatement];
|
|
260
|
-
};
|
|
261
|
-
// ============================================================================
|
|
262
|
-
// Enum Helpers
|
|
263
|
-
// ============================================================================
|
|
264
|
-
/** Collect enum names used by fields */
|
|
265
|
-
const collectUsedEnums = (fields, enums) => {
|
|
266
|
-
const enumNames = fields
|
|
267
|
-
.filter(isEnumType)
|
|
268
|
-
.flatMap(field => {
|
|
269
|
-
const pgTypeName = getPgTypeName(field);
|
|
270
|
-
if (!pgTypeName)
|
|
271
|
-
return [];
|
|
272
|
-
return pipe(findEnumByPgName(enums, pgTypeName), Option.map(e => e.name), Option.toArray);
|
|
273
|
-
});
|
|
274
|
-
return new Set(enumNames);
|
|
275
|
-
};
|
|
276
|
-
/** Build import refs for used enums */
|
|
277
|
-
const buildEnumImports = (usedEnums) => Arr.fromIterable(usedEnums).map(enumName => ({
|
|
278
|
-
kind: "symbol",
|
|
279
|
-
ref: { capability: "models:effect", entity: enumName },
|
|
280
|
-
}));
|
|
281
|
-
/**
|
|
282
|
-
* Generate enum schema for native enum style.
|
|
283
|
-
* Generates: export enum EnumName { A = 'a', ... } + export const EnumNameSchema = S.Enums(EnumName)
|
|
284
|
-
*/
|
|
285
|
-
const generateNativeEnumStatements = (enumEntity) => {
|
|
286
|
-
const symbolCtx = { capability: "models:effect", entity: enumEntity.name };
|
|
287
|
-
// Generate: export enum EnumName { A = 'a', B = 'b', ... }
|
|
288
|
-
const enumDecl = conjure.b.tsEnumDeclaration(conjure.b.identifier(enumEntity.name), enumEntity.values.map(v => conjure.b.tsEnumMember(conjure.b.identifier(v.toUpperCase().replace(/[^A-Z0-9_]/g, "_")), conjure.str(v))));
|
|
289
|
-
const enumStatement = {
|
|
290
|
-
_tag: "SymbolStatement",
|
|
291
|
-
node: conjure.b.exportNamedDeclaration(enumDecl, []),
|
|
292
|
-
symbol: {
|
|
293
|
-
name: enumEntity.name,
|
|
294
|
-
capability: "models:effect",
|
|
295
|
-
entity: enumEntity.name,
|
|
296
|
-
isType: true,
|
|
297
|
-
},
|
|
298
|
-
};
|
|
299
|
-
const schemaName = `${enumEntity.name}Schema`;
|
|
300
|
-
const schemaExpr = conjure.id("S").method("Enums", [
|
|
301
|
-
conjure.id(enumEntity.name).build()
|
|
302
|
-
]).build();
|
|
303
|
-
const schemaStatement = exp.const(schemaName, symbolCtx, schemaExpr);
|
|
304
|
-
return [enumStatement, schemaStatement];
|
|
305
|
-
};
|
|
306
|
-
// ============================================================================
|
|
307
|
-
// File Emission Helpers
|
|
308
|
-
// ============================================================================
|
|
309
|
-
const buildFileNameContext = (entityName, pgName, schemaName, inflection, entity) => ({
|
|
310
|
-
entityName,
|
|
311
|
-
pgName,
|
|
312
|
-
schema: schemaName,
|
|
313
|
-
inflection,
|
|
314
|
-
entity,
|
|
315
|
-
});
|
|
316
|
-
// ============================================================================
|
|
317
|
-
// Plugin Definition
|
|
318
|
-
// ============================================================================
|
|
319
|
-
/**
|
|
320
|
-
* Effect Model Plugin
|
|
321
|
-
*
|
|
322
|
-
* Generates @effect/sql Model classes for each entity.
|
|
323
|
-
*/
|
|
324
|
-
export const effectModelPlugin = definePlugin({
|
|
325
|
-
name: "effect-model",
|
|
326
|
-
provides: ["models:effect", "models"],
|
|
327
|
-
configSchema: EffectModelPluginConfig,
|
|
328
|
-
inflection: {
|
|
329
|
-
outputFile: ctx => `${ctx.entityName}.ts`,
|
|
330
|
-
symbolName: (entityName, _artifactKind) => entityName,
|
|
331
|
-
},
|
|
332
|
-
inflectionDefaults: {
|
|
333
|
-
entityName: inflect.pascalCase,
|
|
334
|
-
enumName: inflect.pascalCase,
|
|
335
|
-
},
|
|
336
|
-
run: (ctx, config) => {
|
|
337
|
-
const enumEntities = getEnumEntities(ctx.ir);
|
|
338
|
-
const { enumStyle, typeReferences } = config;
|
|
339
|
-
// Generate separate enum files if configured
|
|
340
|
-
if (typeReferences === "separate") {
|
|
341
|
-
enumEntities
|
|
342
|
-
.filter(e => e.tags.omit !== true)
|
|
343
|
-
.forEach(enumEntity => {
|
|
344
|
-
const fileNameCtx = buildFileNameContext(enumEntity.name, enumEntity.pgName, enumEntity.schemaName, ctx.inflection, enumEntity);
|
|
345
|
-
const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
|
|
346
|
-
const statements = enumStyle === "enum"
|
|
347
|
-
? generateNativeEnumStatements(enumEntity)
|
|
348
|
-
: [generateEnumStatement(enumEntity)];
|
|
349
|
-
ctx
|
|
350
|
-
.file(filePath)
|
|
351
|
-
.import({ kind: "package", names: ["Schema as S"], from: "effect" })
|
|
352
|
-
.ast(conjure.symbolProgram(...statements))
|
|
353
|
-
.emit();
|
|
354
|
-
});
|
|
355
|
-
}
|
|
356
|
-
// Generate table/view entity model files
|
|
357
|
-
getTableEntities(ctx.ir)
|
|
358
|
-
.filter(entity => entity.tags.omit !== true)
|
|
359
|
-
.forEach(entity => {
|
|
360
|
-
const className = ctx.inflection.entityName(entity.pgClass, entity.tags);
|
|
361
|
-
const fieldCtx = {
|
|
362
|
-
entity,
|
|
363
|
-
enums: enumEntities,
|
|
364
|
-
extensions: ctx.ir.extensions,
|
|
365
|
-
enumStyle,
|
|
366
|
-
typeReferences,
|
|
367
|
-
};
|
|
368
|
-
const fileNameCtx = buildFileNameContext(className, entity.pgName, entity.schemaName, ctx.inflection, entity);
|
|
369
|
-
const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
|
|
370
|
-
// Collect enum usage for imports
|
|
371
|
-
const usedEnums = typeReferences === "separate"
|
|
372
|
-
? collectUsedEnums(entity.shapes.row.fields, enumEntities)
|
|
373
|
-
: new Set();
|
|
374
|
-
const fileBuilder = ctx
|
|
375
|
-
.file(filePath)
|
|
376
|
-
.import({ kind: "package", names: ["Model"], from: "@effect/sql" })
|
|
377
|
-
.import({ kind: "package", names: ["Schema as S"], from: "effect" });
|
|
378
|
-
buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
|
|
379
|
-
fileBuilder
|
|
380
|
-
.ast(conjure.symbolProgram(generateModelStatement(entity, className, fieldCtx)))
|
|
381
|
-
.emit();
|
|
382
|
-
});
|
|
383
|
-
// Generate composite type schema files
|
|
384
|
-
const compositeFieldCtx = {
|
|
385
|
-
enums: enumEntities,
|
|
386
|
-
extensions: ctx.ir.extensions,
|
|
387
|
-
enumStyle,
|
|
388
|
-
typeReferences,
|
|
389
|
-
};
|
|
390
|
-
getCompositeEntities(ctx.ir)
|
|
391
|
-
.filter(composite => composite.tags.omit !== true)
|
|
392
|
-
.forEach(composite => {
|
|
393
|
-
const fileNameCtx = buildFileNameContext(composite.name, composite.pgName, composite.schemaName, ctx.inflection, composite);
|
|
394
|
-
const filePath = `${config.outputDir}/${ctx.pluginInflection.outputFile(fileNameCtx)}`;
|
|
395
|
-
// Collect enum usage for imports
|
|
396
|
-
const usedEnums = typeReferences === "separate"
|
|
397
|
-
? collectUsedEnums(composite.fields, enumEntities)
|
|
398
|
-
: new Set();
|
|
399
|
-
const fileBuilder = ctx
|
|
400
|
-
.file(filePath)
|
|
401
|
-
.import({ kind: "package", names: ["Schema as S"], from: "effect" });
|
|
402
|
-
buildEnumImports(usedEnums).forEach(ref => fileBuilder.import(ref));
|
|
403
|
-
fileBuilder
|
|
404
|
-
.ast(conjure.symbolProgram(...generateCompositeStatements(composite, compositeFieldCtx, config.exportTypes)))
|
|
405
|
-
.emit();
|
|
406
|
-
});
|
|
407
|
-
},
|
|
408
|
-
});
|
|
409
|
-
//# sourceMappingURL=effect-model.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"effect-model.js","sourceRoot":"","sources":["../../src/plugins/effect-model.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Function to generate export names for CRUD/lookup methods.
|
|
3
|
-
* @param entityName - PascalCase entity name (e.g., "User", "Post")
|
|
4
|
-
* @param methodName - PascalCase method name (e.g., "FindById", "Create")
|
|
5
|
-
* @returns The export name (e.g., "UserFindById", "userCreate", "findById")
|
|
6
|
-
*/
|
|
7
|
-
export type ExportNameFn = (entityName: string, methodName: string) => string;
|
|
8
|
-
/**
|
|
9
|
-
* Function to generate export names for stored function wrappers.
|
|
10
|
-
* @param pgFunctionName - PostgreSQL function name in snake_case (e.g., "current_user", "verify_email")
|
|
11
|
-
* @returns The export name (e.g., "currentUser", "verifyEmail")
|
|
12
|
-
*/
|
|
13
|
-
export type FunctionExportNameFn = (pgFunctionName: string) => string;
|
|
14
|
-
/**
|
|
15
|
-
* User-facing config input with properly typed function options.
|
|
16
|
-
*/
|
|
17
|
-
export interface KyselyQueriesConfigInput {
|
|
18
|
-
readonly outputDir?: string;
|
|
19
|
-
readonly dbTypesPath?: string;
|
|
20
|
-
readonly executeQueries?: boolean;
|
|
21
|
-
readonly generateListMany?: boolean;
|
|
22
|
-
readonly generateFunctions?: boolean;
|
|
23
|
-
readonly functionsFile?: string;
|
|
24
|
-
/**
|
|
25
|
-
* Custom export name function for CRUD/lookup methods.
|
|
26
|
-
* @default (entityName, methodName) => entityName + methodName
|
|
27
|
-
* @example
|
|
28
|
-
* // Unprefixed: "FindById", "Create"
|
|
29
|
-
* exportName: (_entity, method) => method
|
|
30
|
-
*
|
|
31
|
-
* // camelCase prefix: "userFindById", "userCreate"
|
|
32
|
-
* exportName: (entity, method) => entity.toLowerCase() + method
|
|
33
|
-
*/
|
|
34
|
-
readonly exportName?: ExportNameFn;
|
|
35
|
-
/**
|
|
36
|
-
* Custom export name function for stored function wrappers.
|
|
37
|
-
* @default (pgFunctionName) => camelCase(pgFunctionName)
|
|
38
|
-
* @example
|
|
39
|
-
* // PascalCase: "CurrentUser", "VerifyEmail"
|
|
40
|
-
* functionExportName: (fn) => pascalCase(fn)
|
|
41
|
-
*
|
|
42
|
-
* // Prefixed: "fnCurrentUser", "fnVerifyEmail"
|
|
43
|
-
* functionExportName: (fn) => "fn" + pascalCase(fn)
|
|
44
|
-
*/
|
|
45
|
-
readonly functionExportName?: FunctionExportNameFn;
|
|
46
|
-
}
|
|
47
|
-
export declare const kyselyQueriesPlugin: import("../index.js").PluginFactory<{
|
|
48
|
-
readonly outputDir: string;
|
|
49
|
-
readonly generateFunctions: boolean;
|
|
50
|
-
readonly functionsFile: string;
|
|
51
|
-
readonly dbTypesPath: string;
|
|
52
|
-
readonly executeQueries: boolean;
|
|
53
|
-
readonly generateListMany: boolean;
|
|
54
|
-
readonly exportName?: any;
|
|
55
|
-
readonly functionExportName?: any;
|
|
56
|
-
}, {
|
|
57
|
-
readonly outputDir?: string | undefined;
|
|
58
|
-
readonly generateFunctions?: boolean | undefined;
|
|
59
|
-
readonly functionsFile?: string | undefined;
|
|
60
|
-
readonly dbTypesPath?: string | undefined;
|
|
61
|
-
readonly executeQueries?: boolean | undefined;
|
|
62
|
-
readonly generateListMany?: boolean | undefined;
|
|
63
|
-
readonly exportName?: any;
|
|
64
|
-
readonly functionExportName?: any;
|
|
65
|
-
}>;
|
|
66
|
-
//# sourceMappingURL=kysely-queries.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kysely-queries.d.ts","sourceRoot":"","sources":["../../src/plugins/kysely-queries.ts"],"names":[],"mappings":"AAwBA;;;;;GAKG;AACH,MAAM,MAAM,YAAY,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,KAAK,MAAM,CAAA;AAE7E;;;;GAIG;AACH,MAAM,MAAM,oBAAoB,GAAG,CAAC,cAAc,EAAE,MAAM,KAAK,MAAM,CAAA;AAqDrE;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;IAC3B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,cAAc,CAAC,EAAE,OAAO,CAAA;IACjC,QAAQ,CAAC,gBAAgB,CAAC,EAAE,OAAO,CAAA;IACnC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,OAAO,CAAA;IACpC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAA;IAC/B;;;;;;;;;OASG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,YAAY,CAAA;IAClC;;;;;;;;;OASG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,oBAAoB,CAAA;CACnD;AAqhCD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;EA8K9B,CAAA"}
|