ddd-ts-kit 0.12.0 → 0.14.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/README.md +19 -4
- package/dist/check/catalogue/architecture-rules.d.ts.map +1 -1
- package/dist/check/catalogue/architecture-rules.js +6 -0
- package/dist/check/catalogue/architecture-rules.js.map +1 -1
- package/dist/check/errors/kit-error-codes.d.ts.map +1 -1
- package/dist/check/errors/kit-error-codes.js +1 -0
- package/dist/check/errors/kit-error-codes.js.map +1 -1
- package/dist/check/explain/authz-docs.d.ts.map +1 -1
- package/dist/check/explain/authz-docs.js +12 -0
- package/dist/check/explain/authz-docs.js.map +1 -1
- package/dist/check/explain/errors-docs.js +1 -1
- package/dist/check/explain/errors-docs.js.map +1 -1
- package/dist/check/explain/rule-docs.d.ts.map +1 -1
- package/dist/check/explain/rule-docs.js +2 -0
- package/dist/check/explain/rule-docs.js.map +1 -1
- package/dist/check/explain/schema-docs.d.ts +3 -0
- package/dist/check/explain/schema-docs.d.ts.map +1 -0
- package/dist/check/explain/schema-docs.js +28 -0
- package/dist/check/explain/schema-docs.js.map +1 -0
- package/dist/check/fixtures/authz-fixtures.d.ts.map +1 -1
- package/dist/check/fixtures/authz-fixtures.js +38 -1
- package/dist/check/fixtures/authz-fixtures.js.map +1 -1
- package/dist/check/fixtures/fixtures.d.ts.map +1 -1
- package/dist/check/fixtures/fixtures.js +2 -0
- package/dist/check/fixtures/fixtures.js.map +1 -1
- package/dist/check/fixtures/schema-fixtures.d.ts +3 -0
- package/dist/check/fixtures/schema-fixtures.d.ts.map +1 -0
- package/dist/check/fixtures/schema-fixtures.js +129 -0
- package/dist/check/fixtures/schema-fixtures.js.map +1 -0
- package/dist/check/rules/authz-fields-by-schema.d.ts +3 -0
- package/dist/check/rules/authz-fields-by-schema.d.ts.map +1 -0
- package/dist/check/rules/authz-fields-by-schema.js +33 -0
- package/dist/check/rules/authz-fields-by-schema.js.map +1 -0
- package/dist/check/rules/schema-no-duplicate-shape.d.ts +3 -0
- package/dist/check/rules/schema-no-duplicate-shape.d.ts.map +1 -0
- package/dist/check/rules/schema-no-duplicate-shape.js +60 -0
- package/dist/check/rules/schema-no-duplicate-shape.js.map +1 -0
- package/dist/check/rules/schema-presentation-only.d.ts +3 -0
- package/dist/check/rules/schema-presentation-only.d.ts.map +1 -0
- package/dist/check/rules/schema-presentation-only.js +53 -0
- package/dist/check/rules/schema-presentation-only.js.map +1 -0
- package/dist/check/schemas/class-shapes.d.ts +9 -0
- package/dist/check/schemas/class-shapes.d.ts.map +1 -0
- package/dist/check/schemas/class-shapes.js +52 -0
- package/dist/check/schemas/class-shapes.js.map +1 -0
- package/dist/check/schemas/declared-shape.d.ts +9 -0
- package/dist/check/schemas/declared-shape.d.ts.map +1 -0
- package/dist/check/schemas/declared-shape.js +2 -0
- package/dist/check/schemas/declared-shape.js.map +1 -0
- package/dist/check/schemas/holds-schemas.d.ts +5 -0
- package/dist/check/schemas/holds-schemas.d.ts.map +1 -0
- package/dist/check/schemas/holds-schemas.js +12 -0
- package/dist/check/schemas/holds-schemas.js.map +1 -0
- package/dist/check/schemas/object-shapes.d.ts +8 -0
- package/dist/check/schemas/object-shapes.d.ts.map +1 -0
- package/dist/check/schemas/object-shapes.js +31 -0
- package/dist/check/schemas/object-shapes.js.map +1 -0
- package/dist/check/schemas/restored-code.d.ts +7 -0
- package/dist/check/schemas/restored-code.d.ts.map +1 -0
- package/dist/check/schemas/restored-code.js +17 -0
- package/dist/check/schemas/restored-code.js.map +1 -0
- package/dist/check/schemas/shared-presentation.d.ts +4 -0
- package/dist/check/schemas/shared-presentation.d.ts.map +1 -0
- package/dist/check/schemas/shared-presentation.js +5 -0
- package/dist/check/schemas/shared-presentation.js.map +1 -0
- package/dist/check/schemas/shares-schemas.d.ts +4 -0
- package/dist/check/schemas/shares-schemas.d.ts.map +1 -0
- package/dist/check/schemas/shares-schemas.js +5 -0
- package/dist/check/schemas/shares-schemas.js.map +1 -0
- package/dist/check/schemas/still-generated.d.ts +8 -0
- package/dist/check/schemas/still-generated.d.ts.map +1 -0
- package/dist/check/schemas/still-generated.js +11 -0
- package/dist/check/schemas/still-generated.js.map +1 -0
- package/dist/check/schemas/top-level-statements.d.ts +3 -0
- package/dist/check/schemas/top-level-statements.d.ts.map +1 -0
- package/dist/check/schemas/top-level-statements.js +21 -0
- package/dist/check/schemas/top-level-statements.js.map +1 -0
- package/dist/check/schemas/validation-packages.d.ts +3 -0
- package/dist/check/schemas/validation-packages.d.ts.map +1 -0
- package/dist/check/schemas/validation-packages.js +13 -0
- package/dist/check/schemas/validation-packages.js.map +1 -0
- package/dist/commands/init.d.ts.map +1 -1
- package/dist/commands/init.js +3 -0
- package/dist/commands/init.js.map +1 -1
- package/dist/config/default-allowed-packages.d.ts.map +1 -1
- package/dist/config/default-allowed-packages.js +1 -0
- package/dist/config/default-allowed-packages.js.map +1 -1
- package/dist/config/index.d.ts +1 -1
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/parse-stack.d.ts.map +1 -1
- package/dist/config/parse-stack.js +4 -1
- package/dist/config/parse-stack.js.map +1 -1
- package/dist/config/stack.d.ts +25 -2
- package/dist/config/stack.d.ts.map +1 -1
- package/dist/config/stack.js +5 -2
- package/dist/config/stack.js.map +1 -1
- package/dist/describe/context-description.d.ts +6 -0
- package/dist/describe/context-description.d.ts.map +1 -1
- package/dist/describe/format-description.js +9 -1
- package/dist/describe/format-description.js.map +1 -1
- package/dist/describe/presentation-of-route.d.ts +4 -0
- package/dist/describe/presentation-of-route.d.ts.map +1 -0
- package/dist/describe/presentation-of-route.js +15 -0
- package/dist/describe/presentation-of-route.js.map +1 -0
- package/dist/describe/read-controllers.d.ts.map +1 -1
- package/dist/describe/read-controllers.js +4 -1
- package/dist/describe/read-controllers.js.map +1 -1
- package/dist/describe/read-routes.d.ts.map +1 -1
- package/dist/describe/read-routes.js +2 -0
- package/dist/describe/read-routes.js.map +1 -1
- package/dist/generate/kinds/form-kind.d.ts +3 -0
- package/dist/generate/kinds/form-kind.d.ts.map +1 -0
- package/dist/generate/kinds/form-kind.js +38 -0
- package/dist/generate/kinds/form-kind.js.map +1 -0
- package/dist/generate/kinds/presentation/controller-of.d.ts +10 -0
- package/dist/generate/kinds/presentation/controller-of.d.ts.map +1 -0
- package/dist/generate/kinds/presentation/controller-of.js +13 -0
- package/dist/generate/kinds/presentation/controller-of.js.map +1 -0
- package/dist/generate/kinds/presentation/controller-source.d.ts +13 -0
- package/dist/generate/kinds/presentation/controller-source.d.ts.map +1 -0
- package/dist/generate/kinds/presentation/controller-source.js +44 -0
- package/dist/generate/kinds/presentation/controller-source.js.map +1 -0
- package/dist/generate/kinds/representation-kind.d.ts +3 -0
- package/dist/generate/kinds/representation-kind.d.ts.map +1 -0
- package/dist/generate/kinds/representation-kind.js +54 -0
- package/dist/generate/kinds/representation-kind.js.map +1 -0
- package/dist/generate/kinds/route/controller-imports.d.ts.map +1 -1
- package/dist/generate/kinds/route/controller-imports.js +2 -1
- package/dist/generate/kinds/route/controller-imports.js.map +1 -1
- package/dist/generate/kinds/route/controller-types.d.ts.map +1 -1
- package/dist/generate/kinds/route/controller-types.js +4 -2
- package/dist/generate/kinds/route/controller-types.js.map +1 -1
- package/dist/generate/kinds/route/controller-vars.d.ts.map +1 -1
- package/dist/generate/kinds/route/controller-vars.js +21 -9
- package/dist/generate/kinds/route/controller-vars.js.map +1 -1
- package/dist/generate/kinds/route/dto-classes.d.ts +5 -2
- package/dist/generate/kinds/route/dto-classes.d.ts.map +1 -1
- package/dist/generate/kinds/route/dto-classes.js +6 -3
- package/dist/generate/kinds/route/dto-classes.js.map +1 -1
- package/dist/generate/kinds/route/route-vars.d.ts.map +1 -1
- package/dist/generate/kinds/route/route-vars.js +17 -4
- package/dist/generate/kinds/route/route-vars.js.map +1 -1
- package/dist/generate/kinds/route/search-line-libraries.d.ts +3 -0
- package/dist/generate/kinds/route/search-line-libraries.d.ts.map +1 -0
- package/dist/generate/kinds/route/search-line-libraries.js +3 -0
- package/dist/generate/kinds/route/search-line-libraries.js.map +1 -0
- package/dist/generate/kinds/route/shares-schemas.d.ts +4 -0
- package/dist/generate/kinds/route/shares-schemas.d.ts.map +1 -0
- package/dist/generate/kinds/route/shares-schemas.js +5 -0
- package/dist/generate/kinds/route/shares-schemas.js.map +1 -0
- package/dist/generate/kinds/route/write-controller.d.ts.map +1 -1
- package/dist/generate/kinds/route/write-controller.js +4 -2
- package/dist/generate/kinds/route/write-controller.js.map +1 -1
- package/dist/generate/kinds/route-kind.d.ts.map +1 -1
- package/dist/generate/kinds/route-kind.js +4 -2
- package/dist/generate/kinds/route-kind.js.map +1 -1
- package/dist/generate/kinds/schema-kind.d.ts +3 -0
- package/dist/generate/kinds/schema-kind.d.ts.map +1 -0
- package/dist/generate/kinds/schema-kind.js +36 -0
- package/dist/generate/kinds/schema-kind.js.map +1 -0
- package/dist/generate/kinds.d.ts.map +1 -1
- package/dist/generate/kinds.js +6 -0
- package/dist/generate/kinds.js.map +1 -1
- package/dist/generate/shared-writes.d.ts.map +1 -1
- package/dist/generate/shared-writes.js +5 -0
- package/dist/generate/shared-writes.js.map +1 -1
- package/dist/help/usage.d.ts +1 -1
- package/dist/help/usage.d.ts.map +1 -1
- package/dist/help/usage.js +5 -2
- package/dist/help/usage.js.map +1 -1
- package/dist/init/files/platform-files.js +3 -1
- package/dist/init/files/platform-files.js.map +1 -1
- package/dist/init/manifest/dependencies-for.d.ts.map +1 -1
- package/dist/init/manifest/dependencies-for.js +2 -0
- package/dist/init/manifest/dependencies-for.js.map +1 -1
- package/dist/init/manifest/versions.d.ts.map +1 -1
- package/dist/init/manifest/versions.js +27 -24
- package/dist/init/manifest/versions.js.map +1 -1
- package/dist/init/stack/resolve-stack.d.ts.map +1 -1
- package/dist/init/stack/resolve-stack.js +18 -2
- package/dist/init/stack/resolve-stack.js.map +1 -1
- package/dist/init/stack/stack-options.d.ts +3 -0
- package/dist/init/stack/stack-options.d.ts.map +1 -1
- package/dist/init/validation-dependencies.d.ts.map +1 -1
- package/dist/init/validation-dependencies.js +1 -0
- package/dist/init/validation-dependencies.js.map +1 -1
- package/dist/stack/stack-vars.js +25 -7
- package/dist/stack/stack-vars.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +2 -2
- package/templates/controller/controller.class-validator.ts.tpl +2 -2
- package/templates/controller/controller.none.ts.tpl +2 -2
- package/templates/controller/controller.search.ts.tpl +14 -0
- package/templates/controller/controller.standard-schema.ts.tpl +2 -2
- package/templates/controller/controller.typebox.ts.tpl +98 -0
- package/templates/controller/controller.zod.ts.tpl +2 -2
- package/templates/docs/openapi.json.tpl +15 -0
- package/templates/init/CLAUDE.md.tpl +2 -2
- package/templates/init/platform/auth/http-boundary.ts.tpl +20 -3
- package/templates/init/platform/compose-application.manual.ts.tpl +18 -0
- package/templates/init/platform/compose-application.tsyringe.ts.tpl +23 -0
- package/templates/init/platform/http/presentation-of.ts.tpl +27 -0
- package/templates/init/platform/http/start-http-server.express.ts.tpl +1 -1
- package/templates/init/platform/http/start-http-server.fastify.ts.tpl +1 -1
- package/templates/init/platform/http/start-http-server.hono.ts.tpl +84 -0
- package/templates/init/platform/http/start-http-server.nest.ts.tpl +2 -2
- package/templates/init/platform/http/with-documentation.ts.tpl +13 -3
- package/templates/init/platform/http/with-forms.ts.tpl +7 -0
- package/templates/init/rules/application.md.tpl +1 -1
- package/templates/init/rules/presentation.md.tpl +4 -1
- package/templates/init/scripts/openapi.ts.tpl +27 -6
- package/templates/pipeline/biome.json.tpl +1 -0
- package/templates/pipeline/package-scripts.json +1 -1
- package/templates/route/route.class-validator.ts.tpl +3 -3
- package/templates/route/route.none.ts.tpl +3 -3
- package/templates/route/route.search.ts.tpl +14 -0
- package/templates/route/route.standard-schema.ts.tpl +3 -3
- package/templates/route/route.typebox.ts.tpl +79 -0
- package/templates/route/route.zod.ts.tpl +3 -3
- package/templates/schema/schema.class-validator.ts.tpl +3 -0
- package/templates/schema/schema.custom.ts.tpl +14 -0
- package/templates/schema/schema.typebox.ts.tpl +8 -0
- package/templates/schema/schema.zod.ts.tpl +7 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authz-fields-by-schema.d.ts","sourceRoot":"","sources":["../../../src/check/rules/authz-fields-by-schema.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAkB7C,eAAO,MAAM,mBAAmB,EAAE,IAQjC,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { inLayer } from '../support/in-layer.js';
|
|
2
|
+
import { perFile } from '../support/per-file.js';
|
|
3
|
+
/** What tells one caller from another by hand: a test on the roles, a comparison with a role, an `isAdmin`. */
|
|
4
|
+
const ROLE_TESTS = [
|
|
5
|
+
{
|
|
6
|
+
pattern: /(?<![\w$])roles\s*\.\s*(?:includes|some|every|find|indexOf)\s*\(/,
|
|
7
|
+
what: 'A test on the roles of the actor',
|
|
8
|
+
},
|
|
9
|
+
{ pattern: /(?<![\w$])role\s*[!=]==?|[!=]==?\s*(?:[\w$]+\s*\.\s*)*role(?![\w$(])/, what: 'A comparison on a role' },
|
|
10
|
+
{ pattern: /(?<![\w$])isAdmin(?![\w$])/, what: 'isAdmin' },
|
|
11
|
+
];
|
|
12
|
+
const FIX = 'Answer every field the read model holds and mark the one reserved to some callers on the response schema: withFieldAccess(schema, { internalNote: { read: { permission } } }) of @ddd-ts-kit/http. The pipeline leaves it out for an actor who may not read it, in JSON, XML and CSV alike, the contract says so, and a form described by the server shows it read-only or not at all. Which rows the actor may read at all stays the access scope of the query.';
|
|
13
|
+
export const authzFieldsBySchema = {
|
|
14
|
+
id: 'authz/fields-by-schema',
|
|
15
|
+
description: 'A query never shapes its answer by the roles of the actor: a field reserved to some callers is marked on the response schema (withFieldAccess of @ddd-ts-kit/http), not removed by hand under application/queries/.',
|
|
16
|
+
scope: 'file',
|
|
17
|
+
run(project) {
|
|
18
|
+
return perFile(project, this.id, roleShapedAnswer);
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
function roleShapedAnswer(file) {
|
|
22
|
+
const location = inLayer(file, 'application');
|
|
23
|
+
if (location?.inside[0] !== 'queries') {
|
|
24
|
+
return [];
|
|
25
|
+
}
|
|
26
|
+
return ROLE_TESTS.flatMap(({ pattern, what }) => {
|
|
27
|
+
const match = pattern.exec(file.scan.code);
|
|
28
|
+
return match === null
|
|
29
|
+
? []
|
|
30
|
+
: [{ line: file.scan.lineAt(match.index), message: `${what} shapes the answer of a query.`, fix: FIX }];
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=authz-fields-by-schema.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authz-fields-by-schema.js","sourceRoot":"","sources":["../../../src/check/rules/authz-fields-by-schema.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,+GAA+G;AAC/G,MAAM,UAAU,GAAmE;IACjF;QACE,OAAO,EAAE,kEAAkE;QAC3E,IAAI,EAAE,kCAAkC;KACzC;IACD,EAAE,OAAO,EAAE,sEAAsE,EAAE,IAAI,EAAE,wBAAwB,EAAE;IACnH,EAAE,OAAO,EAAE,4BAA4B,EAAE,IAAI,EAAE,SAAS,EAAE;CAC3D,CAAC;AAEF,MAAM,GAAG,GACP,kcAAkc,CAAC;AAErc,MAAM,CAAC,MAAM,mBAAmB,GAAS;IACvC,EAAE,EAAE,wBAAwB;IAC5B,WAAW,EACT,qNAAqN;IACvN,KAAK,EAAE,MAAM;IACb,GAAG,CAAC,OAAO;QACT,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,gBAAgB,CAAC,CAAC;IACrD,CAAC;CACF,CAAC;AAEF,SAAS,gBAAgB,CAAC,IAAgB;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE9C,IAAI,QAAQ,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;QAC9C,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAE3C,OAAO,KAAK,KAAK,IAAI;YACnB,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,GAAG,IAAI,gCAAgC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5G,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-no-duplicate-shape.d.ts","sourceRoot":"","sources":["../../../src/check/rules/schema-no-duplicate-shape.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AA4B7C,eAAO,MAAM,sBAAsB,EAAE,IA2BpC,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import { classShapes } from '../schemas/class-shapes.js';
|
|
2
|
+
import { holdsSchemas } from '../schemas/holds-schemas.js';
|
|
3
|
+
import { objectShapes } from '../schemas/object-shapes.js';
|
|
4
|
+
import { restoredCode } from '../schemas/restored-code.js';
|
|
5
|
+
import { sharesSchemas } from '../schemas/shares-schemas.js';
|
|
6
|
+
import { reporter } from '../support/reporter.js';
|
|
7
|
+
/** What a route reads from its path, its query string or its headers is documented per operation, never as a component. */
|
|
8
|
+
const PARAMETER_FILE = /\.(?:params|query|headers)\.ts$/;
|
|
9
|
+
/** Where a context keeps the shapes its routes share: the declaration there is the original, a copy elsewhere is reported. */
|
|
10
|
+
const SHARED_OF_A_CONTEXT = '/presentation/http/shared/';
|
|
11
|
+
/** The home of the shapes of the shared kernel: every context compares its shapes with them. */
|
|
12
|
+
const KERNEL = '';
|
|
13
|
+
const FIX = 'Declare the shape once, under presentation/http/shared/ of its context (`ddd-ts-kit generate schema <context> <Name>`) or under presentation/ of the shared kernel when several contexts use it (`generate schema shared-kernel <Name>`), share it (`.meta({ id })` with zod, `classSchema(Dto, { shared: true })` with class-validator, `sharedSchema(name, schema)` otherwise) and use it in both places, whole or in part. An identifier answer is `acceptedSchema` of @ddd-ts-kit/http.';
|
|
14
|
+
export const schemaNoDuplicateShape = {
|
|
15
|
+
id: 'schema/no-duplicate-shape',
|
|
16
|
+
description: 'Under "stack.schemas": "shared", one shape of the HTTP contract is declared once in its context: no two DTO classes, and no two object schemas (zod, valibot, TypeBox), of the presentation layer of one context, or of a context and presentation/ of the shared kernel, declare the same properties with the same constraints. Two contexts may declare the same shape; request parameters and shapes the generator left to fill are not judged.',
|
|
17
|
+
scope: 'project',
|
|
18
|
+
run(project) {
|
|
19
|
+
if (!sharesSchemas(project)) {
|
|
20
|
+
return [];
|
|
21
|
+
}
|
|
22
|
+
const report = reporter(project, this.id);
|
|
23
|
+
const first = new Map();
|
|
24
|
+
return shapesOf(project).flatMap((shape) => {
|
|
25
|
+
const earlier = first.get(`${KERNEL}|${shape.key}`) ?? first.get(`${shape.home}|${shape.key}`);
|
|
26
|
+
if (earlier === undefined) {
|
|
27
|
+
first.set(`${shape.home}|${shape.key}`, shape);
|
|
28
|
+
return [];
|
|
29
|
+
}
|
|
30
|
+
const message = `${shape.what} declares the shape ${earlier.what.charAt(0).toLowerCase()}${earlier.what.slice(1)} already declares (${earlier.file}:${String(earlier.line)}).`;
|
|
31
|
+
return [report({ file: shape.file, line: shape.line }, message, FIX)];
|
|
32
|
+
});
|
|
33
|
+
},
|
|
34
|
+
};
|
|
35
|
+
function shapesOf(project) {
|
|
36
|
+
return project.files
|
|
37
|
+
.filter((file) => holdsSchemas(project, file) && !PARAMETER_FILE.test(file.path))
|
|
38
|
+
.map((file) => ({ file, home: file.location.area === 'context' ? file.location.context : KERNEL }))
|
|
39
|
+
.sort((a, b) => rank(a.file.path, a.home) - rank(b.file.path, b.home) || compare(a.file.path, b.file.path))
|
|
40
|
+
.flatMap(({ file, home }) => {
|
|
41
|
+
const code = restoredCode(file);
|
|
42
|
+
return [...classShapes(file, code), ...objectShapes(file, code)]
|
|
43
|
+
.sort((a, b) => a.line - b.line)
|
|
44
|
+
.map((shape) => ({ ...shape, file: file.path, home }));
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
/** The shared kernel first, then the shared shapes of each context, then the routes: a copy is reported, never its original. */
|
|
48
|
+
function rank(path, home) {
|
|
49
|
+
if (home === KERNEL) {
|
|
50
|
+
return 0;
|
|
51
|
+
}
|
|
52
|
+
return path.includes(SHARED_OF_A_CONTEXT) ? 1 : 2;
|
|
53
|
+
}
|
|
54
|
+
function compare(a, b) {
|
|
55
|
+
if (a === b) {
|
|
56
|
+
return 0;
|
|
57
|
+
}
|
|
58
|
+
return a < b ? -1 : 1;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=schema-no-duplicate-shape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-no-duplicate-shape.js","sourceRoot":"","sources":["../../../src/check/rules/schema-no-duplicate-shape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-presentation-only.d.ts","sourceRoot":"","sources":["../../../src/check/rules/schema-presentation-only.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAW7C,eAAO,MAAM,sBAAsB,EAAE,IAgBpC,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { holdsSchemas } from '../schemas/holds-schemas.js';
|
|
2
|
+
import { sharedPresentation } from '../schemas/shared-presentation.js';
|
|
3
|
+
import { sharesSchemas } from '../schemas/shares-schemas.js';
|
|
4
|
+
import { VALIDATION_PACKAGES } from '../schemas/validation-packages.js';
|
|
5
|
+
import { perFile } from '../support/per-file.js';
|
|
6
|
+
/** Where a context reads a type of the contract: its presentation layer; the module file and the specs wire and drive it. */
|
|
7
|
+
const READERS_OUTSIDE = ['domain', 'application', 'infrastructure', 'published-language'];
|
|
8
|
+
export const schemaPresentationOnly = {
|
|
9
|
+
id: 'schema/presentation-only',
|
|
10
|
+
description: 'Under "stack.schemas": "shared", a schema of the HTTP contract lives in presentation/: of its context, or of the shared kernel when several contexts answer with it. The shared kernel declares no schema anywhere else, and no domain, application, infrastructure or published language imports one of its presentation/.',
|
|
11
|
+
scope: 'file',
|
|
12
|
+
run(project) {
|
|
13
|
+
if (!sharesSchemas(project)) {
|
|
14
|
+
return [];
|
|
15
|
+
}
|
|
16
|
+
return perFile(project, this.id, (file) => file.isTest || holdsSchemas(project, file)
|
|
17
|
+
? []
|
|
18
|
+
: [...declaredInSharedKernel(file), ...readOutsidePresentation(project, file)]);
|
|
19
|
+
},
|
|
20
|
+
};
|
|
21
|
+
function declaredInSharedKernel(file) {
|
|
22
|
+
if (file.location.area !== 'shared-kernel') {
|
|
23
|
+
return [];
|
|
24
|
+
}
|
|
25
|
+
return file.imports
|
|
26
|
+
.filter(({ target }) => target.kind === 'package' && VALIDATION_PACKAGES.includes(target.name))
|
|
27
|
+
.map(({ line, specifier }) => ({
|
|
28
|
+
line,
|
|
29
|
+
message: `The shared kernel declares a schema outside presentation/ (it imports "${specifier}"): every layer of every context may import the shared kernel, a schema there reaches the domain.`,
|
|
30
|
+
fix: 'Move the file under presentation/ of the shared kernel (`ddd-ts-kit generate schema shared-kernel <Name>` writes one there), or keep the value object it describes in the shared kernel as plain TypeScript and its schema in presentation/.',
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
function readOutsidePresentation(project, file) {
|
|
34
|
+
const { location } = file;
|
|
35
|
+
const reader = location.area === 'shared-kernel' || (location.area === 'context' && READERS_OUTSIDE.includes(location.layer));
|
|
36
|
+
if (!reader) {
|
|
37
|
+
return [];
|
|
38
|
+
}
|
|
39
|
+
const directory = sharedPresentation(project.config);
|
|
40
|
+
return file.imports
|
|
41
|
+
.filter(({ target }) => target.kind === 'file' && target.path.startsWith(directory))
|
|
42
|
+
.map(({ line, specifier }) => ({
|
|
43
|
+
line,
|
|
44
|
+
message: `${describe(file)} imports "${specifier}", a schema of the HTTP contract: a schema is a presentation type, the model and the use cases never read one.`,
|
|
45
|
+
fix: 'Import it from presentation/ only, and map it there to the command, the query or the value object the inner layer expects.',
|
|
46
|
+
}));
|
|
47
|
+
}
|
|
48
|
+
function describe({ location }) {
|
|
49
|
+
return location.area === 'context'
|
|
50
|
+
? `${location.layer}/ of ${location.context}`
|
|
51
|
+
: 'The shared kernel outside presentation/';
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=schema-presentation-only.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-presentation-only.js","sourceRoot":"","sources":["../../../src/check/rules/schema-presentation-only.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mCAAmC,CAAC;AACvE,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAEjD,6HAA6H;AAC7H,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,aAAa,EAAE,gBAAgB,EAAE,oBAAoB,CAAC,CAAC;AAE1F,MAAM,CAAC,MAAM,sBAAsB,GAAS;IAC1C,EAAE,EAAE,0BAA0B;IAC9B,WAAW,EACT,6TAA6T;IAC/T,KAAK,EAAE,MAAM;IACb,GAAG,CAAC,OAAO;QACT,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,OAAO,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,CAAC,IAAI,EAAE,EAAE,CACxC,IAAI,CAAC,MAAM,IAAI,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC;YACxC,CAAC,CAAC,EAAE;YACJ,CAAC,CAAC,CAAC,GAAG,sBAAsB,CAAC,IAAI,CAAC,EAAE,GAAG,uBAAuB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CACjF,CAAC;IACJ,CAAC;CACF,CAAC;AAEF,SAAS,sBAAsB,CAAC,IAAgB;IAC9C,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,eAAe,EAAE,CAAC;QAC3C,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,IAAI,CAAC,OAAO;SAChB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,mBAAmB,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC9F,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI;QACJ,OAAO,EAAE,0EAA0E,SAAS,mGAAmG;QAC/L,GAAG,EAAE,8OAA8O;KACpP,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAgB,EAAE,IAAgB;IACjE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE1B,MAAM,MAAM,GACV,QAAQ,CAAC,IAAI,KAAK,eAAe,IAAI,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS,IAAI,eAAe,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAEjH,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErD,OAAO,IAAI,CAAC,OAAO;SAChB,MAAM,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;SACnF,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC;QAC7B,IAAI;QACJ,OAAO,EAAE,GAAG,QAAQ,CAAC,IAAI,CAAC,aAAa,SAAS,gHAAgH;QAChK,GAAG,EAAE,4HAA4H;KAClI,CAAC,CAAC,CAAC;AACR,CAAC;AAED,SAAS,QAAQ,CAAC,EAAE,QAAQ,EAAc;IACxC,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS;QAChC,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,QAAQ,QAAQ,CAAC,OAAO,EAAE;QAC7C,CAAC,CAAC,yCAAyC,CAAC;AAChD,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SourceFile } from '../model/source-file.js';
|
|
2
|
+
import type { DeclaredShape } from './declared-shape.js';
|
|
3
|
+
/**
|
|
4
|
+
* The DTO classes of a source: a class of the module that extends nothing, has no method and
|
|
5
|
+
* gives a decorator to each of its properties. Its shape is its properties, by name, each with
|
|
6
|
+
* its decorators and whether it is optional. A class the generator left to fill is not one yet.
|
|
7
|
+
*/
|
|
8
|
+
export declare function classShapes(file: SourceFile, code: string): DeclaredShape[];
|
|
9
|
+
//# sourceMappingURL=class-shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-shapes.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/class-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAOzD;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAQ3E"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { matchingBracket } from '../text/matching-bracket.js';
|
|
2
|
+
import { stillGenerated } from './still-generated.js';
|
|
3
|
+
import { topLevelStatements } from './top-level-statements.js';
|
|
4
|
+
const DECORATOR_NAME = /@[A-Za-z_$][\w$]*\s*/y;
|
|
5
|
+
const PROPERTY = /^(?:(?:readonly|public|declare)\s+)*([A-Za-z_$][\w$]*)\s*([?!])?/;
|
|
6
|
+
/**
|
|
7
|
+
* The DTO classes of a source: a class of the module that extends nothing, has no method and
|
|
8
|
+
* gives a decorator to each of its properties. Its shape is its properties, by name, each with
|
|
9
|
+
* its decorators and whether it is optional. A class the generator left to fill is not one yet.
|
|
10
|
+
*/
|
|
11
|
+
export function classShapes(file, code) {
|
|
12
|
+
return file.structure.classes.flatMap((shape) => {
|
|
13
|
+
const members = dtoMembers(shape, code);
|
|
14
|
+
return members === undefined || stillGenerated(file, shape.bodyStart, shape.end)
|
|
15
|
+
? []
|
|
16
|
+
: [{ key: `class{${members.join(';')}}`, line: shape.line, what: `The class ${shape.name}` }];
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
function dtoMembers(shape, code) {
|
|
20
|
+
if (shape.depth !== 0 || shape.superclass !== undefined || shape.methods.length > 0) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
const members = topLevelStatements(code.slice(shape.bodyStart + 1, shape.end), ';').map(member);
|
|
24
|
+
const decorated = members.flatMap((one) => (one === undefined ? [] : [one]));
|
|
25
|
+
return decorated.length === 0 || decorated.length < members.length ? undefined : decorated.sort();
|
|
26
|
+
}
|
|
27
|
+
/** `name?:@IsString()@MaxLength(500)` for a decorated property; nothing for anything else. */
|
|
28
|
+
function member(statement) {
|
|
29
|
+
const { decorators, rest } = decoratorsOf(statement.trim());
|
|
30
|
+
const property = PROPERTY.exec(rest);
|
|
31
|
+
if (decorators.length === 0 || property === null) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return `${property[1] ?? ''}${property[2] === '?' ? '?' : ''}:${decorators.join('')}`;
|
|
35
|
+
}
|
|
36
|
+
/** The decorators that open a statement, their arguments included, and what follows them. */
|
|
37
|
+
function decoratorsOf(statement) {
|
|
38
|
+
const decorators = [];
|
|
39
|
+
let at = 0;
|
|
40
|
+
for (;;) {
|
|
41
|
+
DECORATOR_NAME.lastIndex = at;
|
|
42
|
+
const name = DECORATOR_NAME.exec(statement);
|
|
43
|
+
if (name === null) {
|
|
44
|
+
return { decorators, rest: statement.slice(at).trim() };
|
|
45
|
+
}
|
|
46
|
+
const open = at + name[0].length;
|
|
47
|
+
const end = statement.charAt(open) === '(' ? matchingBracket(statement, open) + 1 : open;
|
|
48
|
+
decorators.push(statement.slice(at, end).replace(/\s+/g, ''));
|
|
49
|
+
at = end + (statement.slice(end).length - statement.slice(end).trimStart().length);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=class-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"class-shapes.js","sourceRoot":"","sources":["../../../src/check/schemas/class-shapes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/** A shape of the HTTP contract written by hand: a DTO class, or the object of a schema builder. */
|
|
2
|
+
export interface DeclaredShape {
|
|
3
|
+
/** The shape, written the same way whatever its layout: equal keys are one shape. */
|
|
4
|
+
readonly key: string;
|
|
5
|
+
readonly line: number;
|
|
6
|
+
/** How a reader finds it in its file. */
|
|
7
|
+
readonly what: string;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=declared-shape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declared-shape.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/declared-shape.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,MAAM,WAAW,aAAa;IAC5B,qFAAqF;IACrF,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,yCAAyC;IACzC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"declared-shape.js","sourceRoot":"","sources":["../../../src/check/schemas/declared-shape.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { Project } from '../model/project.js';
|
|
2
|
+
import type { SourceFile } from '../model/source-file.js';
|
|
3
|
+
/** A production source where the schemas of the HTTP contract live: presentation/ of a context, or of the shared kernel. */
|
|
4
|
+
export declare function holdsSchemas(project: Project, file: SourceFile): boolean;
|
|
5
|
+
//# sourceMappingURL=holds-schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holds-schemas.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/holds-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAG1D,4HAA4H;AAC5H,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAUxE"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { sharedPresentation } from './shared-presentation.js';
|
|
2
|
+
/** A production source where the schemas of the HTTP contract live: presentation/ of a context, or of the shared kernel. */
|
|
3
|
+
export function holdsSchemas(project, file) {
|
|
4
|
+
if (file.isTest) {
|
|
5
|
+
return false;
|
|
6
|
+
}
|
|
7
|
+
const { location } = file;
|
|
8
|
+
return location.area === 'context'
|
|
9
|
+
? location.layer === 'presentation'
|
|
10
|
+
: file.path.startsWith(sharedPresentation(project.config));
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=holds-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"holds-schemas.js","sourceRoot":"","sources":["../../../src/check/schemas/holds-schemas.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,4HAA4H;AAC5H,MAAM,UAAU,YAAY,CAAC,OAAgB,EAAE,IAAgB;IAC7D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAC;IAE1B,OAAO,QAAQ,CAAC,IAAI,KAAK,SAAS;QAChC,CAAC,CAAC,QAAQ,CAAC,KAAK,KAAK,cAAc;QACnC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;AAC/D,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SourceFile } from '../model/source-file.js';
|
|
2
|
+
import type { DeclaredShape } from './declared-shape.js';
|
|
3
|
+
/**
|
|
4
|
+
* The object schemas a source builds, but those of request parameters and those the generator
|
|
5
|
+
* left to fill: each is its entries, whatever their order and layout.
|
|
6
|
+
*/
|
|
7
|
+
export declare function objectShapes(file: SourceFile, code: string): DeclaredShape[];
|
|
8
|
+
//# sourceMappingURL=object-shapes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-shapes.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/object-shapes.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAWzD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE,CAqB5E"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { matchingBracket } from '../text/matching-bracket.js';
|
|
2
|
+
import { stillGenerated } from './still-generated.js';
|
|
3
|
+
import { topLevelStatements } from './top-level-statements.js';
|
|
4
|
+
/** The object builders of zod, valibot and TypeBox: `z.object({`, `v.object({`, `Type.Object({`. */
|
|
5
|
+
const OBJECT_BUILDER = /(?<![\w$])(?:z|v|Type|t)\s*\.\s*(?:object|strictObject|looseObject|Object)\s*\(\s*\{/g;
|
|
6
|
+
const DECLARED_AS = /(?:const|let)\s+([A-Za-z_$][\w$]*)[^;]*$/;
|
|
7
|
+
/** What a route declares as parameters is documented per operation, never as a component: it is not judged. */
|
|
8
|
+
const PARAMETERS = /^(?:params|query|headers)$|(?:Params|Query|Headers)$/;
|
|
9
|
+
/**
|
|
10
|
+
* The object schemas a source builds, but those of request parameters and those the generator
|
|
11
|
+
* left to fill: each is its entries, whatever their order and layout.
|
|
12
|
+
*/
|
|
13
|
+
export function objectShapes(file, code) {
|
|
14
|
+
return [...code.matchAll(OBJECT_BUILDER)].flatMap((match) => {
|
|
15
|
+
const open = match.index + match[0].length - 1;
|
|
16
|
+
const close = matchingBracket(code, open);
|
|
17
|
+
const entries = topLevelStatements(code.slice(open + 1, close), ',');
|
|
18
|
+
const declaredAs = DECLARED_AS.exec(code.slice(0, match.index))?.[1];
|
|
19
|
+
const parameters = declaredAs !== undefined && PARAMETERS.test(declaredAs);
|
|
20
|
+
if (entries.length === 0 || parameters || stillGenerated(file, open, close)) {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
const key = `object{${entries
|
|
24
|
+
.map((entry) => entry.replace(/\s+/g, ''))
|
|
25
|
+
.sort()
|
|
26
|
+
.join(',')}}`;
|
|
27
|
+
const what = declaredAs === undefined ? 'An object schema' : `The object schema of \`${declaredAs}\``;
|
|
28
|
+
return [{ key, line: file.scan.lineAt(match.index), what }];
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=object-shapes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"object-shapes.js","sourceRoot":"","sources":["../../../src/check/schemas/object-shapes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,oGAAoG;AACpG,MAAM,cAAc,GAAG,uFAAuF,CAAC;AAC/G,MAAM,WAAW,GAAG,0CAA0C,CAAC;AAE/D,+GAA+G;AAC/G,MAAM,UAAU,GAAG,sDAAsD,CAAC;AAE1E;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB,EAAE,IAAY;IACzD,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1D,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;QAC/C,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC1C,MAAM,OAAO,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,EAAE,KAAK,CAAC,EAAE,GAAG,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,UAAU,GAAG,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAE3E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,IAAI,cAAc,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,EAAE,CAAC;YAC5E,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,GAAG,GAAG,UAAU,OAAO;aAC1B,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aACzC,IAAI,EAAE;aACN,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;QAEhB,MAAM,IAAI,GAAG,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,0BAA0B,UAAU,IAAI,CAAC;QAEtG,OAAO,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { SourceFile } from '../model/source-file.js';
|
|
2
|
+
/**
|
|
3
|
+
* The code of a source with its strings and regular expressions given back and its comments
|
|
4
|
+
* still blanked: what a declaration says, without what is written about it.
|
|
5
|
+
*/
|
|
6
|
+
export declare function restoredCode(file: SourceFile): string;
|
|
7
|
+
//# sourceMappingURL=restored-code.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restored-code.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/restored-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAK1D;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,UAAU,GAAG,MAAM,CAYrD"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/** A regular expression literal as the scanner leaves it: its delimiters, its content blanked. */
|
|
2
|
+
const BLANKED_PATTERN = /\/ +\//g;
|
|
3
|
+
/**
|
|
4
|
+
* The code of a source with its strings and regular expressions given back and its comments
|
|
5
|
+
* still blanked: what a declaration says, without what is written about it.
|
|
6
|
+
*/
|
|
7
|
+
export function restoredCode(file) {
|
|
8
|
+
let code = file.scan.code;
|
|
9
|
+
for (const { start, end } of file.scan.strings) {
|
|
10
|
+
code = code.slice(0, start) + file.text.slice(start, end) + code.slice(end);
|
|
11
|
+
}
|
|
12
|
+
return code.replace(BLANKED_PATTERN, (blanked, offset) => {
|
|
13
|
+
const original = file.text.slice(offset, offset + blanked.length);
|
|
14
|
+
return original.startsWith('/') && original.endsWith('/') ? original : blanked;
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
//# sourceMappingURL=restored-code.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"restored-code.js","sourceRoot":"","sources":["../../../src/check/schemas/restored-code.ts"],"names":[],"mappings":"AAEA,kGAAkG;AAClG,MAAM,eAAe,GAAG,SAAS,CAAC;AAElC;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,IAAgB;IAC3C,IAAI,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;IAE1B,KAAK,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC;QAC/C,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9E,CAAC;IAED,OAAO,IAAI,CAAC,OAAO,CAAC,eAAe,EAAE,CAAC,OAAO,EAAE,MAAc,EAAE,EAAE;QAC/D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAElE,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;IACjF,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Config } from '../../config/index.js';
|
|
2
|
+
/** The directory of the shared kernel where the presentation types several contexts answer with live. */
|
|
3
|
+
export declare function sharedPresentation(config: Config): string;
|
|
4
|
+
//# sourceMappingURL=shared-presentation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-presentation.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/shared-presentation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AAEpD,yGAAyG;AACzG,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEzD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared-presentation.js","sourceRoot":"","sources":["../../../src/check/schemas/shared-presentation.ts"],"names":[],"mappings":"AAEA,yGAAyG;AACzG,MAAM,UAAU,kBAAkB,CAAC,MAAc;IAC/C,OAAO,GAAG,MAAM,CAAC,eAAe,gBAAgB,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Project } from '../model/project.js';
|
|
2
|
+
/** The `schema/*` rules judge a project that says it shares its schemas; one that does not say keeps one schema per route, as 0.5. */
|
|
3
|
+
export declare function sharesSchemas(project: Project): boolean;
|
|
4
|
+
//# sourceMappingURL=shares-schemas.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares-schemas.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/shares-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAEnD,sIAAsI;AACtI,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAEvD"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/** The `schema/*` rules judge a project that says it shares its schemas; one that does not say keeps one schema per route, as 0.5. */
|
|
2
|
+
export function sharesSchemas(project) {
|
|
3
|
+
return project.config.stack.schemas === 'shared';
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=shares-schemas.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shares-schemas.js","sourceRoot":"","sources":["../../../src/check/schemas/shares-schemas.ts"],"names":[],"mappings":"AAEA,sIAAsI;AACtI,MAAM,UAAU,aAAa,CAAC,OAAgB;IAC5C,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,KAAK,QAAQ,CAAC;AACnD,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { SourceFile } from '../model/source-file.js';
|
|
2
|
+
/**
|
|
3
|
+
* Whether the text between two offsets still carries a mark of the generator: a shape that does
|
|
4
|
+
* is a placeholder waiting for its fields (every search line starts as `{ id }`), not a shape
|
|
5
|
+
* someone declared, so two of them are not a copy.
|
|
6
|
+
*/
|
|
7
|
+
export declare function stillGenerated(file: SourceFile, start: number, end: number): boolean;
|
|
8
|
+
//# sourceMappingURL=still-generated.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"still-generated.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/still-generated.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAK1D;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpF"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** The mark the generator leaves where a developer is expected to write: `TODO(domain)` and its kind. */
|
|
2
|
+
const LEFT_TO_WRITE = /\bTODO\([a-z-]+\)/;
|
|
3
|
+
/**
|
|
4
|
+
* Whether the text between two offsets still carries a mark of the generator: a shape that does
|
|
5
|
+
* is a placeholder waiting for its fields (every search line starts as `{ id }`), not a shape
|
|
6
|
+
* someone declared, so two of them are not a copy.
|
|
7
|
+
*/
|
|
8
|
+
export function stillGenerated(file, start, end) {
|
|
9
|
+
return LEFT_TO_WRITE.test(file.text.slice(start, end));
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=still-generated.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"still-generated.js","sourceRoot":"","sources":["../../../src/check/schemas/still-generated.ts"],"names":[],"mappings":"AAEA,yGAAyG;AACzG,MAAM,aAAa,GAAG,mBAAmB,CAAC;AAE1C;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,IAAgB,EAAE,KAAa,EAAE,GAAW;IACzE,OAAO,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;AACzD,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-level-statements.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/top-level-statements.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAmB5E"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** Splits a text on the separators met outside any bracket; empty parts are dropped. */
|
|
2
|
+
export function topLevelStatements(text, separator) {
|
|
3
|
+
const parts = [];
|
|
4
|
+
let depth = 0;
|
|
5
|
+
let start = 0;
|
|
6
|
+
for (let i = 0; i < text.length; i += 1) {
|
|
7
|
+
const char = text.charAt(i);
|
|
8
|
+
if ('([{'.includes(char)) {
|
|
9
|
+
depth += 1;
|
|
10
|
+
}
|
|
11
|
+
else if (')]}'.includes(char)) {
|
|
12
|
+
depth -= 1;
|
|
13
|
+
}
|
|
14
|
+
else if (char === separator && depth === 0) {
|
|
15
|
+
parts.push(text.slice(start, i));
|
|
16
|
+
start = i + 1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return [...parts, text.slice(start)].map((part) => part.trim()).filter((part) => part !== '');
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=top-level-statements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"top-level-statements.js","sourceRoot":"","sources":["../../../src/check/schemas/top-level-statements.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,SAAiB;IAChE,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAE5B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YACzB,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,KAAK,IAAI,CAAC,CAAC;QACb,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;YACjC,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC;AAChG,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-packages.d.ts","sourceRoot":"","sources":["../../../src/check/schemas/validation-packages.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAUhD,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/** The packages a schema of the HTTP contract is written with: whoever imports one declares a schema. */
|
|
2
|
+
export const VALIDATION_PACKAGES = [
|
|
3
|
+
'@ddd-ts-kit/validation',
|
|
4
|
+
'@sinclair/typebox',
|
|
5
|
+
'arktype',
|
|
6
|
+
'class-transformer',
|
|
7
|
+
'class-validator',
|
|
8
|
+
'class-validator-jsonschema',
|
|
9
|
+
'typebox',
|
|
10
|
+
'valibot',
|
|
11
|
+
'zod',
|
|
12
|
+
];
|
|
13
|
+
//# sourceMappingURL=validation-packages.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validation-packages.js","sourceRoot":"","sources":["../../../src/check/schemas/validation-packages.ts"],"names":[],"mappings":"AAAA,yGAAyG;AACzG,MAAM,CAAC,MAAM,mBAAmB,GAAsB;IACpD,wBAAwB;IACxB,mBAAmB;IACnB,SAAS;IACT,mBAAmB;IACnB,iBAAiB;IACjB,4BAA4B;IAC5B,SAAS;IACT,SAAS;IACT,KAAK;CACN,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AA4C5C,eAAO,MAAM,WAAW,EAAE,OA8BzB,CAAC"}
|
package/dist/commands/init.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"default-allowed-packages.d.ts","sourceRoot":"","sources":["../../src/config/default-allowed-packages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"default-allowed-packages.d.ts","sourceRoot":"","sources":["../../src/config/default-allowed-packages.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAgB1C,MAAM,MAAM,eAAe,GAAG,IAAI,CAChC,MAAM,EACN,uBAAuB,GAAG,4BAA4B,GAAG,kCAAkC,CAC5F,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,eAAe,CAS1E"}
|