@metaobjectsdev/metadata 1.0.11 → 1.0.13

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/errors.d.ts CHANGED
@@ -1,6 +1,6 @@
1
1
  import type { ErrorSource, LoaderError, NodeContext } from "./source.js";
2
2
  /** Stable, language-neutral error codes — mirrors fixtures/conformance/ERROR-CODES.json. */
3
- export declare const ERROR_CODES: readonly ["ERR_TOP_LEVEL_NOT_OBJECT", "ERR_CHILD_NOT_OBJECT", "ERR_UNKNOWN_TYPE", "ERR_UNKNOWN_SUBTYPE", "ERR_ABSTRACT_SUBTYPE_AUTHORED", "ERR_MISSING_SUBTYPE", "ERR_DUPLICATE_NAME", "ERR_UNRESOLVED_SUPER", "ERR_EXTENDS_TARGET_MISMATCH", "ERR_IDENTITY_NAME_REQUIRED", "ERR_TOO_MANY_OCCURRENCES", "ERR_PROJECTION_IDENTITY_NOT_EXTENDED", "ERR_IDENTITY_KEY_MISMATCH", "ERR_PROJECTION_SOURCE_WRITABLE", "ERR_PROJECTION_INHERITED_SOURCE", "ERR_INVALID_SUBTYPE_CHILD", "ERR_CHILD_NOT_ALLOWED", "ERR_UNKNOWN_ATTR", "ERR_BAD_ATTR_VALUE", "ERR_BAD_DEFAULT_SORT_FIELD", "ERR_PROVIDER_DEPENDENCY_CYCLE", "ERR_PROVIDER_DUPLICATE_ID", "ERR_PROVIDER_MISSING_DEPENDENCY", "ERR_PROVIDER_ATTR_CONFLICT", "ERR_EXTEND_REQUIRED_ATTR", "ERR_MALFORMED_JSON", "ERR_MISSING_REQUIRED_ATTR", "ERR_SUBTYPE_RULE_VIOLATION", "ERR_OVERLAY_NO_TARGET", "ERR_MALFORMED_YAML", "ERR_INVALID_ORIGIN", "ERR_AMBIGUOUS_PATH", "ERR_ORIGIN_CARDINALITY", "ERR_EXTENDS_ORIGIN_MISMATCH", "ERR_PASSTHROUGH_TYPE_MISMATCH", "ERR_DERIVED_FIELD_NO_READ_SOURCE", "ERR_ENTITY_PRIMARY_SOURCE_READONLY", "ERR_INVALID_TEMPLATE", "ERR_INVALID_RELATIONSHIP", "ERR_INVALID_REFERENCE", "ERR_VAR_NOT_ON_PAYLOAD", "ERR_PAYLOAD_NAME_COLLISION", "ERR_PARTIAL_UNRESOLVED", "ERR_REQUIRED_SLOT_UNUSED", "ERR_OUTPUT_TAG_MISSING", "ERR_BAD_ATTR_FILTER", "ERR_STORAGE_FLATTENED_ARRAY", "ERR_STORAGE_WITHOUT_OBJECT_REF", "ERR_OBJECT_FIELD_WITHOUT_OBJECT_REF", "ERR_UNRESOLVED_OBJECT_REF", "ERR_RESERVED_ATTR", "ERR_SOURCE_NO_PRIMARY", "ERR_SOURCE_MULTIPLE_PRIMARY", "ERR_PHYSICAL_NAME_KIND_MISMATCH", "ERR_PHYSICAL_NAME_MULTIPLE", "ERR_MUTABILITY_AUTOSET_CONFLICT", "ERR_MUTABILITY_DOWNGRADE", "ERR_READONLY_ASSIGNED_PRIMARY", "ERR_PARAMETER_REF_UNRESOLVED", "ERR_PARAMETER_REF_NOT_VALUE_OBJECT", "ERR_PARAMETER_REF_ON_NON_CALLABLE_KIND", "ERR_DISCRIMINATOR_FIELD_NOT_FOUND", "ERR_DISCRIMINATOR_VALUE_DUPLICATE", "ERR_DISCRIMINATOR_VALUE_MISSING", "ERR_DISCRIMINATOR_VALUE_TYPE_MISMATCH", "ERR_YAML_COERCION", "ERR_MERGE_CONFLICT", "ERR_FILTERABLE_UNSUPPORTED_SUBTYPE", "ERR_SORTABLE_UNSUPPORTED_SUBTYPE", "ERR_COLLECT_WHOLE_OBJECT", "ERR_COLLECT_MEMBER_UNRESOLVED", "ERR_REGISTRY_SEALED", "ERR_RELATIVE_REF_IN_CANONICAL", "ERR_INVALID_METAMODEL_CONSTRAINT", "ERR_INVALID_INDEX", "ERR_REQUIREMENT_RETIRED_HAS_IMPLEMENTORS", "ERR_REQUIREMENT_SUPERSEDED_BY_NOT_RETIRED", "ERR_COMPUTED_TYPE_MISMATCH", "ERR_UNKNOWN_EXPR_NODE", "ERR_SQL_BODY_WITH_UNMANAGED", "ERR_SQL_BODY_ON_WRITABLE_KIND", "ERR_ORIGIN_UNDER_SQL_BODY", "ERR_ENUM_EXTENDS_VALUES_CONFLICT", "ERR_ENUM_INT_VALUE_MAP_ARRAY", "ERR_SOURCE_UNRESOLVED", "ERR_SOURCE_KIND_UNSUPPORTED", "ERR_SCOPE_PATTERN_INVALID", "ERR_COLLECTION_NOT_FOUND", "ERR_UNKNOWN_LIBRARY", "ERR_LIBRARY_PACKAGE_COLLISION", "ERR_LIBRARY_PACKAGE_NOT_OWNED", "ERR_DEPENDENCY_UNRESOLVED", "ERR_DEPENDENCY_MANIFEST_INVALID", "ERR_DEPENDENCY_SNAPSHOT_STALE", "ERR_DEPENDENCY_NODE_COLLISION", "ERR_DEPENDENCY_PACKAGE_NOT_OWNED", "ERR_DEPENDENCY_METAMODEL_INCOMPATIBLE", "ERR_DEPENDENCY_UPSTREAM_DRIFT", "ERR_UNKNOWN"];
3
+ export declare const ERROR_CODES: readonly ["ERR_TOP_LEVEL_NOT_OBJECT", "ERR_CHILD_NOT_OBJECT", "ERR_UNKNOWN_TYPE", "ERR_UNKNOWN_SUBTYPE", "ERR_ABSTRACT_SUBTYPE_AUTHORED", "ERR_MISSING_SUBTYPE", "ERR_DUPLICATE_NAME", "ERR_UNRESOLVED_SUPER", "ERR_EXTENDS_TARGET_MISMATCH", "ERR_IDENTITY_NAME_REQUIRED", "ERR_TOO_MANY_OCCURRENCES", "ERR_PROJECTION_IDENTITY_NOT_EXTENDED", "ERR_IDENTITY_KEY_MISMATCH", "ERR_PROJECTION_SOURCE_WRITABLE", "ERR_PROJECTION_INHERITED_SOURCE", "ERR_INVALID_SUBTYPE_CHILD", "ERR_CHILD_NOT_ALLOWED", "ERR_UNKNOWN_ATTR", "ERR_BAD_ATTR_VALUE", "ERR_BAD_DEFAULT_SORT_FIELD", "ERR_PROVIDER_DEPENDENCY_CYCLE", "ERR_PROVIDER_DUPLICATE_ID", "ERR_PROVIDER_MISSING_DEPENDENCY", "ERR_PROVIDER_ATTR_CONFLICT", "ERR_EXTEND_REQUIRED_ATTR", "ERR_MALFORMED_JSON", "ERR_MISSING_REQUIRED_ATTR", "ERR_SUBTYPE_RULE_VIOLATION", "ERR_OVERLAY_NO_TARGET", "ERR_MALFORMED_YAML", "ERR_INVALID_ORIGIN", "ERR_AMBIGUOUS_PATH", "ERR_ORIGIN_CARDINALITY", "ERR_EXTENDS_ORIGIN_MISMATCH", "ERR_PASSTHROUGH_TYPE_MISMATCH", "ERR_DERIVED_FIELD_NO_READ_SOURCE", "ERR_ENTITY_PRIMARY_SOURCE_READONLY", "ERR_INVALID_TEMPLATE", "ERR_INVALID_RELATIONSHIP", "ERR_INVALID_REFERENCE", "ERR_VAR_NOT_ON_PAYLOAD", "ERR_PAYLOAD_NAME_COLLISION", "ERR_COLLECTION_NAME_COLLISION", "ERR_PARTIAL_UNRESOLVED", "ERR_REQUIRED_SLOT_UNUSED", "ERR_OUTPUT_TAG_MISSING", "ERR_BAD_ATTR_FILTER", "ERR_STORAGE_FLATTENED_ARRAY", "ERR_STORAGE_WITHOUT_OBJECT_REF", "ERR_OBJECT_FIELD_WITHOUT_OBJECT_REF", "ERR_UNRESOLVED_OBJECT_REF", "ERR_RESERVED_ATTR", "ERR_SOURCE_NO_PRIMARY", "ERR_SOURCE_MULTIPLE_PRIMARY", "ERR_PHYSICAL_NAME_KIND_MISMATCH", "ERR_PHYSICAL_NAME_MULTIPLE", "ERR_MUTABILITY_AUTOSET_CONFLICT", "ERR_MUTABILITY_DOWNGRADE", "ERR_READONLY_ASSIGNED_PRIMARY", "ERR_PARAMETER_REF_UNRESOLVED", "ERR_PARAMETER_REF_NOT_VALUE_OBJECT", "ERR_PARAMETER_REF_ON_NON_CALLABLE_KIND", "ERR_DISCRIMINATOR_FIELD_NOT_FOUND", "ERR_DISCRIMINATOR_VALUE_DUPLICATE", "ERR_DISCRIMINATOR_VALUE_MISSING", "ERR_DISCRIMINATOR_VALUE_TYPE_MISMATCH", "ERR_YAML_COERCION", "ERR_MERGE_CONFLICT", "ERR_FILTERABLE_UNSUPPORTED_SUBTYPE", "ERR_SORTABLE_UNSUPPORTED_SUBTYPE", "ERR_COLLECT_WHOLE_OBJECT", "ERR_COLLECT_MEMBER_UNRESOLVED", "ERR_REGISTRY_SEALED", "ERR_RELATIVE_REF_IN_CANONICAL", "ERR_INVALID_METAMODEL_CONSTRAINT", "ERR_INVALID_INDEX", "ERR_REQUIREMENT_RETIRED_HAS_IMPLEMENTORS", "ERR_REQUIREMENT_SUPERSEDED_BY_NOT_RETIRED", "ERR_COMPUTED_TYPE_MISMATCH", "ERR_UNKNOWN_EXPR_NODE", "ERR_SQL_BODY_WITH_UNMANAGED", "ERR_SQL_BODY_ON_WRITABLE_KIND", "ERR_ORIGIN_UNDER_SQL_BODY", "ERR_ENUM_EXTENDS_VALUES_CONFLICT", "ERR_ENUM_INT_VALUE_MAP_ARRAY", "ERR_SOURCE_UNRESOLVED", "ERR_SOURCE_KIND_UNSUPPORTED", "ERR_SCOPE_PATTERN_INVALID", "ERR_COLLECTION_NOT_FOUND", "ERR_UNKNOWN_LIBRARY", "ERR_LIBRARY_PACKAGE_COLLISION", "ERR_LIBRARY_PACKAGE_NOT_OWNED", "ERR_DEPENDENCY_UNRESOLVED", "ERR_DEPENDENCY_MANIFEST_INVALID", "ERR_DEPENDENCY_SNAPSHOT_STALE", "ERR_DEPENDENCY_NODE_COLLISION", "ERR_DEPENDENCY_PACKAGE_NOT_OWNED", "ERR_DEPENDENCY_METAMODEL_INCOMPATIBLE", "ERR_DEPENDENCY_UPSTREAM_DRIFT", "ERR_UNKNOWN"];
4
4
  /** Warning codes — same envelope shape as errors but advisory. */
5
5
  export declare const WARNING_CODES: readonly ["WARN_DUPLICATE_DECLARATION", "WARN_LEGACY", "WARN_LEGACY_PHYSICAL_NAME_ALIAS", "WARN_MUTABILITY_VALUE_OBJECT", "WARN_MUTABILITY_READONLY_HOST", "WARN_ORIGIN_UNDER_UNMANAGED", "WARN_ENUM_NORMALIZE_AMBIGUOUS"];
6
6
  export type WarningCode = (typeof WARNING_CODES)[number];
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzE,4FAA4F;AAa5F,eAAO,MAAM,WAAW,85FA0Rd,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,aAAa,4NA8BhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,SAAQ,KAAM,YAAW,WAAW;IAI1D,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;gBAG1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAChC,MAAM,EAAE,WAAW,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,WAAW,CAAC;KACpB;CAiBJ;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;CAKzD"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAEzE,4FAA4F;AAa5F,eAAO,MAAM,WAAW,+7FAiSd,CAAC;AAEX,kEAAkE;AAClE,eAAO,MAAM,aAAa,4NA8BhB,CAAC;AACX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAEzD,MAAM,MAAM,SAAS,GAAG,CAAC,OAAO,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC;AAErD;;;;;;;;;;;;;;GAcG;AACH,qBAAa,UAAW,SAAQ,KAAM,YAAW,WAAW;IAI1D,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;IAC7B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,WAAW,CAAC;gBAG1B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS,GAAG,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;QAChC,MAAM,EAAE,WAAW,CAAC;QACpB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,IAAI,CAAC,EAAE,WAAW,CAAC;KACpB;CAiBJ;AAED;;;;;GAKG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,QAAQ,CAAC,IAAI,EAAE,SAAS,GAAG,SAAS,CAAC;gBAEzB,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;QAAE,IAAI,CAAC,EAAE,SAAS,CAAA;KAAE;CAKzD"}
package/dist/errors.js CHANGED
@@ -128,6 +128,13 @@ export const ERROR_CODES = [
128
128
  // same emitted record name even after package-qualification. Peer of
129
129
  // ERR_VAR_NOT_ON_PAYLOAD — a codegen-time (not loader) error.
130
130
  "ERR_PAYLOAD_NAME_COLLISION",
131
+ // Codegen: two DISTINCT entities/projections in one generation run pluralize to the
132
+ // SAME API-surface collection name (REST path, generated hook/query/finder/list
133
+ // names, DbSet/collection variable name) — e.g. "Address" and "Addresses" both
134
+ // resolving to "Addresses". A codegen-time (not loader) error, peer of
135
+ // ERR_PAYLOAD_NAME_COLLISION: refused rather than silently emitting a duplicate
136
+ // symbol / route / DbSet member.
137
+ "ERR_COLLECTION_NAME_COLLISION",
131
138
  "ERR_PARTIAL_UNRESOLVED",
132
139
  "ERR_REQUIRED_SLOT_UNUSED",
133
140
  "ERR_OUTPUT_TAG_MISSING",
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}
package/dist/fmt.d.ts ADDED
@@ -0,0 +1,31 @@
1
+ import type { TypeRegistry } from "./registry.js";
2
+ export interface FormatFileOptions {
3
+ /** The registry this project loads against — core providers plus any the
4
+ * project's own config registers, so a custom attr never false-positives. */
5
+ readonly registry: TypeRegistry;
6
+ /** ADR-0023 strict-attr loading. Default false (lenient), matching `meta gen`
7
+ * rather than `meta verify` — fmt reformats whatever already loads; an
8
+ * unrecognized `@attr` is `verify`'s job to flag, not fmt's to refuse on. */
9
+ readonly strict?: boolean;
10
+ /** The source id this file's nodes record provenance under — normally the
11
+ * same id the full project load would use (basename, or a dependency's
12
+ * `dep:<name>/<artifact>` id). Used only for error messages here. */
13
+ readonly sourceId: string;
14
+ }
15
+ export type FormatFileResult = {
16
+ readonly ok: true;
17
+ readonly text: string;
18
+ } | {
19
+ readonly ok: false;
20
+ readonly overlay: boolean;
21
+ readonly message: string;
22
+ };
23
+ /**
24
+ * Format one file's own content into canonical JSON. Parses `content`
25
+ * standalone (no `intoRoot` — never merged with any other file) and, on a
26
+ * clean parse, returns the canonical serialization of the resulting file
27
+ * root. Never throws: a JSON syntax error, a structural parse error, or any
28
+ * `overlay: true` declaration all come back as `{ ok: false }`.
29
+ */
30
+ export declare function formatMetadataFile(content: string, opts: FormatFileOptions): FormatFileResult;
31
+ //# sourceMappingURL=fmt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fmt.d.ts","sourceRoot":"","sources":["../src/fmt.ts"],"names":[],"mappings":"AAgCA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAGlD,MAAM,WAAW,iBAAiB;IAChC;kFAC8E;IAC9E,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC;IAChC;;kFAE8E;IAC9E,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B;;0EAEsE;IACtE,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,MAAM,gBAAgB,GACxB;IAAE,QAAQ,CAAC,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC5C;IAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAiDhF;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,gBAAgB,CAoD7F"}
package/dist/fmt.js ADDED
@@ -0,0 +1,144 @@
1
+ // meta fmt (#304) — format a single metadata FILE's own content.
2
+ //
3
+ // The canonical serializer (serializer-json.ts) already produces deterministic,
4
+ // cross-port byte-identical JSON for a loaded MetaData node — that is what the
5
+ // conformance corpora byte-match against. `meta fmt` surfaces it as a per-file
6
+ // formatter: each file is parsed STANDALONE (never merged with its siblings)
7
+ // and re-emitted via `canonicalSerialize`, so the output is strictly that
8
+ // file's own declared content — own-mode, declared-here layer only (ADR-0039).
9
+ //
10
+ // Two properties fall out of parsing a file standalone rather than loading the
11
+ // whole project and slicing the merged tree:
12
+ //
13
+ // - A cross-file `extends` ref (the common `extends: "BaseEntity"` pattern,
14
+ // where the base lives in another file) is never an error here: super
15
+ // resolution is deferred and this module never runs the second pass that
16
+ // would fail an UNRESOLVED ref. Own-mode serialization only needs the raw
17
+ // `superRef` string, never the resolved target.
18
+ // - A file declaring `overlay: true` ANYWHERE in its tree is never
19
+ // formatted — reported as `overlay: true` so a caller can leave it
20
+ // untouched rather than guess at a merge. This is true REGARDLESS of
21
+ // whether a same-(type,name) base exists elsewhere in the file: a
22
+ // formatter must never change STRUCTURE, and buildTree's ordinary
23
+ // find-or-reuse behavior would happily fold a plain declaration and a
24
+ // same-file `overlay: true` redeclaration into one merged node —
25
+ // silently dropping the overlay marker from the output. Checking the
26
+ // raw document for `overlay: true` BEFORE buildTree ever runs (see
27
+ // `hasOverlayDeclaration` below) catches that case too, not just the
28
+ // no-local-target one buildTree's own ERR_OVERLAY_NO_TARGET reports. A
29
+ // MIXED file (plain + overlay declarations together, anywhere) is
30
+ // reported as `overlay: true` too — fmt does not partially format a file.
31
+ import { buildTree } from "./parser-core.js";
32
+ import { canonicalSerialize } from "./serializer-json.js";
33
+ import { JSON_KEY_SCHEMA, RESERVED_KEY_CHILDREN, RESERVED_KEY_OVERLAY } from "./shared/structural.js";
34
+ /** The code `buildTree`'s overlay drain raises when a queued `overlay: true`
35
+ * declaration finds no same-(type,name) base in the tree being built — here,
36
+ * always because the base lives in a file this standalone parse never sees.
37
+ * Kept as a defensive second signal; `hasOverlayDeclaration` below is what
38
+ * actually decides the common case (a local base DOES exist). */
39
+ const OVERLAY_NO_TARGET_CODE = "ERR_OVERLAY_NO_TARGET";
40
+ /**
41
+ * Whether `doc` (an already-`JSON.parse`d canonical document) declares an
42
+ * `overlay: true` node anywhere in its tree — the top-level declaration
43
+ * itself, or any descendant reached by walking `children` arrays.
44
+ *
45
+ * A purely STRUCTURAL check, independent of the registry and run BEFORE
46
+ * `buildTree`: fmt must never attempt a same-file merge of a plain
47
+ * declaration and an `overlay: true` redeclaration of the same (type, name)
48
+ * — buildTree's ordinary find-or-reuse behavior would silently fold the two
49
+ * into one node, dropping the overlay marker, which is exactly the
50
+ * "formatter changes structure" outcome `meta fmt` must never produce. This
51
+ * catches that case (a local base exists) as well as the no-target one
52
+ * buildTree's own `ERR_OVERLAY_NO_TARGET` reports — the two are the same
53
+ * refusal from a caller's point of view: this file is not fmt's to format.
54
+ */
55
+ function hasOverlayDeclaration(doc) {
56
+ if (typeof doc !== "object" || doc === null || Array.isArray(doc))
57
+ return false;
58
+ for (const [key, body] of Object.entries(doc)) {
59
+ if (key === JSON_KEY_SCHEMA)
60
+ continue;
61
+ if (typeof body !== "object" || body === null || Array.isArray(body))
62
+ continue;
63
+ if (bodyHasOverlay(body))
64
+ return true;
65
+ }
66
+ return false;
67
+ }
68
+ function bodyHasOverlay(body) {
69
+ const children = body[RESERVED_KEY_CHILDREN];
70
+ if (!Array.isArray(children))
71
+ return false;
72
+ for (const child of children) {
73
+ if (typeof child !== "object" || child === null || Array.isArray(child))
74
+ continue;
75
+ for (const childBody of Object.values(child)) {
76
+ if (typeof childBody !== "object" || childBody === null || Array.isArray(childBody))
77
+ continue;
78
+ const cb = childBody;
79
+ if (cb[RESERVED_KEY_OVERLAY] === true)
80
+ return true;
81
+ if (bodyHasOverlay(cb))
82
+ return true;
83
+ }
84
+ }
85
+ return false;
86
+ }
87
+ /**
88
+ * Format one file's own content into canonical JSON. Parses `content`
89
+ * standalone (no `intoRoot` — never merged with any other file) and, on a
90
+ * clean parse, returns the canonical serialization of the resulting file
91
+ * root. Never throws: a JSON syntax error, a structural parse error, or any
92
+ * `overlay: true` declaration all come back as `{ ok: false }`.
93
+ */
94
+ export function formatMetadataFile(content, opts) {
95
+ // Strip a UTF-8 BOM before parsing (mirrors parseJson's own front-end,
96
+ // parser-json.ts) — a BOM-prefixed file is otherwise a flat JSON.parse
97
+ // syntax error, and Java-authored files often carry one.
98
+ const normalized = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
99
+ let parsed;
100
+ try {
101
+ parsed = JSON.parse(normalized);
102
+ }
103
+ catch (err) {
104
+ return {
105
+ ok: false,
106
+ overlay: false,
107
+ message: `invalid JSON: ${err instanceof Error ? err.message : String(err)}`,
108
+ };
109
+ }
110
+ if (hasOverlayDeclaration(parsed)) {
111
+ return {
112
+ ok: false,
113
+ overlay: true,
114
+ message: "this file declares an overlay fmt cannot resolve standalone",
115
+ };
116
+ }
117
+ try {
118
+ const result = buildTree(parsed, {
119
+ registry: opts.registry,
120
+ strict: opts.strict ?? false,
121
+ sourceName: opts.sourceId,
122
+ // Never resolved here — see module header. A cross-file `extends` must
123
+ // not become an error just because this file is formatted in isolation.
124
+ deferSuperResolution: true,
125
+ });
126
+ if (result.errors.length > 0) {
127
+ const overlay = result.errors.some((e) => e.code === OVERLAY_NO_TARGET_CODE);
128
+ return {
129
+ ok: false,
130
+ overlay,
131
+ message: result.errors.map((e) => e.message).join("; "),
132
+ };
133
+ }
134
+ return { ok: true, text: canonicalSerialize(result.root) };
135
+ }
136
+ catch (err) {
137
+ return {
138
+ ok: false,
139
+ overlay: false,
140
+ message: err instanceof Error ? err.message : String(err),
141
+ };
142
+ }
143
+ }
144
+ //# sourceMappingURL=fmt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fmt.js","sourceRoot":"","sources":["../src/fmt.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -92,6 +92,8 @@ export type { ParseOptions, ParseResult } from "./parser-core.js";
92
92
  export { parseJson } from "./parser-json.js";
93
93
  export { serializeJson, canonicalSerialize, canonicalSerializeEffective, serializeSharedDocument, inferAttrSubType } from "./serializer-json.js";
94
94
  export type { SerializeOptions } from "./serializer-json.js";
95
+ export { formatMetadataFile } from "./fmt.js";
96
+ export type { FormatFileOptions, FormatFileResult } from "./fmt.js";
95
97
  export { resolveSuperRef } from "./super-resolve.js";
96
98
  export { expandRef, isRelativeRef, refMatchesObject, resolveObjectRef, didYouMeanHint, REF_BEARING_ATTR_NAMES } from "./naming-refs.js";
97
99
  export { MetaDataLoader, declaredTopLevelKeys } from "./loader/meta-data-loader.js";
@@ -107,7 +109,7 @@ export { compileScope, matchesScope } from "./scope.js";
107
109
  export type { Scope, CompiledScope } from "./scope.js";
108
110
  export { validateAttrSchema } from "./attr-schema-validate.js";
109
111
  export type { AttrSchemaValidationResult } from "./attr-schema-validate.js";
110
- export { toSnakeCase, toKebabCase, pluralize, applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, resolveTableName, resolveColumnName, resolveTableSchema, resolveIndexName, primaryRdbSource, sourceAddressKey, buildNameMap, stripPackage, packageOfResolutionKey, } from "./naming.js";
112
+ export { toSnakeCase, toKebabCase, pluralize, pluralizeTableNameLegacy, applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, resolveTableName, resolveColumnName, resolveTableSchema, resolveIndexName, primaryRdbSource, sourceAddressKey, buildNameMap, stripPackage, packageOfResolutionKey, } from "./naming.js";
111
113
  export type { EntityNameMap, ColumnNamingStrategy } from "./naming.js";
112
114
  export { RETIRED_VOCABULARY, retiredAttr, retiredAttrValue, retiredSubType, retirementHint, retirementSuggestions, } from "./retired-vocabulary.js";
113
115
  export type { RetirementNote, RetiredEntry, VocabularyRewrite } from "./retired-vocabulary.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -117,6 +117,8 @@ export { buildTree } from "./parser-core.js";
117
117
  export { parseJson } from "./parser-json.js";
118
118
  // Serializer
119
119
  export { serializeJson, canonicalSerialize, canonicalSerializeEffective, serializeSharedDocument, inferAttrSubType } from "./serializer-json.js";
120
+ // Formatter (#304) — per-file canonical formatting, built on the serializer above.
121
+ export { formatMetadataFile } from "./fmt.js";
120
122
  // Super resolution helper (most resolution moved into parser; this is the lookup utility)
121
123
  export { resolveSuperRef } from "./super-resolve.js";
122
124
  // FR-032 (ADR-0032) — canonical reference expansion + FQN object matching.
@@ -141,7 +143,7 @@ export { compileScope, matchesScope } from "./scope.js";
141
143
  export { validateAttrSchema } from "./attr-schema-validate.js";
142
144
  // Naming — hoisted from runtime-ts in v0.2.3 so multiple consumers (runtime-ts, migrate-ts, codegen-ts)
143
145
  // share identical name resolution. See spec §4.1.
144
- export { toSnakeCase, toKebabCase, pluralize, applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, resolveTableName, resolveColumnName, resolveTableSchema, resolveIndexName, primaryRdbSource, sourceAddressKey, buildNameMap, stripPackage, packageOfResolutionKey, } from "./naming.js";
146
+ export { toSnakeCase, toKebabCase, pluralize, pluralizeTableNameLegacy, applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY, resolveTableName, resolveColumnName, resolveTableSchema, resolveIndexName, primaryRdbSource, sourceAddressKey, buildNameMap, stripPackage, packageOfResolutionKey, } from "./naming.js";
145
147
  // Retired vocabulary: the map the loader reads to explain a retirement, and the raw-document
146
148
  // rewriter `meta upgrade` drives from the SAME entries — so the error message and the fix
147
149
  // cannot drift apart.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/naming.d.ts CHANGED
@@ -29,6 +29,29 @@ export type ColumnNamingStrategy = "snake_case" | "literal" | "kebab-case";
29
29
  /** Single source of truth for the TS-port default. */
30
30
  export declare const DEFAULT_COLUMN_NAMING_STRATEGY: ColumnNamingStrategy;
31
31
  export declare function applyColumnNamingStrategy(name: string, strategy: ColumnNamingStrategy): string;
32
+ /**
33
+ * FROZEN — byte-for-byte the pre-fix suffix-only pluralization rule, with no
34
+ * already-plural detection. This is the DEFAULT PHYSICAL NAME derivation only:
35
+ * `resolveTableName`'s no-source fallback and `MetaSource.physicalName`'s step-4
36
+ * owner-name fallback, both reached only when metadata declares no explicit
37
+ * physical name. An adopter's live database was created with this rule; changing
38
+ * it would make `meta migrate` propose a rename for every already-plural entity
39
+ * name on the next run. Never call this for an API/code-surface name (REST paths,
40
+ * generated hook/query/finder/list names, DbSet/collection variable names) — those
41
+ * go through {@link pluralize}, which fixes the doubling this function
42
+ * deliberately still has.
43
+ */
44
+ export declare function pluralizeTableNameLegacy(s: string): string;
45
+ /**
46
+ * API/code-surface pluralization: REST collection/route paths, entity-descriptor
47
+ * URLs, generated hook/query/finder/list function names, DbSet/collection names —
48
+ * every generator-facing use. Adds already-plural detection ({@link isAlreadyPlural})
49
+ * on top of the historical suffix rule ({@link pluralizeTableNameLegacy}).
50
+ *
51
+ * NOT for default physical table/column name derivation — that fallback is frozen
52
+ * (see `pluralizeTableNameLegacy`) so an existing adopter database never sees a
53
+ * proposed rename.
54
+ */
32
55
  export declare function pluralize(s: string): string;
33
56
  /**
34
57
  * THE `@role: primary` source lookup for this package — and the one place the
@@ -1 +1 @@
1
- {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAQtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAWtE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC;AAE3E,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,EAAE,oBAAmC,CAAC;AAEjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAM9F;AAED,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAe3D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAgBzE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CASzD;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,QAAQ,GAAE,oBAAqD,GAC9D,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,gBAAgB,CAK9B,IAAI,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/E,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAWvE;AAED,2GAA2G;AAC3G,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,QAAQ,EAChB,QAAQ,GAAE,oBAAqD,GAC9D,aAAa,CAYf"}
1
+ {"version":3,"file":"naming.d.ts","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAQtD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AAWtE;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAI7D;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAG1D;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAK7C;AAED,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED;;;;;;;GAOG;AACH,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,SAAS,GAAG,YAAY,CAAC;AAE3E,sDAAsD;AACtD,eAAO,MAAM,8BAA8B,EAAE,oBAAmC,CAAC;AAEjF,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,oBAAoB,GAAG,MAAM,CAM9F;AA6BD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAI1D;AAED;;;;;;;;;GASG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3C;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4DG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAe3D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,SAAS,CAgBzE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,CAWzD;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,QAAQ,EACf,QAAQ,GAAE,oBAAqD,GAC9D,MAAM,CAKR;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,wBAAgB,gBAAgB,CAK9B,IAAI,EAAE;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GAC/E,MAAM,CASR;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAWvE;AAED,2GAA2G;AAC3G,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5B,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC7B;AAED,wBAAgB,YAAY,CAC1B,MAAM,EAAE,QAAQ,EAChB,QAAQ,GAAE,oBAAqD,GAC9D,aAAa,CAYf"}
package/dist/naming.js CHANGED
@@ -52,13 +52,66 @@ export function applyColumnNamingStrategy(name, strategy) {
52
52
  case "snake_case": return toSnakeCase(name);
53
53
  }
54
54
  }
55
- export function pluralize(s) {
55
+ /** The four letters that precede a genuinely SINGULAR "...s" ending in the common
56
+ * patterns this codebase's entity names hit — Status, Address, Bonus, Alias, Gas,
57
+ * Analysis. Anything else before a final "s" reads as already-plural. */
58
+ const ALREADY_PLURAL_EXCLUDED_PRECEDING_CHARS = new Set(["s", "u", "i", "a"]);
59
+ /**
60
+ * True when `s` already reads as a plural noun, so running it through the ordinary
61
+ * suffix rule would double it — the real defect this file exists to fix:
62
+ * `ProgramPurchaseStats` → `ProgramPurchaseStatses` shipped as six REST collection
63
+ * paths and TanStack hook names in an adopter's app.
64
+ *
65
+ * Heuristic, not a dictionary: a word ending in "s" is already-plural UNLESS the
66
+ * character immediately before that final "s" is one of s/u/i/a (case-insensitive).
67
+ * Covers Stats, Settings, Details, News, Analytics, Series, Photos; leaves Status,
68
+ * Address, Bonus, Alias, Gas, Analysis on the ordinary suffix path (unchanged).
69
+ *
70
+ * Known miss, deliberately not fixed here: a genuinely singular word ending in
71
+ * "...s" with none of those four letters before it reads as already-plural too —
72
+ * `Lens` → `Lens` (correct plural `Lenses`). Fixing that needs a real dictionary,
73
+ * which this function is not; the heuristic optimizes for the shape the doubling
74
+ * defect actually hits (entity names that are already a plural concept).
75
+ */
76
+ function isAlreadyPlural(s) {
77
+ if (!/s$/i.test(s) || s.length < 2)
78
+ return false;
79
+ return !ALREADY_PLURAL_EXCLUDED_PRECEDING_CHARS.has(s[s.length - 2].toLowerCase());
80
+ }
81
+ /**
82
+ * FROZEN — byte-for-byte the pre-fix suffix-only pluralization rule, with no
83
+ * already-plural detection. This is the DEFAULT PHYSICAL NAME derivation only:
84
+ * `resolveTableName`'s no-source fallback and `MetaSource.physicalName`'s step-4
85
+ * owner-name fallback, both reached only when metadata declares no explicit
86
+ * physical name. An adopter's live database was created with this rule; changing
87
+ * it would make `meta migrate` propose a rename for every already-plural entity
88
+ * name on the next run. Never call this for an API/code-surface name (REST paths,
89
+ * generated hook/query/finder/list names, DbSet/collection variable names) — those
90
+ * go through {@link pluralize}, which fixes the doubling this function
91
+ * deliberately still has.
92
+ */
93
+ export function pluralizeTableNameLegacy(s) {
56
94
  if (/(s|x|z|ch|sh)$/i.test(s))
57
95
  return s + "es";
58
96
  if (/[^aeiou]y$/i.test(s))
59
97
  return s.slice(0, -1) + "ies";
60
98
  return s + "s";
61
99
  }
100
+ /**
101
+ * API/code-surface pluralization: REST collection/route paths, entity-descriptor
102
+ * URLs, generated hook/query/finder/list function names, DbSet/collection names —
103
+ * every generator-facing use. Adds already-plural detection ({@link isAlreadyPlural})
104
+ * on top of the historical suffix rule ({@link pluralizeTableNameLegacy}).
105
+ *
106
+ * NOT for default physical table/column name derivation — that fallback is frozen
107
+ * (see `pluralizeTableNameLegacy`) so an existing adopter database never sees a
108
+ * proposed rename.
109
+ */
110
+ export function pluralize(s) {
111
+ if (isAlreadyPlural(s))
112
+ return s;
113
+ return pluralizeTableNameLegacy(s);
114
+ }
62
115
  /**
63
116
  * THE `@role: primary` source lookup for this package — and the one place the
64
117
  * primary-source DIVERGENCE refusal lives, so that every caller inherits it.
@@ -159,7 +212,9 @@ export function resolveTableName(entity) {
159
212
  const source = primaryRdbSource(entity);
160
213
  if (source !== undefined)
161
214
  return source.physicalName;
162
- return pluralize(toSnakeCase(entity.name));
215
+ // Frozen: this is a DEFAULT PHYSICAL name, not an API-surface name. See
216
+ // pluralizeTableNameLegacy's doc.
217
+ return pluralizeTableNameLegacy(toSnakeCase(entity.name));
163
218
  }
164
219
  export function resolveColumnName(field, strategy = DEFAULT_COLUMN_NAMING_STRATEGY) {
165
220
  // ADR-0039: resolving — a concrete field may inherit @column via extends.
@@ -1 +1 @@
1
- {"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"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"}
@@ -36,7 +36,8 @@ export declare class MetaSource extends MetaData {
36
36
  * 1. Kind-matching alias (e.g. @proc when @kind: "storedProc").
37
37
  * 2. Legacy @table for non-table kind (pre-1.0 fallback).
38
38
  * 3. Source's bare structural `name` via snake_case.
39
- * 4. Owning entity's name via pluralize(snake_case).
39
+ * 4. Owning entity's name via the frozen legacy pluralize(snake_case) —
40
+ * see pluralizeTableNameLegacy's doc for why it is frozen.
40
41
  *
41
42
  * Callers needing the legacy raw @table slot only should use `tableName`;
42
43
  * codegen / migrate / runtime should use `physicalName`.
@@ -1 +1 @@
1
- {"version":3,"file":"meta-source.d.ts","sourceRoot":"","sources":["../../../src/persistence/source/meta-source.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AA4BrD,qBAAa,UAAW,SAAQ,QAAQ;IACtC;;0DAEsD;IACtD,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAKlC;IAED;;;OAGG;IACH,IAAI,aAAa,IAAI,MAAM,CAI1B;IAED,kFAAkF;IAClF,IAAI,IAAI,IAAI,MAAM,CAIjB;IAED;;;;OAIG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAIhC;IAED;;;;OAIG;IACH,IAAI,WAAW,IAAI,OAAO,CAGzB;IAED;;;OAGG;IACH,UAAU,IAAI,OAAO;IAIrB,8DAA8D;IAC9D,UAAU,IAAI,OAAO;IAIrB;;;;;;;;;;OAUG;IACH,IAAI,YAAY,IAAI,MAAM,CAgCzB;CACF"}
1
+ {"version":3,"file":"meta-source.d.ts","sourceRoot":"","sources":["../../../src/persistence/source/meta-source.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AA4BrD,qBAAa,UAAW,SAAQ,QAAQ;IACtC;;0DAEsD;IACtD,IAAI,SAAS,IAAI,MAAM,GAAG,SAAS,CAKlC;IAED;;;OAGG;IACH,IAAI,aAAa,IAAI,MAAM,CAI1B;IAED,kFAAkF;IAClF,IAAI,IAAI,IAAI,MAAM,CAIjB;IAED;;;;OAIG;IACH,IAAI,OAAO,IAAI,MAAM,GAAG,SAAS,CAIhC;IAED;;;;OAIG;IACH,IAAI,WAAW,IAAI,OAAO,CAGzB;IAED;;;OAGG;IACH,UAAU,IAAI,OAAO;IAIrB,8DAA8D;IAC9D,UAAU,IAAI,OAAO;IAIrB;;;;;;;;;;;OAWG;IACH,IAAI,YAAY,IAAI,MAAM,CAiCzB;CACF"}
@@ -5,7 +5,7 @@
5
5
  //
6
6
  // Extends MetaData directly: no model wrapper, no metaOf() indirection.
7
7
  import { MetaData } from "../../shared/meta-data.js";
8
- import { pluralize, toSnakeCase } from "../../naming.js";
8
+ import { pluralizeTableNameLegacy, toSnakeCase } from "../../naming.js";
9
9
  import { SOURCE_ATTR_TABLE, SOURCE_ATTR_VIEW, SOURCE_ATTR_MATERIALIZED_VIEW, SOURCE_ATTR_PROC, SOURCE_ATTR_FUNCTION, SOURCE_ATTR_KIND, SOURCE_ATTR_ROLE, SOURCE_ATTR_SQL, SOURCE_ATTR_UNMANAGED, SOURCE_READ_ONLY_KINDS, DEFAULT_SOURCE_KIND, DEFAULT_SOURCE_ROLE, PHYSICAL_NAME_ATTR_BY_KIND, } from "./source-constants.js";
10
10
  /** Every kind-aware physical-name alias key, ordered for deterministic
11
11
  * iteration (matches the SOURCE_RDB_KINDS order). */
@@ -77,7 +77,8 @@ export class MetaSource extends MetaData {
77
77
  * 1. Kind-matching alias (e.g. @proc when @kind: "storedProc").
78
78
  * 2. Legacy @table for non-table kind (pre-1.0 fallback).
79
79
  * 3. Source's bare structural `name` via snake_case.
80
- * 4. Owning entity's name via pluralize(snake_case).
80
+ * 4. Owning entity's name via the frozen legacy pluralize(snake_case) —
81
+ * see pluralizeTableNameLegacy's doc for why it is frozen.
81
82
  *
82
83
  * Callers needing the legacy raw @table slot only should use `tableName`;
83
84
  * codegen / migrate / runtime should use `physicalName`.
@@ -105,10 +106,11 @@ export class MetaSource extends MetaData {
105
106
  return toSnakeCase(this.name);
106
107
  }
107
108
  // Step 4: owning entity's name via pluralize(snake_case). The MetaData
108
- // parent of a source is always the entity that declared it.
109
+ // parent of a source is always the entity that declared it. Frozen legacy
110
+ // rule — this is a DEFAULT PHYSICAL name, not an API-surface name.
109
111
  const owner = this.parent;
110
112
  if (owner !== undefined && owner.name !== "") {
111
- return pluralize(toSnakeCase(owner.name));
113
+ return pluralizeTableNameLegacy(toSnakeCase(owner.name));
112
114
  }
113
115
  return "";
114
116
  }
@@ -1 +1 @@
1
- {"version":3,"file":"meta-source.js","sourceRoot":"","sources":["../../../src/persistence/source/meta-source.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"meta-source.js","sourceRoot":"","sources":["../../../src/persistence/source/meta-source.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@metaobjectsdev/metadata",
3
- "version": "1.0.11",
3
+ "version": "1.0.13",
4
4
  "description": "Metamodel loader, types, and constants for the MetaObjects standard.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
package/src/errors.ts CHANGED
@@ -131,6 +131,13 @@ export const ERROR_CODES = [
131
131
  // same emitted record name even after package-qualification. Peer of
132
132
  // ERR_VAR_NOT_ON_PAYLOAD — a codegen-time (not loader) error.
133
133
  "ERR_PAYLOAD_NAME_COLLISION",
134
+ // Codegen: two DISTINCT entities/projections in one generation run pluralize to the
135
+ // SAME API-surface collection name (REST path, generated hook/query/finder/list
136
+ // names, DbSet/collection variable name) — e.g. "Address" and "Addresses" both
137
+ // resolving to "Addresses". A codegen-time (not loader) error, peer of
138
+ // ERR_PAYLOAD_NAME_COLLISION: refused rather than silently emitting a duplicate
139
+ // symbol / route / DbSet member.
140
+ "ERR_COLLECTION_NAME_COLLISION",
134
141
  "ERR_PARTIAL_UNRESOLVED",
135
142
  "ERR_REQUIRED_SLOT_UNUSED",
136
143
  "ERR_OUTPUT_TAG_MISSING",
package/src/fmt.ts ADDED
@@ -0,0 +1,160 @@
1
+ // meta fmt (#304) — format a single metadata FILE's own content.
2
+ //
3
+ // The canonical serializer (serializer-json.ts) already produces deterministic,
4
+ // cross-port byte-identical JSON for a loaded MetaData node — that is what the
5
+ // conformance corpora byte-match against. `meta fmt` surfaces it as a per-file
6
+ // formatter: each file is parsed STANDALONE (never merged with its siblings)
7
+ // and re-emitted via `canonicalSerialize`, so the output is strictly that
8
+ // file's own declared content — own-mode, declared-here layer only (ADR-0039).
9
+ //
10
+ // Two properties fall out of parsing a file standalone rather than loading the
11
+ // whole project and slicing the merged tree:
12
+ //
13
+ // - A cross-file `extends` ref (the common `extends: "BaseEntity"` pattern,
14
+ // where the base lives in another file) is never an error here: super
15
+ // resolution is deferred and this module never runs the second pass that
16
+ // would fail an UNRESOLVED ref. Own-mode serialization only needs the raw
17
+ // `superRef` string, never the resolved target.
18
+ // - A file declaring `overlay: true` ANYWHERE in its tree is never
19
+ // formatted — reported as `overlay: true` so a caller can leave it
20
+ // untouched rather than guess at a merge. This is true REGARDLESS of
21
+ // whether a same-(type,name) base exists elsewhere in the file: a
22
+ // formatter must never change STRUCTURE, and buildTree's ordinary
23
+ // find-or-reuse behavior would happily fold a plain declaration and a
24
+ // same-file `overlay: true` redeclaration into one merged node —
25
+ // silently dropping the overlay marker from the output. Checking the
26
+ // raw document for `overlay: true` BEFORE buildTree ever runs (see
27
+ // `hasOverlayDeclaration` below) catches that case too, not just the
28
+ // no-local-target one buildTree's own ERR_OVERLAY_NO_TARGET reports. A
29
+ // MIXED file (plain + overlay declarations together, anywhere) is
30
+ // reported as `overlay: true` too — fmt does not partially format a file.
31
+ import { buildTree } from "./parser-core.js";
32
+ import { canonicalSerialize } from "./serializer-json.js";
33
+ import type { TypeRegistry } from "./registry.js";
34
+ import { JSON_KEY_SCHEMA, RESERVED_KEY_CHILDREN, RESERVED_KEY_OVERLAY } from "./shared/structural.js";
35
+
36
+ export interface FormatFileOptions {
37
+ /** The registry this project loads against — core providers plus any the
38
+ * project's own config registers, so a custom attr never false-positives. */
39
+ readonly registry: TypeRegistry;
40
+ /** ADR-0023 strict-attr loading. Default false (lenient), matching `meta gen`
41
+ * rather than `meta verify` — fmt reformats whatever already loads; an
42
+ * unrecognized `@attr` is `verify`'s job to flag, not fmt's to refuse on. */
43
+ readonly strict?: boolean;
44
+ /** The source id this file's nodes record provenance under — normally the
45
+ * same id the full project load would use (basename, or a dependency's
46
+ * `dep:<name>/<artifact>` id). Used only for error messages here. */
47
+ readonly sourceId: string;
48
+ }
49
+
50
+ export type FormatFileResult =
51
+ | { readonly ok: true; readonly text: string }
52
+ | { readonly ok: false; readonly overlay: boolean; readonly message: string };
53
+
54
+ /** The code `buildTree`'s overlay drain raises when a queued `overlay: true`
55
+ * declaration finds no same-(type,name) base in the tree being built — here,
56
+ * always because the base lives in a file this standalone parse never sees.
57
+ * Kept as a defensive second signal; `hasOverlayDeclaration` below is what
58
+ * actually decides the common case (a local base DOES exist). */
59
+ const OVERLAY_NO_TARGET_CODE = "ERR_OVERLAY_NO_TARGET";
60
+
61
+ /**
62
+ * Whether `doc` (an already-`JSON.parse`d canonical document) declares an
63
+ * `overlay: true` node anywhere in its tree — the top-level declaration
64
+ * itself, or any descendant reached by walking `children` arrays.
65
+ *
66
+ * A purely STRUCTURAL check, independent of the registry and run BEFORE
67
+ * `buildTree`: fmt must never attempt a same-file merge of a plain
68
+ * declaration and an `overlay: true` redeclaration of the same (type, name)
69
+ * — buildTree's ordinary find-or-reuse behavior would silently fold the two
70
+ * into one node, dropping the overlay marker, which is exactly the
71
+ * "formatter changes structure" outcome `meta fmt` must never produce. This
72
+ * catches that case (a local base exists) as well as the no-target one
73
+ * buildTree's own `ERR_OVERLAY_NO_TARGET` reports — the two are the same
74
+ * refusal from a caller's point of view: this file is not fmt's to format.
75
+ */
76
+ function hasOverlayDeclaration(doc: unknown): boolean {
77
+ if (typeof doc !== "object" || doc === null || Array.isArray(doc)) return false;
78
+ for (const [key, body] of Object.entries(doc as Record<string, unknown>)) {
79
+ if (key === JSON_KEY_SCHEMA) continue;
80
+ if (typeof body !== "object" || body === null || Array.isArray(body)) continue;
81
+ if (bodyHasOverlay(body as Record<string, unknown>)) return true;
82
+ }
83
+ return false;
84
+ }
85
+
86
+ function bodyHasOverlay(body: Record<string, unknown>): boolean {
87
+ const children = body[RESERVED_KEY_CHILDREN];
88
+ if (!Array.isArray(children)) return false;
89
+ for (const child of children) {
90
+ if (typeof child !== "object" || child === null || Array.isArray(child)) continue;
91
+ for (const childBody of Object.values(child as Record<string, unknown>)) {
92
+ if (typeof childBody !== "object" || childBody === null || Array.isArray(childBody)) continue;
93
+ const cb = childBody as Record<string, unknown>;
94
+ if (cb[RESERVED_KEY_OVERLAY] === true) return true;
95
+ if (bodyHasOverlay(cb)) return true;
96
+ }
97
+ }
98
+ return false;
99
+ }
100
+
101
+ /**
102
+ * Format one file's own content into canonical JSON. Parses `content`
103
+ * standalone (no `intoRoot` — never merged with any other file) and, on a
104
+ * clean parse, returns the canonical serialization of the resulting file
105
+ * root. Never throws: a JSON syntax error, a structural parse error, or any
106
+ * `overlay: true` declaration all come back as `{ ok: false }`.
107
+ */
108
+ export function formatMetadataFile(content: string, opts: FormatFileOptions): FormatFileResult {
109
+ // Strip a UTF-8 BOM before parsing (mirrors parseJson's own front-end,
110
+ // parser-json.ts) — a BOM-prefixed file is otherwise a flat JSON.parse
111
+ // syntax error, and Java-authored files often carry one.
112
+ const normalized = content.charCodeAt(0) === 0xfeff ? content.slice(1) : content;
113
+
114
+ let parsed: unknown;
115
+ try {
116
+ parsed = JSON.parse(normalized);
117
+ } catch (err) {
118
+ return {
119
+ ok: false,
120
+ overlay: false,
121
+ message: `invalid JSON: ${err instanceof Error ? err.message : String(err)}`,
122
+ };
123
+ }
124
+
125
+ if (hasOverlayDeclaration(parsed)) {
126
+ return {
127
+ ok: false,
128
+ overlay: true,
129
+ message: "this file declares an overlay fmt cannot resolve standalone",
130
+ };
131
+ }
132
+
133
+ try {
134
+ const result = buildTree(parsed, {
135
+ registry: opts.registry,
136
+ strict: opts.strict ?? false,
137
+ sourceName: opts.sourceId,
138
+ // Never resolved here — see module header. A cross-file `extends` must
139
+ // not become an error just because this file is formatted in isolation.
140
+ deferSuperResolution: true,
141
+ });
142
+
143
+ if (result.errors.length > 0) {
144
+ const overlay = result.errors.some((e) => e.code === OVERLAY_NO_TARGET_CODE);
145
+ return {
146
+ ok: false,
147
+ overlay,
148
+ message: result.errors.map((e) => e.message).join("; "),
149
+ };
150
+ }
151
+
152
+ return { ok: true, text: canonicalSerialize(result.root) };
153
+ } catch (err) {
154
+ return {
155
+ ok: false,
156
+ overlay: false,
157
+ message: err instanceof Error ? err.message : String(err),
158
+ };
159
+ }
160
+ }
package/src/index.ts CHANGED
@@ -243,6 +243,10 @@ export { parseJson } from "./parser-json.js";
243
243
  export { serializeJson, canonicalSerialize, canonicalSerializeEffective, serializeSharedDocument, inferAttrSubType } from "./serializer-json.js";
244
244
  export type { SerializeOptions } from "./serializer-json.js";
245
245
 
246
+ // Formatter (#304) — per-file canonical formatting, built on the serializer above.
247
+ export { formatMetadataFile } from "./fmt.js";
248
+ export type { FormatFileOptions, FormatFileResult } from "./fmt.js";
249
+
246
250
  // Super resolution helper (most resolution moved into parser; this is the lookup utility)
247
251
  export { resolveSuperRef } from "./super-resolve.js";
248
252
 
@@ -298,7 +302,7 @@ export type { AttrSchemaValidationResult } from "./attr-schema-validate.js";
298
302
  // Naming — hoisted from runtime-ts in v0.2.3 so multiple consumers (runtime-ts, migrate-ts, codegen-ts)
299
303
  // share identical name resolution. See spec §4.1.
300
304
  export {
301
- toSnakeCase, toKebabCase, pluralize,
305
+ toSnakeCase, toKebabCase, pluralize, pluralizeTableNameLegacy,
302
306
  applyColumnNamingStrategy, DEFAULT_COLUMN_NAMING_STRATEGY,
303
307
  resolveTableName, resolveColumnName, resolveTableSchema, resolveIndexName,
304
308
  primaryRdbSource, sourceAddressKey,
package/src/naming.ts CHANGED
@@ -73,12 +73,66 @@ export function applyColumnNamingStrategy(name: string, strategy: ColumnNamingSt
73
73
  }
74
74
  }
75
75
 
76
- export function pluralize(s: string): string {
76
+ /** The four letters that precede a genuinely SINGULAR "...s" ending in the common
77
+ * patterns this codebase's entity names hit — Status, Address, Bonus, Alias, Gas,
78
+ * Analysis. Anything else before a final "s" reads as already-plural. */
79
+ const ALREADY_PLURAL_EXCLUDED_PRECEDING_CHARS = new Set(["s", "u", "i", "a"]);
80
+
81
+ /**
82
+ * True when `s` already reads as a plural noun, so running it through the ordinary
83
+ * suffix rule would double it — the real defect this file exists to fix:
84
+ * `ProgramPurchaseStats` → `ProgramPurchaseStatses` shipped as six REST collection
85
+ * paths and TanStack hook names in an adopter's app.
86
+ *
87
+ * Heuristic, not a dictionary: a word ending in "s" is already-plural UNLESS the
88
+ * character immediately before that final "s" is one of s/u/i/a (case-insensitive).
89
+ * Covers Stats, Settings, Details, News, Analytics, Series, Photos; leaves Status,
90
+ * Address, Bonus, Alias, Gas, Analysis on the ordinary suffix path (unchanged).
91
+ *
92
+ * Known miss, deliberately not fixed here: a genuinely singular word ending in
93
+ * "...s" with none of those four letters before it reads as already-plural too —
94
+ * `Lens` → `Lens` (correct plural `Lenses`). Fixing that needs a real dictionary,
95
+ * which this function is not; the heuristic optimizes for the shape the doubling
96
+ * defect actually hits (entity names that are already a plural concept).
97
+ */
98
+ function isAlreadyPlural(s: string): boolean {
99
+ if (!/s$/i.test(s) || s.length < 2) return false;
100
+ return !ALREADY_PLURAL_EXCLUDED_PRECEDING_CHARS.has(s[s.length - 2]!.toLowerCase());
101
+ }
102
+
103
+ /**
104
+ * FROZEN — byte-for-byte the pre-fix suffix-only pluralization rule, with no
105
+ * already-plural detection. This is the DEFAULT PHYSICAL NAME derivation only:
106
+ * `resolveTableName`'s no-source fallback and `MetaSource.physicalName`'s step-4
107
+ * owner-name fallback, both reached only when metadata declares no explicit
108
+ * physical name. An adopter's live database was created with this rule; changing
109
+ * it would make `meta migrate` propose a rename for every already-plural entity
110
+ * name on the next run. Never call this for an API/code-surface name (REST paths,
111
+ * generated hook/query/finder/list names, DbSet/collection variable names) — those
112
+ * go through {@link pluralize}, which fixes the doubling this function
113
+ * deliberately still has.
114
+ */
115
+ export function pluralizeTableNameLegacy(s: string): string {
77
116
  if (/(s|x|z|ch|sh)$/i.test(s)) return s + "es";
78
117
  if (/[^aeiou]y$/i.test(s)) return s.slice(0, -1) + "ies";
79
118
  return s + "s";
80
119
  }
81
120
 
121
+ /**
122
+ * API/code-surface pluralization: REST collection/route paths, entity-descriptor
123
+ * URLs, generated hook/query/finder/list function names, DbSet/collection names —
124
+ * every generator-facing use. Adds already-plural detection ({@link isAlreadyPlural})
125
+ * on top of the historical suffix rule ({@link pluralizeTableNameLegacy}).
126
+ *
127
+ * NOT for default physical table/column name derivation — that fallback is frozen
128
+ * (see `pluralizeTableNameLegacy`) so an existing adopter database never sees a
129
+ * proposed rename.
130
+ */
131
+ export function pluralize(s: string): string {
132
+ if (isAlreadyPlural(s)) return s;
133
+ return pluralizeTableNameLegacy(s);
134
+ }
135
+
82
136
  /**
83
137
  * THE `@role: primary` source lookup for this package — and the one place the
84
138
  * primary-source DIVERGENCE refusal lives, so that every caller inherits it.
@@ -183,7 +237,9 @@ export function resolveTableName(entity: MetaData): string {
183
237
  // a read-only primary source is the right answer.
184
238
  const source = primaryRdbSource(entity);
185
239
  if (source !== undefined) return source.physicalName;
186
- return pluralize(toSnakeCase(entity.name));
240
+ // Frozen: this is a DEFAULT PHYSICAL name, not an API-surface name. See
241
+ // pluralizeTableNameLegacy's doc.
242
+ return pluralizeTableNameLegacy(toSnakeCase(entity.name));
187
243
  }
188
244
 
189
245
  export function resolveColumnName(
@@ -6,7 +6,7 @@
6
6
  // Extends MetaData directly: no model wrapper, no metaOf() indirection.
7
7
 
8
8
  import { MetaData } from "../../shared/meta-data.js";
9
- import { pluralize, toSnakeCase } from "../../naming.js";
9
+ import { pluralizeTableNameLegacy, toSnakeCase } from "../../naming.js";
10
10
  import {
11
11
  SOURCE_ATTR_TABLE,
12
12
  SOURCE_ATTR_VIEW,
@@ -101,7 +101,8 @@ export class MetaSource extends MetaData {
101
101
  * 1. Kind-matching alias (e.g. @proc when @kind: "storedProc").
102
102
  * 2. Legacy @table for non-table kind (pre-1.0 fallback).
103
103
  * 3. Source's bare structural `name` via snake_case.
104
- * 4. Owning entity's name via pluralize(snake_case).
104
+ * 4. Owning entity's name via the frozen legacy pluralize(snake_case) —
105
+ * see pluralizeTableNameLegacy's doc for why it is frozen.
105
106
  *
106
107
  * Callers needing the legacy raw @table slot only should use `tableName`;
107
108
  * codegen / migrate / runtime should use `physicalName`.
@@ -131,10 +132,11 @@ export class MetaSource extends MetaData {
131
132
  }
132
133
 
133
134
  // Step 4: owning entity's name via pluralize(snake_case). The MetaData
134
- // parent of a source is always the entity that declared it.
135
+ // parent of a source is always the entity that declared it. Frozen legacy
136
+ // rule — this is a DEFAULT PHYSICAL name, not an API-surface name.
135
137
  const owner = this.parent;
136
138
  if (owner !== undefined && owner.name !== "") {
137
- return pluralize(toSnakeCase(owner.name));
139
+ return pluralizeTableNameLegacy(toSnakeCase(owner.name));
138
140
  }
139
141
 
140
142
  return "";