@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 +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +7 -0
- package/dist/errors.js.map +1 -1
- package/dist/fmt.d.ts +31 -0
- package/dist/fmt.d.ts.map +1 -0
- package/dist/fmt.js +144 -0
- package/dist/fmt.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/naming.d.ts +23 -0
- package/dist/naming.d.ts.map +1 -1
- package/dist/naming.js +57 -2
- package/dist/naming.js.map +1 -1
- package/dist/persistence/source/meta-source.d.ts +2 -1
- package/dist/persistence/source/meta-source.d.ts.map +1 -1
- package/dist/persistence/source/meta-source.js +6 -4
- package/dist/persistence/source/meta-source.js.map +1 -1
- package/package.json +1 -1
- package/src/errors.ts +7 -0
- package/src/fmt.ts +160 -0
- package/src/index.ts +5 -1
- package/src/naming.ts +58 -2
- package/src/persistence/source/meta-source.ts +6 -4
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];
|
package/dist/errors.d.ts.map
CHANGED
|
@@ -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,
|
|
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",
|
package/dist/errors.js.map
CHANGED
|
@@ -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":"AAAA,+CAA+C;AAI/C,4FAA4F;AAC5F,kFAAkF;AAClF,yDAAyD;AACzD,4FAA4F;AAC5F,2EAA2E;AAC3E,0FAA0F;AAC1F,EAAE;AACF,oFAAoF;AACpF,uFAAuF;AACvF,mFAAmF;AACnF,uFAAuF;AACvF,uFAAuF;AACvF,0BAA0B;AAC1B,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB,0BAA0B;IAC1B,uFAAuF;IACvF,uFAAuF;IACvF,wFAAwF;IACxF,iFAAiF;IACjF,sBAAsB;IACtB,kBAAkB;IAClB,qBAAqB;IACrB,iFAAiF;IACjF,qFAAqF;IACrF,qFAAqF;IACrF,gFAAgF;IAChF,oFAAoF;IACpF,oDAAoD;IACpD,EAAE;IACF,qFAAqF;IACrF,kFAAkF;IAClF,6EAA6E;IAC7E,+BAA+B;IAC/B,qBAAqB;IACrB,oBAAoB;IACpB,sBAAsB;IACtB,6EAA6E;IAC7E,0EAA0E;IAC1E,6BAA6B;IAC7B,iEAAiE;IACjE,oEAAoE;IACpE,gBAAgB;IAChB,4BAA4B;IAC5B,qEAAqE;IACrE,iEAAiE;IACjE,0BAA0B;IAC1B,oEAAoE;IACpE,+DAA+D;IAC/D,sCAAsC;IACtC,0EAA0E;IAC1E,uEAAuE;IACvE,gDAAgD;IAChD,2BAA2B;IAC3B,wEAAwE;IACxE,2EAA2E;IAC3E,4EAA4E;IAC5E,gCAAgC;IAChC,iCAAiC;IACjC,2BAA2B;IAC3B,0EAA0E;IAC1E,6EAA6E;IAC7E,wEAAwE;IACxE,8EAA8E;IAC9E,6EAA6E;IAC7E,8EAA8E;IAC9E,uBAAuB;IACvB,kBAAkB;IAClB,oBAAoB;IACpB,4BAA4B;IAC5B,+BAA+B;IAC/B,2BAA2B;IAC3B,iCAAiC;IACjC,4BAA4B;IAC5B,0BAA0B;IAC1B,oBAAoB;IACpB,2BAA2B;IAC3B,4BAA4B;IAC5B,uBAAuB;IACvB,oBAAoB;IACpB,oBAAoB;IACpB,2EAA2E;IAC3E,uEAAuE;IACvE,wEAAwE;IACxE,uEAAuE;IACvE,+DAA+D;IAC/D,oBAAoB;IACpB,uEAAuE;IACvE,2EAA2E;IAC3E,0EAA0E;IAC1E,wDAAwD;IACxD,wBAAwB;IACxB,wEAAwE;IACxE,6EAA6E;IAC7E,2EAA2E;IAC3E,oEAAoE;IACpE,qEAAqE;IACrE,uEAAuE;IACvE,oDAAoD;IACpD,6BAA6B;IAC7B,8EAA8E;IAC9E,wEAAwE;IACxE,6EAA6E;IAC7E,8EAA8E;IAC9E,2EAA2E;IAC3E,2EAA2E;IAC3E,yEAAyE;IACzE,+BAA+B;IAC/B,0EAA0E;IAC1E,2EAA2E;IAC3E,wEAAwE;IACxE,uEAAuE;IACvE,0EAA0E;IAC1E,sEAAsE;IACtE,sDAAsD;IACtD,kCAAkC;IAClC,oCAAoC;IACpC,sBAAsB;IACtB,+EAA+E;IAC/E,iFAAiF;IACjF,gFAAgF;IAChF,0BAA0B;IAC1B,iFAAiF;IACjF,2EAA2E;IAC3E,uBAAuB;IACvB,wBAAwB;IACxB,+EAA+E;IAC/E,qEAAqE;IACrE,8DAA8D;IAC9D,4BAA4B;IAC5B,oFAAoF;IACpF,gFAAgF;IAChF,+EAA+E;IAC/E,uEAAuE;IACvE,gFAAgF;IAChF,iCAAiC;IACjC,+BAA+B;IAC/B,wBAAwB;IACxB,0BAA0B;IAC1B,wBAAwB;IACxB,qBAAqB;IACrB,6BAA6B;IAC7B,gCAAgC;IAChC,wEAAwE;IACxE,2EAA2E;IAC3E,qCAAqC;IACrC,2EAA2E;IAC3E,mEAAmE;IACnE,0EAA0E;IAC1E,gEAAgE;IAChE,2BAA2B;IAC3B,qFAAqF;IACrF,mBAAmB;IACnB,uBAAuB;IACvB,6BAA6B;IAC7B,6EAA6E;IAC7E,iCAAiC;IACjC,4BAA4B;IAC5B,6DAA6D;IAC7D,iCAAiC;IACjC,0BAA0B;IAC1B,+BAA+B;IAC/B,4DAA4D;IAC5D,8BAA8B;IAC9B,oCAAoC;IACpC,wCAAwC;IACxC,yDAAyD;IACzD,mCAAmC;IACnC,mCAAmC;IACnC,iCAAiC;IACjC,uCAAuC;IACvC,uEAAuE;IACvE,oEAAoE;IACpE,mBAAmB;IACnB,0EAA0E;IAC1E,qEAAqE;IACrE,oBAAoB;IACpB,4EAA4E;IAC5E,yEAAyE;IACzE,oCAAoC;IACpC,uEAAuE;IACvE,uEAAuE;IACvE,+CAA+C;IAC/C,kCAAkC;IAClC,+EAA+E;IAC/E,+EAA+E;IAC/E,iFAAiF;IACjF,4EAA4E;IAC5E,4EAA4E;IAC5E,kFAAkF;IAClF,wEAAwE;IACxE,0BAA0B;IAC1B,yEAAyE;IACzE,qEAAqE;IACrE,uEAAuE;IACvE,sDAAsD;IACtD,+BAA+B;IAC/B,8EAA8E;IAC9E,8EAA8E;IAC9E,qBAAqB;IACrB,0EAA0E;IAC1E,6EAA6E;IAC7E,+EAA+E;IAC/E,6EAA6E;IAC7E,2EAA2E;IAC3E,+BAA+B;IAC/B,gFAAgF;IAChF,gFAAgF;IAChF,6EAA6E;IAC7E,iFAAiF;IACjF,2DAA2D;IAC3D,kCAAkC;IAClC,mFAAmF;IACnF,+EAA+E;IAC/E,mFAAmF;IACnF,qEAAqE;IACrE,mBAAmB;IACnB,kFAAkF;IAClF,kFAAkF;IAClF,6EAA6E;IAC7E,iFAAiF;IACjF,mEAAmE;IACnE,0CAA0C;IAC1C,8EAA8E;IAC9E,+EAA+E;IAC/E,+BAA+B;IAC/B,2CAA2C;IAC3C,8EAA8E;IAC9E,+EAA+E;IAC/E,4EAA4E;IAC5E,iFAAiF;IACjF,4BAA4B;IAC5B,8EAA8E;IAC9E,gFAAgF;IAChF,uBAAuB;IACvB,oEAAoE;IACpE,qEAAqE;IACrE,gEAAgE;IAChE,6BAA6B;IAC7B,wEAAwE;IACxE,qEAAqE;IACrE,0EAA0E;IAC1E,+BAA+B;IAC/B,uEAAuE;IACvE,2EAA2E;IAC3E,2EAA2E;IAC3E,+CAA+C;IAC/C,2BAA2B;IAC3B,4EAA4E;IAC5E,0EAA0E;IAC1E,2EAA2E;IAC3E,6EAA6E;IAC7E,kCAAkC;IAClC,+EAA+E;IAC/E,2EAA2E;IAC3E,8EAA8E;IAC9E,6EAA6E;IAC7E,4BAA4B;IAC5B,8BAA8B;IAC9B,iEAAiE;IACjE,mDAAmD;IACnD,uBAAuB;IACvB,2EAA2E;IAC3E,+CAA+C;IAC/C,6BAA6B;IAC7B,uEAAuE;IACvE,4DAA4D;IAC5D,2BAA2B;IAC3B,8EAA8E;IAC9E,sEAAsE;IACtE,0BAA0B;IAC1B,qFAAqF;IACrF,kFAAkF;IAClF,qFAAqF;IACrF,gFAAgF;IAChF,qBAAqB;IACrB,mTAAmT;IACnT,8GAA8G;IAC9G,+BAA+B;IAC/B,uSAAuS;IACvS,+BAA+B;IAC/B,kFAAkF;IAClF,wBAAwB;IACxB,2BAA2B;IAC3B,mFAAmF;IACnF,qFAAqF;IACrF,4EAA4E;IAC5E,iCAAiC;IACjC,mFAAmF;IACnF,wEAAwE;IACxE,+BAA+B;IAC/B,kEAAkE;IAClE,+BAA+B;IAC/B,mFAAmF;IACnF,oFAAoF;IACpF,oDAAoD;IACpD,kCAAkC;IAClC,gFAAgF;IAChF,uCAAuC;IACvC,sFAAsF;IACtF,+BAA+B;IAC/B,+BAA+B;IAC/B,aAAa;CACL,CAAC;AAEX,kEAAkE;AAClE,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,0EAA0E;IAC1E,kDAAkD;IAClD,4BAA4B;IAC5B,oEAAoE;IACpE,uEAAuE;IACvE,+DAA+D;IAC/D,aAAa;IACb,2EAA2E;IAC3E,4EAA4E;IAC5E,iCAAiC;IACjC,uEAAuE;IACvE,wEAAwE;IACxE,0EAA0E;IAC1E,8BAA8B;IAC9B,+BAA+B;IAC/B,wEAAwE;IACxE,8DAA8D;IAC9D,wEAAwE;IACxE,uEAAuE;IACvE,oEAAoE;IACpE,4DAA4D;IAC5D,6BAA6B;IAC7B,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,6EAA6E;IAC7E,4EAA4E;IAC5E,gFAAgF;IAChF,+BAA+B;CACvB,CAAC;AAKX;;;;;;;;;;;;;;GAcG;AACH,MAAM,OAAO,UAAW,SAAQ,KAAK;IACnC,0FAA0F;IAC1F,0FAA0F;IAC1F,8EAA8E;IACrE,IAAI,CAA4B;IAChC,MAAM,CAAc;IACpB,WAAW,CAAY;IACvB,OAAO,CAAU;IACjB,IAAI,CAAe;IAE5B,YACE,OAAe,EACf,IAMC;QAED,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACtB,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;QAC1B,wDAAwD;QACxD,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YAClC,IAAmC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;QACtE,CAAC;QACD,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAC9B,IAA6B,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QACxD,CAAC;QACD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC3B,IAA+B,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QACpD,CAAC;IACH,CAAC;CACF;AAED;;;;;GAKG;AACH,MAAM,OAAO,cAAe,SAAQ,KAAK;IAC9B,IAAI,CAAwB;IAErC,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,gBAAgB,CAAC;QAC7B,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC;IACzB,CAAC;CACF"}
|
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
|
package/dist/fmt.js.map
ADDED
|
@@ -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";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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":"AAAA,yDAAyD;AACzD,EAAE;AACF,wEAAwE;AACxE,0EAA0E;AAC1E,yEAAyE;AACzE,EAAE;AACF,mDAAmD;AACnD,uDAAuD;AAiBvD,mEAAmE;AACnE,cAAc,wBAAwB,CAAC;AACvC,cAAc,wBAAwB,CAAC;AACvC,cAAc,mCAAmC,CAAC;AAClD,cAAc,iCAAiC,CAAC;AAChD,6EAA6E;AAC7E,iFAAiF;AACjF,sEAAsE;AACtE,OAAO,EACL,eAAe,EACf,oBAAoB,EACpB,qBAAqB,GACtB,MAAM,2CAA2C,CAAC;AACnD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,yCAAyC,CAAC;AACxD,cAAc,uCAAuC,CAAC;AACtD,cAAc,iCAAiC,CAAC;AAChD,cAAc,6CAA6C,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,wCAAwC,CAAC;AACzE,8EAA8E;AAC9E,0DAA0D;AAC1D,OAAO,EACL,YAAY,EACZ,kBAAkB,EAClB,aAAa,GACd,MAAM,qCAAqC,CAAC;AAC7C,cAAc,+CAA+C,CAAC;AAC9D,cAAc,iCAAiC,CAAC;AAChD,cAAc,0CAA0C,CAAC;AACzD,cAAc,0CAA0C,CAAC;AACzD,cAAc,kCAAkC,CAAC;AACjD,cAAc,kCAAkC,CAAC;AACjD,cAAc,uCAAuC,CAAC;AACtD,cAAc,2CAA2C,CAAC;AAE1D,8DAA8D;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGjD,sBAAsB;AACtB,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEjD,mFAAmF;AACnF,+EAA+E;AAC/E,2EAA2E;AAC3E,uDAAuD;AACvD,OAAO,EACL,UAAU,EACV,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,GACjB,MAAM,yBAAyB,CAAC;AAEjC,oBAAoB;AACpB,OAAO,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AACvD,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AAEpD,0EAA0E;AAC1E,OAAO,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oCAAoC,CAAC;AAEvE,OAAO,EACL,mBAAmB,EACnB,0BAA0B,GAC3B,MAAM,wCAAwC,CAAC;AAEhD,oCAAoC;AACpC,OAAO,EACL,YAAY,EACZ,mBAAmB,EACnB,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,kCAAkC,CAAC;AAC1C,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,MAAM,4BAA4B,CAAC;AAEvD,4EAA4E;AAC5E,mCAAmC;AACnC,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,uBAAuB,EACvB,0BAA0B,GAC3B,MAAM,kDAAkD,CAAC;AAE1D,eAAe;AACf,OAAO,EAAE,gBAAgB,EAAE,MAAM,0CAA0C,CAAC;AAC5E,gCAAgC;AAChC,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAEpG,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,4BAA4B,GAC7B,MAAM,uDAAuD,CAAC;AAC/D,gFAAgF;AAChF,OAAO,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,0CAA0C,CAAC;AAE/F,qCAAqC;AACrC,OAAO,EACL,aAAa,EACb,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,oBAAoB,EACpB,kBAAkB,GACnB,MAAM,oCAAoC,CAAC;AAE5C,2BAA2B;AAC3B,OAAO,EAAE,UAAU,EAAE,MAAM,qCAAqC,CAAC;AACjE,kCAAkC;AAClC,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,EAClB,eAAe,GAChB,MAAM,qCAAqC,CAAC;AAC7C,sDAAsD;AACtD,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,4BAA4B;AAC5B,OAAO,EAAE,QAAQ,EAAE,MAAM,kCAAkC,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,sCAAsC,CAAC;AAsBlE,WAAW;AACX,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEvE,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEtF,gFAAgF;AAChF,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAE/D,sFAAsF;AACtF,OAAO,EAAE,qBAAqB,EAAE,oBAAoB,EAAE,mBAAmB,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC7H,8EAA8E;AAC9E,kFAAkF;AAClF,qFAAqF;AACrF,OAAO,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAGjE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AAEpE,6EAA6E;AAC7E,0EAA0E;AAC1E,yEAAyE;AACzE,OAAO,EACL,mBAAmB,EACnB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,GACxB,MAAM,2BAA2B,CAAC;AAGnC,4EAA4E;AAC5E,+EAA+E;AAC/E,uEAAuE;AACvE,6EAA6E;AAC7E,8EAA8E;AAC9E,0FAA0F;AAC1F,OAAO,EAAE,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAEvE,sBAAsB;AACtB,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,0BAA0B;AAC1B,OAAO,EACL,UAAU,EACV,iBAAiB,EAAE,aAAa,EAAE,cAAc,EAAE,gBAAgB,EAClE,gBAAgB,EAAE,cAAc,EAAE,gBAAgB,GACnD,MAAM,gBAAgB,CAAC;AAGxB,oCAAoC;AACpC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGpE,sEAAsE;AACtE,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAErE,uDAAuD;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAE7C,aAAa;AACb,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAGjJ,0FAA0F;AAC1F,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAErD,2EAA2E;AAC3E,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,kBAAkB,CAAC;AAExI,mBAAmB;AACnB,OAAO,EAAE,cAAc,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAIpF,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;AAGpE,0EAA0E;AAC1E,wEAAwE;AACxE,6EAA6E;AAC7E,sEAAsE;AACtE,yDAAyD;AACzD,OAAO,EACL,aAAa,EACb,QAAQ,EACR,UAAU,GACX,MAAM,uBAAuB,CAAC;AAE/B,SAAS;AACT,OAAO,EAAE,UAAU,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AActE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,4EAA4E;AAC5E,0EAA0E;AAC1E,wCAAwC;AACxC,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAGxD,8CAA8C;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAG/D,wGAAwG;AACxG,kDAAkD;AAClD,OAAO,EACL,WAAW,EAAE,WAAW,EAAE,SAAS,
|
|
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
|
package/dist/naming.d.ts.map
CHANGED
|
@@ -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,
|
|
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
|
-
|
|
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
|
-
|
|
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.
|
package/dist/naming.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming.js","sourceRoot":"","sources":["../src/naming.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,0CAA0C,CAAC;AAElD,oFAAoF;AACpF,qFAAqF;AACrF,qFAAqF;AACrF,sFAAsF;AACtF,mFAAmF;AACnF,sFAAsF;AACtF,8EAA8E;AAC9E,OAAO,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;;GAMG;AACH,MAAM,UAAU,YAAY,CAAC,IAAwB;IACnD,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAChD,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACxE,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,MAAM,GAAG,GAAG,GAAG,CAAC,WAAW,CAAC,iBAAiB,CAAC,CAAC;IAC/C,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,CAAC;SACL,OAAO,CAAC,uBAAuB,EAAE,OAAO,CAAC;SACzC,OAAO,CAAC,oBAAoB,EAAE,OAAO,CAAC;SACtC,WAAW,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,CAAS;IACnC,OAAO,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;AAC3C,CAAC;AAYD,sDAAsD;AACtD,MAAM,CAAC,MAAM,8BAA8B,GAAyB,YAAY,CAAC;AAEjF,MAAM,UAAU,yBAAyB,CAAC,IAAY,EAAE,QAA8B;IACpF,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,SAAS,CAAC,CAAK,OAAO,IAAI,CAAC;QAChC,KAAK,YAAY,CAAC,CAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;QAC7C,KAAK,YAAY,CAAC,CAAE,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC;AACH,CAAC;AAED,MAAM,
|
|
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
|
|
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 {
|
|
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
|
|
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":"AAAA,0DAA0D;AAC1D,qDAAqD;AACrD,0EAA0E;AAC1E,wCAAwC;AACxC,EAAE;AACF,wEAAwE;AAExE,OAAO,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACrD,OAAO,EAAE,
|
|
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
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
|
-
|
|
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
|
-
|
|
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 {
|
|
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
|
|
139
|
+
return pluralizeTableNameLegacy(toSnakeCase(owner.name));
|
|
138
140
|
}
|
|
139
141
|
|
|
140
142
|
return "";
|