pure-orm 4.0.0-0 → 4.0.0-1
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/.prettierignore +1 -0
- package/README.md +390 -332
- package/babel.config.js +6 -0
- package/coverage/clover.xml +2437 -0
- package/coverage/coverage-final.json +125 -0
- package/coverage/lcov-report/base.css +224 -0
- package/coverage/lcov-report/block-navigation.js +79 -0
- package/coverage/lcov-report/business-object.ts.html +1290 -0
- package/coverage/lcov-report/dao/base-dao.js.html +507 -0
- package/coverage/lcov-report/dao/index.html +97 -0
- package/coverage/lcov-report/dist/business-object.js.html +1164 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/article.js.html +216 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/article_tag.js.html +168 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/article_tags.js.html +99 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/articles.js.html +72 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/index.html +136 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/person.js.html +213 -0
- package/coverage/lcov-report/dist/examples/blog/business-objects/tag.js.html +156 -0
- package/coverage/lcov-report/dist/examples/blog/entities/article.js.html +216 -0
- package/coverage/lcov-report/dist/examples/blog/entities/article_tag.js.html +168 -0
- package/coverage/lcov-report/dist/examples/blog/entities/index.html +136 -0
- package/coverage/lcov-report/dist/examples/blog/entities/person.js.html +213 -0
- package/coverage/lcov-report/dist/examples/blog/entities/tag.js.html +156 -0
- package/coverage/lcov-report/dist/examples/blog/index.html +97 -0
- package/coverage/lcov-report/dist/examples/blog/models/article.js.html +216 -0
- package/coverage/lcov-report/dist/examples/blog/models/article_tag.js.html +168 -0
- package/coverage/lcov-report/dist/examples/blog/models/index.html +136 -0
- package/coverage/lcov-report/dist/examples/blog/models/person.js.html +213 -0
- package/coverage/lcov-report/dist/examples/blog/models/tag.js.html +156 -0
- package/coverage/lcov-report/dist/examples/blog/orm.js.html +120 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/index.html +149 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/line-items.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/order.js.html +306 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/product-variant.js.html +222 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/product-variants.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/product.js.html +192 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/products.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order/business-objects/utm-source.js.html +162 -0
- package/coverage/lcov-report/dist/examples/order/entities/index.html +149 -0
- package/coverage/lcov-report/dist/examples/order/entities/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/examples/order/entities/order.js.html +306 -0
- package/coverage/lcov-report/dist/examples/order/entities/product-variant.js.html +222 -0
- package/coverage/lcov-report/dist/examples/order/entities/product.js.html +192 -0
- package/coverage/lcov-report/dist/examples/order/entities/utm-source.js.html +162 -0
- package/coverage/lcov-report/dist/examples/order/index.html +97 -0
- package/coverage/lcov-report/dist/examples/order/models/index.html +149 -0
- package/coverage/lcov-report/dist/examples/order/models/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/examples/order/models/order.js.html +306 -0
- package/coverage/lcov-report/dist/examples/order/models/product-variant.js.html +222 -0
- package/coverage/lcov-report/dist/examples/order/models/product.js.html +192 -0
- package/coverage/lcov-report/dist/examples/order/models/utm-source.js.html +162 -0
- package/coverage/lcov-report/dist/examples/order/orm.js.html +126 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/actual-product-variant.js.html +141 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/actual-product-variants.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/color.js.html +150 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/colors.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/customer.js.html +141 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/customers.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/gender.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/genders.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/index.html +344 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/inventory-level.js.html +192 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/inventory-levels.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/line-items.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/order.js.html +339 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/parcel-events.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/parcels.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/physical-address.js.html +204 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/physical-addresses.js.html +108 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/product-variant-image.js.html +174 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/product-variant-images.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/product-variant.js.html +258 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/product-variants.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/product.js.html +198 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/products.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/refund.js.html +198 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/refunds.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/shipment-actual-product-variant.js.html +180 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/shipment-actual-product-variants.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/shipment.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/shipments.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/size.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/sizes.js.html +99 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/utm-medium.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/business-objects/utm-source.js.html +147 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/actual-product-variant.js.html +141 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/color.js.html +150 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/customer.js.html +141 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/gender.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/index.html +344 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/inventory-level.js.html +192 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/order.js.html +339 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/physical-address.js.html +204 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/product-variant-image.js.html +174 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/product-variant.js.html +258 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/product.js.html +198 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/refund.js.html +198 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/shipment-actual-product-variant.js.html +180 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/shipment.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/size.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/utm-medium.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/entities/utm-source.js.html +147 -0
- package/coverage/lcov-report/dist/examples/order-more/index.html +97 -0
- package/coverage/lcov-report/dist/examples/order-more/models/actual-product-variant.js.html +141 -0
- package/coverage/lcov-report/dist/examples/order-more/models/color.js.html +150 -0
- package/coverage/lcov-report/dist/examples/order-more/models/customer.js.html +141 -0
- package/coverage/lcov-report/dist/examples/order-more/models/gender.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/models/index.html +344 -0
- package/coverage/lcov-report/dist/examples/order-more/models/inventory-level.js.html +192 -0
- package/coverage/lcov-report/dist/examples/order-more/models/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/examples/order-more/models/order.js.html +339 -0
- package/coverage/lcov-report/dist/examples/order-more/models/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/examples/order-more/models/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/examples/order-more/models/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/examples/order-more/models/physical-address.js.html +204 -0
- package/coverage/lcov-report/dist/examples/order-more/models/product-variant-image.js.html +174 -0
- package/coverage/lcov-report/dist/examples/order-more/models/product-variant.js.html +258 -0
- package/coverage/lcov-report/dist/examples/order-more/models/product.js.html +198 -0
- package/coverage/lcov-report/dist/examples/order-more/models/refund.js.html +198 -0
- package/coverage/lcov-report/dist/examples/order-more/models/shipment-actual-product-variant.js.html +180 -0
- package/coverage/lcov-report/dist/examples/order-more/models/shipment.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/models/size.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/models/utm-medium.js.html +144 -0
- package/coverage/lcov-report/dist/examples/order-more/models/utm-source.js.html +147 -0
- package/coverage/lcov-report/dist/examples/order-more/orm.js.html +216 -0
- package/coverage/lcov-report/dist/factory.js.html +501 -0
- package/coverage/lcov-report/dist/index.html +123 -0
- package/coverage/lcov-report/dist/index.js.html +153 -0
- package/coverage/lcov-report/dist/src/business-object.js.html +1218 -0
- package/coverage/lcov-report/dist/src/factory.js.html +1605 -0
- package/coverage/lcov-report/dist/src/index.html +110 -0
- package/coverage/lcov-report/dist/src/index.js.html +84 -0
- package/coverage/lcov-report/dist/test-utils/blog/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/article.js.html +216 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/article_tag.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/article_tag.ts.html +192 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/index.html +136 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/person.js.html +213 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/tag.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/blog/models/tag.ts.html +177 -0
- package/coverage/lcov-report/dist/test-utils/blog/orm.js.html +105 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/line-item.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/line-items.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/order.js.html +150 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/parcel-events.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/five/business-objects/parcels.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/five/entities/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/five/entities/line-item.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/five/entities/order.js.html +150 -0
- package/coverage/lcov-report/dist/test-utils/five/entities/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/five/entities/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/five/entities/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/five/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/five/models/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/five/models/line-item.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/five/models/order.js.html +141 -0
- package/coverage/lcov-report/dist/test-utils/five/models/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/five/models/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/five/models/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/five/orm.js.html +126 -0
- package/coverage/lcov-report/dist/test-utils/nine/business-objects/feature-switch.js.html +147 -0
- package/coverage/lcov-report/dist/test-utils/nine/business-objects/feature-switches.js.html +108 -0
- package/coverage/lcov-report/dist/test-utils/nine/business-objects/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/nine/entities/feature-switch.js.html +147 -0
- package/coverage/lcov-report/dist/test-utils/nine/entities/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/nine/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/nine/models/feature-switch.js.html +147 -0
- package/coverage/lcov-report/dist/test-utils/nine/models/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/nine/orm.js.html +96 -0
- package/coverage/lcov-report/dist/test-utils/order/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/order/models/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/order/models/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/test-utils/order/models/order.js.html +306 -0
- package/coverage/lcov-report/dist/test-utils/order/models/product-variant.js.html +222 -0
- package/coverage/lcov-report/dist/test-utils/order/models/product.js.html +192 -0
- package/coverage/lcov-report/dist/test-utils/order/models/utm-source.js.html +147 -0
- package/coverage/lcov-report/dist/test-utils/order/orm.js.html +126 -0
- package/coverage/lcov-report/dist/test-utils/order-more/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/actual-product-variant.js.html +141 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/color.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/customer.js.html +141 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/gender.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/index.html +344 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/inventory-level.js.html +192 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/line-item.js.html +219 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/order.js.html +339 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-event.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/physical-address.js.html +204 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant-image.js.html +174 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/product-variant.js.html +258 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/product.js.html +198 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/refund.js.html +198 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/shipment-actual-product-variant.js.html +180 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/shipment.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/size.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/utm-medium.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/order-more/models/utm-source.js.html +147 -0
- package/coverage/lcov-report/dist/test-utils/order-more/orm.js.html +216 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/customer.js.html +141 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/customers.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/line-item.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/order.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/six/business-objects/parcels.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/six/entities/customer.js.html +141 -0
- package/coverage/lcov-report/dist/test-utils/six/entities/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/six/entities/line-item.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/six/entities/order.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/six/entities/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/six/entities/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/six/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/six/models/customer.js.html +141 -0
- package/coverage/lcov-report/dist/test-utils/six/models/index.html +149 -0
- package/coverage/lcov-report/dist/test-utils/six/models/line-item.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/six/models/order.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/six/models/parcel-line-item.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/six/models/parcel.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/six/orm.js.html +126 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/audience.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/audiences.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/brand.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/brands.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/categories.js.html +108 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/category.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/index.html +188 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/member.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/members.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/passion.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/passions.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/product.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/products.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/recommendation-audience.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/recommendation-audiences.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/recommendation.js.html +204 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/business-objects/recommendations.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/audience.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/brand.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/category.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/index.html +188 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/member.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/passion.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/product.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/recommendation-audience.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/entities/recommendation.js.html +204 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/audience.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/brand.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/category.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/index.html +188 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/member.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/passion.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/product.js.html +156 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation-audience.js.html +168 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/models/recommendation.js.html +204 -0
- package/coverage/lcov-report/dist/test-utils/thirteen/orm.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/three/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/three/results.js.html +1335 -0
- package/coverage/lcov-report/dist/test-utils/twelve/business-objects/index.html +110 -0
- package/coverage/lcov-report/dist/test-utils/twelve/business-objects/member.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/twelve/business-objects/members.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/twelve/business-objects/prompt.js.html +165 -0
- package/coverage/lcov-report/dist/test-utils/twelve/business-objects/prompts.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/twelve/entities/index.html +110 -0
- package/coverage/lcov-report/dist/test-utils/twelve/entities/member.js.html +144 -0
- package/coverage/lcov-report/dist/test-utils/twelve/entities/prompt.js.html +165 -0
- package/coverage/lcov-report/dist/test-utils/twelve/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/twelve/models/index.html +110 -0
- package/coverage/lcov-report/dist/test-utils/twelve/models/member.js.html +138 -0
- package/coverage/lcov-report/dist/test-utils/twelve/models/prompt.js.html +165 -0
- package/coverage/lcov-report/dist/test-utils/twelve/orm.js.html +99 -0
- package/coverage/lcov-report/dist/test-utils/two/index.html +97 -0
- package/coverage/lcov-report/dist/test-utils/two/results.js.html +1035 -0
- package/coverage/lcov-report/examples/blog/bo/article.js.html +174 -0
- package/coverage/lcov-report/examples/blog/bo/article_tag.js.html +150 -0
- package/coverage/lcov-report/examples/blog/bo/article_tags.js.html +99 -0
- package/coverage/lcov-report/examples/blog/bo/articles.js.html +99 -0
- package/coverage/lcov-report/examples/blog/bo/base.js.html +84 -0
- package/coverage/lcov-report/examples/blog/bo/index.html +162 -0
- package/coverage/lcov-report/examples/blog/bo/person.js.html +153 -0
- package/coverage/lcov-report/examples/blog/bo/tag.js.html +114 -0
- package/coverage/lcov-report/examples/blog/business-objects/article.js.html +174 -0
- package/coverage/lcov-report/examples/blog/business-objects/article.ts.html +264 -0
- package/coverage/lcov-report/examples/blog/business-objects/article_tag.js.html +150 -0
- package/coverage/lcov-report/examples/blog/business-objects/article_tag.ts.html +192 -0
- package/coverage/lcov-report/examples/blog/business-objects/article_tags.js.html +99 -0
- package/coverage/lcov-report/examples/blog/business-objects/articles.js.html +72 -0
- package/coverage/lcov-report/examples/blog/business-objects/index.html +136 -0
- package/coverage/lcov-report/examples/blog/business-objects/person.js.html +153 -0
- package/coverage/lcov-report/examples/blog/business-objects/person.ts.html +303 -0
- package/coverage/lcov-report/examples/blog/business-objects/tag.js.html +114 -0
- package/coverage/lcov-report/examples/blog/business-objects/tag.ts.html +177 -0
- package/coverage/lcov-report/examples/blog/business-objects.js.html +99 -0
- package/coverage/lcov-report/examples/blog/entities/article.ts.html +264 -0
- package/coverage/lcov-report/examples/blog/entities/article_tag.ts.html +192 -0
- package/coverage/lcov-report/examples/blog/entities/index.html +136 -0
- package/coverage/lcov-report/examples/blog/entities/person.ts.html +303 -0
- package/coverage/lcov-report/examples/blog/entities/tag.ts.html +177 -0
- package/coverage/lcov-report/examples/blog/index.html +97 -0
- package/coverage/lcov-report/examples/blog/models/article.ts.html +264 -0
- package/coverage/lcov-report/examples/blog/models/article_tag.ts.html +192 -0
- package/coverage/lcov-report/examples/blog/models/index.html +136 -0
- package/coverage/lcov-report/examples/blog/models/person.ts.html +303 -0
- package/coverage/lcov-report/examples/blog/models/tag.ts.html +177 -0
- package/coverage/lcov-report/examples/blog/orm.js.html +111 -0
- package/coverage/lcov-report/examples/blog/orm.ts.html +117 -0
- package/coverage/lcov-report/examples/order/bo/base.js.html +84 -0
- package/coverage/lcov-report/examples/order/bo/index.html +201 -0
- package/coverage/lcov-report/examples/order/bo/line-item.js.html +177 -0
- package/coverage/lcov-report/examples/order/bo/line-items.js.html +99 -0
- package/coverage/lcov-report/examples/order/bo/order.js.html +210 -0
- package/coverage/lcov-report/examples/order/bo/orders.js.html +99 -0
- package/coverage/lcov-report/examples/order/bo/product-variant.js.html +177 -0
- package/coverage/lcov-report/examples/order/bo/product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order/bo/product.js.html +162 -0
- package/coverage/lcov-report/examples/order/bo/products.js.html +99 -0
- package/coverage/lcov-report/examples/order/bo/utm-source.js.html +114 -0
- package/coverage/lcov-report/examples/order/business-objects/index.html +149 -0
- package/coverage/lcov-report/examples/order/business-objects/line-item.js.html +177 -0
- package/coverage/lcov-report/examples/order/business-objects/line-item.ts.html +267 -0
- package/coverage/lcov-report/examples/order/business-objects/line-items.js.html +99 -0
- package/coverage/lcov-report/examples/order/business-objects/order.js.html +210 -0
- package/coverage/lcov-report/examples/order/business-objects/order.ts.html +390 -0
- package/coverage/lcov-report/examples/order/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/examples/order/business-objects/product-variant.js.html +177 -0
- package/coverage/lcov-report/examples/order/business-objects/product-variant.ts.html +273 -0
- package/coverage/lcov-report/examples/order/business-objects/product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order/business-objects/product.js.html +162 -0
- package/coverage/lcov-report/examples/order/business-objects/product.ts.html +228 -0
- package/coverage/lcov-report/examples/order/business-objects/products.js.html +99 -0
- package/coverage/lcov-report/examples/order/business-objects/utm-source.js.html +114 -0
- package/coverage/lcov-report/examples/order/business-objects/utm-source.ts.html +183 -0
- package/coverage/lcov-report/examples/order/business-objects.js.html +102 -0
- package/coverage/lcov-report/examples/order/entities/index.html +149 -0
- package/coverage/lcov-report/examples/order/entities/line-item.ts.html +267 -0
- package/coverage/lcov-report/examples/order/entities/order.ts.html +390 -0
- package/coverage/lcov-report/examples/order/entities/product-variant.ts.html +273 -0
- package/coverage/lcov-report/examples/order/entities/product.ts.html +228 -0
- package/coverage/lcov-report/examples/order/entities/utm-source.ts.html +183 -0
- package/coverage/lcov-report/examples/order/index.html +97 -0
- package/coverage/lcov-report/examples/order/models/index.html +149 -0
- package/coverage/lcov-report/examples/order/models/line-item.ts.html +267 -0
- package/coverage/lcov-report/examples/order/models/order.ts.html +390 -0
- package/coverage/lcov-report/examples/order/models/product-variant.ts.html +273 -0
- package/coverage/lcov-report/examples/order/models/product.ts.html +228 -0
- package/coverage/lcov-report/examples/order/models/utm-source.ts.html +183 -0
- package/coverage/lcov-report/examples/order/orm.js.html +129 -0
- package/coverage/lcov-report/examples/order/orm.ts.html +123 -0
- package/coverage/lcov-report/examples/order-more/bo/actual-product-variant.js.html +153 -0
- package/coverage/lcov-report/examples/order-more/bo/actual-product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/base.js.html +84 -0
- package/coverage/lcov-report/examples/order-more/bo/color.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/bo/colors.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/customer.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/bo/customers.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/gender.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/bo/genders.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/index.html +578 -0
- package/coverage/lcov-report/examples/order-more/bo/inventory-level.js.html +162 -0
- package/coverage/lcov-report/examples/order-more/bo/inventory-levels.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/line-item.js.html +177 -0
- package/coverage/lcov-report/examples/order-more/bo/line-items.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/order.js.html +225 -0
- package/coverage/lcov-report/examples/order-more/bo/orders.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/parcel-event.js.html +135 -0
- package/coverage/lcov-report/examples/order-more/bo/parcel-events.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/parcel-line-item.js.html +150 -0
- package/coverage/lcov-report/examples/order-more/bo/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/parcel.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/bo/parcels.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/physical-address.js.html +168 -0
- package/coverage/lcov-report/examples/order-more/bo/physical-addresses.js.html +108 -0
- package/coverage/lcov-report/examples/order-more/bo/product-variant-image.js.html +153 -0
- package/coverage/lcov-report/examples/order-more/bo/product-variant-images.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/product-variant.js.html +195 -0
- package/coverage/lcov-report/examples/order-more/bo/product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/product.js.html +165 -0
- package/coverage/lcov-report/examples/order-more/bo/products.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/refund.js.html +162 -0
- package/coverage/lcov-report/examples/order-more/bo/refunds.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/shipment-actual-product-variant.js.html +156 -0
- package/coverage/lcov-report/examples/order-more/bo/shipment-actual-product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/shipment.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/bo/shipments.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/size.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/bo/sizes.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/bo/utm-medium.js.html +114 -0
- package/coverage/lcov-report/examples/order-more/bo/utm-source.js.html +114 -0
- package/coverage/lcov-report/examples/order-more/business-objects/actual-product-variant.js.html +153 -0
- package/coverage/lcov-report/examples/order-more/business-objects/actual-product-variant.ts.html +156 -0
- package/coverage/lcov-report/examples/order-more/business-objects/actual-product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/color.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/business-objects/color.ts.html +174 -0
- package/coverage/lcov-report/examples/order-more/business-objects/colors.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/customer.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/business-objects/customer.ts.html +156 -0
- package/coverage/lcov-report/examples/order-more/business-objects/customers.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/gender.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/business-objects/gender.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/business-objects/genders.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/index.html +344 -0
- package/coverage/lcov-report/examples/order-more/business-objects/inventory-level.js.html +162 -0
- package/coverage/lcov-report/examples/order-more/business-objects/inventory-level.ts.html +231 -0
- package/coverage/lcov-report/examples/order-more/business-objects/inventory-levels.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/line-item.js.html +177 -0
- package/coverage/lcov-report/examples/order-more/business-objects/line-item.ts.html +267 -0
- package/coverage/lcov-report/examples/order-more/business-objects/line-items.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/order.js.html +225 -0
- package/coverage/lcov-report/examples/order-more/business-objects/order.ts.html +441 -0
- package/coverage/lcov-report/examples/order-more/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel-event.js.html +135 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel-events.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel-line-item.js.html +150 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcel.ts.html +150 -0
- package/coverage/lcov-report/examples/order-more/business-objects/parcels.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/physical-address.js.html +168 -0
- package/coverage/lcov-report/examples/order-more/business-objects/physical-address.ts.html +246 -0
- package/coverage/lcov-report/examples/order-more/business-objects/physical-addresses.js.html +108 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product-variant-image.js.html +153 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product-variant-image.ts.html +201 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product-variant-images.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product-variant.js.html +195 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product-variant.ts.html +327 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product.js.html +165 -0
- package/coverage/lcov-report/examples/order-more/business-objects/product.ts.html +237 -0
- package/coverage/lcov-report/examples/order-more/business-objects/products.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/refund.js.html +162 -0
- package/coverage/lcov-report/examples/order-more/business-objects/refund.ts.html +237 -0
- package/coverage/lcov-report/examples/order-more/business-objects/refunds.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/shipment-actual-product-variant.js.html +156 -0
- package/coverage/lcov-report/examples/order-more/business-objects/shipment-actual-product-variant.ts.html +210 -0
- package/coverage/lcov-report/examples/order-more/business-objects/shipment-actual-product-variants.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/shipment.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/business-objects/shipment.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/business-objects/shipments.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/size.js.html +132 -0
- package/coverage/lcov-report/examples/order-more/business-objects/size.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/business-objects/sizes.js.html +99 -0
- package/coverage/lcov-report/examples/order-more/business-objects/utm-medium.js.html +114 -0
- package/coverage/lcov-report/examples/order-more/business-objects/utm-medium.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/business-objects/utm-source.js.html +114 -0
- package/coverage/lcov-report/examples/order-more/business-objects/utm-source.ts.html +168 -0
- package/coverage/lcov-report/examples/order-more/business-objects.js.html +147 -0
- package/coverage/lcov-report/examples/order-more/entities/actual-product-variant.ts.html +156 -0
- package/coverage/lcov-report/examples/order-more/entities/color.ts.html +174 -0
- package/coverage/lcov-report/examples/order-more/entities/customer.ts.html +156 -0
- package/coverage/lcov-report/examples/order-more/entities/gender.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/entities/index.html +344 -0
- package/coverage/lcov-report/examples/order-more/entities/inventory-level.ts.html +231 -0
- package/coverage/lcov-report/examples/order-more/entities/line-item.ts.html +267 -0
- package/coverage/lcov-report/examples/order-more/entities/order.ts.html +441 -0
- package/coverage/lcov-report/examples/order-more/entities/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/examples/order-more/entities/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/examples/order-more/entities/parcel.ts.html +150 -0
- package/coverage/lcov-report/examples/order-more/entities/physical-address.ts.html +246 -0
- package/coverage/lcov-report/examples/order-more/entities/product-variant-image.ts.html +201 -0
- package/coverage/lcov-report/examples/order-more/entities/product-variant.ts.html +327 -0
- package/coverage/lcov-report/examples/order-more/entities/product.ts.html +237 -0
- package/coverage/lcov-report/examples/order-more/entities/refund.ts.html +237 -0
- package/coverage/lcov-report/examples/order-more/entities/shipment-actual-product-variant.ts.html +210 -0
- package/coverage/lcov-report/examples/order-more/entities/shipment.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/entities/size.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/entities/utm-medium.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/entities/utm-source.ts.html +168 -0
- package/coverage/lcov-report/examples/order-more/index.html +97 -0
- package/coverage/lcov-report/examples/order-more/models/actual-product-variant.ts.html +156 -0
- package/coverage/lcov-report/examples/order-more/models/color.ts.html +174 -0
- package/coverage/lcov-report/examples/order-more/models/customer.ts.html +156 -0
- package/coverage/lcov-report/examples/order-more/models/gender.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/models/index.html +344 -0
- package/coverage/lcov-report/examples/order-more/models/inventory-level.ts.html +231 -0
- package/coverage/lcov-report/examples/order-more/models/line-item.ts.html +267 -0
- package/coverage/lcov-report/examples/order-more/models/order.ts.html +441 -0
- package/coverage/lcov-report/examples/order-more/models/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/examples/order-more/models/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/examples/order-more/models/parcel.ts.html +150 -0
- package/coverage/lcov-report/examples/order-more/models/physical-address.ts.html +246 -0
- package/coverage/lcov-report/examples/order-more/models/product-variant-image.ts.html +201 -0
- package/coverage/lcov-report/examples/order-more/models/product-variant.ts.html +327 -0
- package/coverage/lcov-report/examples/order-more/models/product.ts.html +237 -0
- package/coverage/lcov-report/examples/order-more/models/refund.ts.html +237 -0
- package/coverage/lcov-report/examples/order-more/models/shipment-actual-product-variant.ts.html +210 -0
- package/coverage/lcov-report/examples/order-more/models/shipment.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/models/size.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/models/utm-medium.ts.html +162 -0
- package/coverage/lcov-report/examples/order-more/models/utm-source.ts.html +168 -0
- package/coverage/lcov-report/examples/order-more/orm.js.html +216 -0
- package/coverage/lcov-report/examples/order-more/orm.ts.html +213 -0
- package/coverage/lcov-report/five/bo/base.js.html +84 -0
- package/coverage/lcov-report/five/bo/index.html +227 -0
- package/coverage/lcov-report/five/bo/line-item.js.html +135 -0
- package/coverage/lcov-report/five/bo/line-items.js.html +96 -0
- package/coverage/lcov-report/five/bo/order.js.html +132 -0
- package/coverage/lcov-report/five/bo/orders.js.html +96 -0
- package/coverage/lcov-report/five/bo/parcel-event.js.html +141 -0
- package/coverage/lcov-report/five/bo/parcel-events.js.html +96 -0
- package/coverage/lcov-report/five/bo/parcel-line-item.js.html +141 -0
- package/coverage/lcov-report/five/bo/parcel-line-items.js.html +96 -0
- package/coverage/lcov-report/five/bo/parcel.js.html +129 -0
- package/coverage/lcov-report/five/bo/parcels.js.html +96 -0
- package/coverage/lcov-report/five/business-objects.js.html +102 -0
- package/coverage/lcov-report/five/index.html +97 -0
- package/coverage/lcov-report/fixtures/index.html +110 -0
- package/coverage/lcov-report/fixtures/three.js.html +1335 -0
- package/coverage/lcov-report/fixtures/two.js.html +1035 -0
- package/coverage/lcov-report/index.html +578 -0
- package/coverage/lcov-report/prettify.css +1 -0
- package/coverage/lcov-report/prettify.js +2 -0
- package/coverage/lcov-report/six/bo/base.js.html +84 -0
- package/coverage/lcov-report/six/bo/customer.js.html +135 -0
- package/coverage/lcov-report/six/bo/customers.js.html +96 -0
- package/coverage/lcov-report/six/bo/index.html +214 -0
- package/coverage/lcov-report/six/bo/line-item.js.html +138 -0
- package/coverage/lcov-report/six/bo/order.js.html +138 -0
- package/coverage/lcov-report/six/bo/orders.js.html +96 -0
- package/coverage/lcov-report/six/bo/parcel-line-item.js.html +144 -0
- package/coverage/lcov-report/six/bo/parcel-line-items.js.html +96 -0
- package/coverage/lcov-report/six/bo/parcel.js.html +132 -0
- package/coverage/lcov-report/six/bo/parcels.js.html +96 -0
- package/coverage/lcov-report/six/business-objects.js.html +102 -0
- package/coverage/lcov-report/six/index.html +97 -0
- package/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/coverage/lcov-report/sorter.js +170 -0
- package/coverage/lcov-report/src/bo/base-bo-collection.js.html +114 -0
- package/coverage/lcov-report/src/bo/base-bo.js.html +1206 -0
- package/coverage/lcov-report/src/bo/index.html +110 -0
- package/coverage/lcov-report/src/bo.js.html +1248 -0
- package/coverage/lcov-report/src/business-object.js.html +1248 -0
- package/coverage/lcov-report/src/business-object.ts.html +1596 -0
- package/coverage/lcov-report/src/dao/base-dao.js.html +507 -0
- package/coverage/lcov-report/src/dao/index.html +97 -0
- package/coverage/lcov-report/src/factory.js.html +570 -0
- package/coverage/lcov-report/src/factory.ts.html +2268 -0
- package/coverage/lcov-report/src/index.html +110 -0
- package/coverage/lcov-report/src/index.js.html +219 -0
- package/coverage/lcov-report/src/index.ts.html +93 -0
- package/coverage/lcov-report/src/util/helpers.js.html +153 -0
- package/coverage/lcov-report/src/util/index.html +97 -0
- package/coverage/lcov-report/test-utils/blog/index.html +97 -0
- package/coverage/lcov-report/test-utils/blog/models/article.ts.html +264 -0
- package/coverage/lcov-report/test-utils/blog/models/article_tag.ts.html +192 -0
- package/coverage/lcov-report/test-utils/blog/models/index.html +136 -0
- package/coverage/lcov-report/test-utils/blog/models/person.ts.html +303 -0
- package/coverage/lcov-report/test-utils/blog/models/tag.ts.html +165 -0
- package/coverage/lcov-report/test-utils/blog/orm.ts.html +102 -0
- package/coverage/lcov-report/test-utils/five/bo/base.js.html +84 -0
- package/coverage/lcov-report/test-utils/five/bo/index.html +214 -0
- package/coverage/lcov-report/test-utils/five/bo/line-item.js.html +135 -0
- package/coverage/lcov-report/test-utils/five/bo/line-items.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/bo/order.js.html +132 -0
- package/coverage/lcov-report/test-utils/five/bo/orders.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/bo/parcel-event.js.html +135 -0
- package/coverage/lcov-report/test-utils/five/bo/parcel-events.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/bo/parcel-line-item.js.html +150 -0
- package/coverage/lcov-report/test-utils/five/bo/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/bo/parcel.js.html +132 -0
- package/coverage/lcov-report/test-utils/five/bo/parcels.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/business-objects/index.html +149 -0
- package/coverage/lcov-report/test-utils/five/business-objects/line-item.js.html +135 -0
- package/coverage/lcov-report/test-utils/five/business-objects/line-item.ts.html +174 -0
- package/coverage/lcov-report/test-utils/five/business-objects/line-items.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/business-objects/order.js.html +132 -0
- package/coverage/lcov-report/test-utils/five/business-objects/order.ts.html +165 -0
- package/coverage/lcov-report/test-utils/five/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel-event.js.html +135 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel-events.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel-line-item.js.html +150 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel.js.html +132 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/five/business-objects/parcels.js.html +99 -0
- package/coverage/lcov-report/test-utils/five/business-objects.js.html +102 -0
- package/coverage/lcov-report/test-utils/five/entities/index.html +149 -0
- package/coverage/lcov-report/test-utils/five/entities/line-item.ts.html +174 -0
- package/coverage/lcov-report/test-utils/five/entities/order.ts.html +165 -0
- package/coverage/lcov-report/test-utils/five/entities/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/test-utils/five/entities/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/five/entities/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/five/index.html +97 -0
- package/coverage/lcov-report/test-utils/five/models/index.html +149 -0
- package/coverage/lcov-report/test-utils/five/models/line-item.ts.html +174 -0
- package/coverage/lcov-report/test-utils/five/models/order.ts.html +156 -0
- package/coverage/lcov-report/test-utils/five/models/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/test-utils/five/models/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/five/models/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/five/orm.js.html +126 -0
- package/coverage/lcov-report/test-utils/five/orm.ts.html +120 -0
- package/coverage/lcov-report/test-utils/nine/bo/base.js.html +84 -0
- package/coverage/lcov-report/test-utils/nine/bo/feature-switch.js.html +132 -0
- package/coverage/lcov-report/test-utils/nine/bo/feature-switches.js.html +108 -0
- package/coverage/lcov-report/test-utils/nine/bo/index.html +110 -0
- package/coverage/lcov-report/test-utils/nine/business-objects/feature-switch.js.html +132 -0
- package/coverage/lcov-report/test-utils/nine/business-objects/feature-switch.ts.html +183 -0
- package/coverage/lcov-report/test-utils/nine/business-objects/feature-switches.js.html +108 -0
- package/coverage/lcov-report/test-utils/nine/business-objects/index.html +97 -0
- package/coverage/lcov-report/test-utils/nine/business-objects.js.html +90 -0
- package/coverage/lcov-report/test-utils/nine/entities/feature-switch.ts.html +183 -0
- package/coverage/lcov-report/test-utils/nine/entities/index.html +97 -0
- package/coverage/lcov-report/test-utils/nine/index.html +97 -0
- package/coverage/lcov-report/test-utils/nine/models/feature-switch.ts.html +183 -0
- package/coverage/lcov-report/test-utils/nine/models/index.html +97 -0
- package/coverage/lcov-report/test-utils/nine/orm.js.html +96 -0
- package/coverage/lcov-report/test-utils/nine/orm.ts.html +90 -0
- package/coverage/lcov-report/test-utils/order/index.html +97 -0
- package/coverage/lcov-report/test-utils/order/models/index.html +149 -0
- package/coverage/lcov-report/test-utils/order/models/line-item.ts.html +267 -0
- package/coverage/lcov-report/test-utils/order/models/order.ts.html +390 -0
- package/coverage/lcov-report/test-utils/order/models/product-variant.ts.html +273 -0
- package/coverage/lcov-report/test-utils/order/models/product.ts.html +228 -0
- package/coverage/lcov-report/test-utils/order/models/utm-source.ts.html +168 -0
- package/coverage/lcov-report/test-utils/order/orm.ts.html +123 -0
- package/coverage/lcov-report/test-utils/order-more/index.html +97 -0
- package/coverage/lcov-report/test-utils/order-more/models/actual-product-variant.ts.html +162 -0
- package/coverage/lcov-report/test-utils/order-more/models/color.ts.html +192 -0
- package/coverage/lcov-report/test-utils/order-more/models/customer.ts.html +156 -0
- package/coverage/lcov-report/test-utils/order-more/models/gender.ts.html +162 -0
- package/coverage/lcov-report/test-utils/order-more/models/index.html +344 -0
- package/coverage/lcov-report/test-utils/order-more/models/inventory-level.ts.html +231 -0
- package/coverage/lcov-report/test-utils/order-more/models/line-item.ts.html +267 -0
- package/coverage/lcov-report/test-utils/order-more/models/order.ts.html +441 -0
- package/coverage/lcov-report/test-utils/order-more/models/parcel-event.ts.html +192 -0
- package/coverage/lcov-report/test-utils/order-more/models/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/order-more/models/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/order-more/models/physical-address.ts.html +246 -0
- package/coverage/lcov-report/test-utils/order-more/models/product-variant-image.ts.html +201 -0
- package/coverage/lcov-report/test-utils/order-more/models/product-variant.ts.html +327 -0
- package/coverage/lcov-report/test-utils/order-more/models/product.ts.html +237 -0
- package/coverage/lcov-report/test-utils/order-more/models/refund.ts.html +237 -0
- package/coverage/lcov-report/test-utils/order-more/models/shipment-actual-product-variant.ts.html +216 -0
- package/coverage/lcov-report/test-utils/order-more/models/shipment.ts.html +174 -0
- package/coverage/lcov-report/test-utils/order-more/models/size.ts.html +162 -0
- package/coverage/lcov-report/test-utils/order-more/models/utm-medium.ts.html +162 -0
- package/coverage/lcov-report/test-utils/order-more/models/utm-source.ts.html +168 -0
- package/coverage/lcov-report/test-utils/order-more/orm.ts.html +213 -0
- package/coverage/lcov-report/test-utils/six/bo/base.js.html +84 -0
- package/coverage/lcov-report/test-utils/six/bo/customer.js.html +132 -0
- package/coverage/lcov-report/test-utils/six/bo/customers.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/bo/index.html +201 -0
- package/coverage/lcov-report/test-utils/six/bo/line-item.js.html +135 -0
- package/coverage/lcov-report/test-utils/six/bo/order.js.html +135 -0
- package/coverage/lcov-report/test-utils/six/bo/orders.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/bo/parcel-line-item.js.html +150 -0
- package/coverage/lcov-report/test-utils/six/bo/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/bo/parcel.js.html +132 -0
- package/coverage/lcov-report/test-utils/six/bo/parcels.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/business-objects/customer.js.html +132 -0
- package/coverage/lcov-report/test-utils/six/business-objects/customer.ts.html +156 -0
- package/coverage/lcov-report/test-utils/six/business-objects/customers.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/business-objects/index.html +149 -0
- package/coverage/lcov-report/test-utils/six/business-objects/line-item.js.html +135 -0
- package/coverage/lcov-report/test-utils/six/business-objects/line-item.ts.html +174 -0
- package/coverage/lcov-report/test-utils/six/business-objects/order.js.html +135 -0
- package/coverage/lcov-report/test-utils/six/business-objects/order.ts.html +174 -0
- package/coverage/lcov-report/test-utils/six/business-objects/orders.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/business-objects/parcel-line-item.js.html +150 -0
- package/coverage/lcov-report/test-utils/six/business-objects/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/six/business-objects/parcel-line-items.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/business-objects/parcel.js.html +132 -0
- package/coverage/lcov-report/test-utils/six/business-objects/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/six/business-objects/parcels.js.html +99 -0
- package/coverage/lcov-report/test-utils/six/business-objects.js.html +102 -0
- package/coverage/lcov-report/test-utils/six/entities/customer.ts.html +156 -0
- package/coverage/lcov-report/test-utils/six/entities/index.html +149 -0
- package/coverage/lcov-report/test-utils/six/entities/line-item.ts.html +174 -0
- package/coverage/lcov-report/test-utils/six/entities/order.ts.html +174 -0
- package/coverage/lcov-report/test-utils/six/entities/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/six/entities/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/six/index.html +97 -0
- package/coverage/lcov-report/test-utils/six/models/customer.ts.html +156 -0
- package/coverage/lcov-report/test-utils/six/models/index.html +149 -0
- package/coverage/lcov-report/test-utils/six/models/line-item.ts.html +174 -0
- package/coverage/lcov-report/test-utils/six/models/order.ts.html +174 -0
- package/coverage/lcov-report/test-utils/six/models/parcel-line-item.ts.html +192 -0
- package/coverage/lcov-report/test-utils/six/models/parcel.ts.html +150 -0
- package/coverage/lcov-report/test-utils/six/orm.js.html +126 -0
- package/coverage/lcov-report/test-utils/six/orm.ts.html +120 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/audience.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/audiences.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/base.js.html +84 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/brand.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/brands.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/categories.js.html +108 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/category.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/index.html +292 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/member.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/members.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/passion.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/passions.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/product.js.html +135 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/products.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/recommendation-audience.js.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/recommendation-audiences.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/recommendation.js.html +168 -0
- package/coverage/lcov-report/test-utils/thirteen/bo/recommendations.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/audience.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/audience.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/audiences.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/brand.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/brand.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/brands.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/categories.js.html +108 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/category.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/category.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/index.html +188 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/member.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/member.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/members.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/passion.js.html +132 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/passion.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/passions.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/product.js.html +135 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/product.ts.html +174 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/products.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/recommendation-audience.js.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/recommendation-audience.ts.html +192 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/recommendation-audiences.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/recommendation.js.html +168 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/recommendation.ts.html +249 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects/recommendations.js.html +99 -0
- package/coverage/lcov-report/test-utils/thirteen/business-objects.js.html +111 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/audience.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/brand.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/category.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/index.html +188 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/member.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/passion.ts.html +156 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/product.ts.html +174 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/recommendation-audience.ts.html +192 -0
- package/coverage/lcov-report/test-utils/thirteen/entities/recommendation.ts.html +249 -0
- package/coverage/lcov-report/test-utils/thirteen/index.html +97 -0
- package/coverage/lcov-report/test-utils/thirteen/models/audience.ts.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/models/brand.ts.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/models/category.ts.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/models/index.html +188 -0
- package/coverage/lcov-report/test-utils/thirteen/models/member.ts.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/models/passion.ts.html +150 -0
- package/coverage/lcov-report/test-utils/thirteen/models/product.ts.html +174 -0
- package/coverage/lcov-report/test-utils/thirteen/models/recommendation-audience.ts.html +198 -0
- package/coverage/lcov-report/test-utils/thirteen/models/recommendation.ts.html +249 -0
- package/coverage/lcov-report/test-utils/thirteen/orm.js.html +144 -0
- package/coverage/lcov-report/test-utils/thirteen/orm.ts.html +138 -0
- package/coverage/lcov-report/test-utils/three/index.html +97 -0
- package/coverage/lcov-report/test-utils/three/results.js.html +1335 -0
- package/coverage/lcov-report/test-utils/twelve/bo/base.js.html +84 -0
- package/coverage/lcov-report/test-utils/twelve/bo/index.html +136 -0
- package/coverage/lcov-report/test-utils/twelve/bo/member.js.html +126 -0
- package/coverage/lcov-report/test-utils/twelve/bo/members.js.html +99 -0
- package/coverage/lcov-report/test-utils/twelve/bo/prompt.js.html +138 -0
- package/coverage/lcov-report/test-utils/twelve/bo/prompts.js.html +99 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/index.html +110 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/member.js.html +126 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/member.ts.html +156 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/members.js.html +99 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/prompt.js.html +138 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/prompt.ts.html +189 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects/prompts.js.html +99 -0
- package/coverage/lcov-report/test-utils/twelve/business-objects.js.html +93 -0
- package/coverage/lcov-report/test-utils/twelve/entities/index.html +110 -0
- package/coverage/lcov-report/test-utils/twelve/entities/member.ts.html +156 -0
- package/coverage/lcov-report/test-utils/twelve/entities/prompt.ts.html +189 -0
- package/coverage/lcov-report/test-utils/twelve/index.html +97 -0
- package/coverage/lcov-report/test-utils/twelve/models/index.html +110 -0
- package/coverage/lcov-report/test-utils/twelve/models/member.ts.html +150 -0
- package/coverage/lcov-report/test-utils/twelve/models/prompt.ts.html +189 -0
- package/coverage/lcov-report/test-utils/twelve/orm.js.html +99 -0
- package/coverage/lcov-report/test-utils/twelve/orm.ts.html +93 -0
- package/coverage/lcov-report/test-utils/two/index.html +97 -0
- package/coverage/lcov-report/test-utils/two/results.js.html +1035 -0
- package/coverage/lcov-report/util/helpers.js.html +153 -0
- package/coverage/lcov-report/util/index.html +97 -0
- package/coverage/lcov.info +4087 -0
- package/dist/example/app.d.ts +1 -0
- package/dist/example/app.js +14 -0
- package/dist/example/data-access/person.d.ts +2 -0
- package/dist/example/data-access/person.js +21 -0
- package/dist/example/factories/db.d.ts +2 -0
- package/dist/example/factories/db.js +16 -0
- package/dist/example/factories/orm.d.ts +47 -0
- package/dist/example/factories/orm.js +12 -0
- package/dist/example/models/employer.d.ts +23 -0
- package/dist/example/models/employer.js +25 -0
- package/dist/example/models/job.d.ts +35 -0
- package/dist/example/models/job.js +38 -0
- package/dist/example/models/person.d.ts +25 -0
- package/dist/example/models/person.js +31 -0
- package/dist/src/factory.d.ts +99 -0
- package/dist/src/factory.js +512 -0
- package/dist/src/factory.spec.d.ts +1 -0
- package/dist/src/factory.spec.js +566 -0
- package/dist/src/index.d.ts +1 -0
- package/dist/src/index.js +5 -0
- package/dist/test-utils/blog/models/article.d.ts +30 -0
- package/dist/test-utils/blog/models/article.js +49 -0
- package/dist/test-utils/blog/models/article.ts +65 -0
- package/dist/test-utils/blog/models/article_tag.d.ts +23 -0
- package/dist/test-utils/blog/models/article_tag.js +33 -0
- package/dist/test-utils/blog/models/article_tag.ts +41 -0
- package/dist/test-utils/blog/models/person.d.ts +43 -0
- package/dist/test-utils/blog/models/person.js +48 -0
- package/dist/test-utils/blog/models/person.ts +78 -0
- package/dist/test-utils/blog/models/tag.d.ts +19 -0
- package/dist/test-utils/blog/models/tag.js +25 -0
- package/dist/test-utils/blog/models/tag.ts +32 -0
- package/dist/test-utils/blog/orm.d.ts +2 -0
- package/dist/test-utils/blog/orm.js +12 -0
- package/dist/test-utils/blog/orm.ts +11 -0
- package/dist/test-utils/eight/results.json +128 -0
- package/dist/test-utils/eleven/results.json +818 -0
- package/dist/test-utils/five/models/line-item.d.ts +20 -0
- package/dist/test-utils/five/models/line-item.js +29 -0
- package/dist/test-utils/five/models/line-item.ts +35 -0
- package/dist/test-utils/five/models/order.d.ts +18 -0
- package/dist/test-utils/five/models/order.js +24 -0
- package/dist/test-utils/five/models/order.ts +29 -0
- package/dist/test-utils/five/models/parcel-event.d.ts +22 -0
- package/dist/test-utils/five/models/parcel-event.js +33 -0
- package/dist/test-utils/five/models/parcel-event.ts +41 -0
- package/dist/test-utils/five/models/parcel-line-item.d.ts +23 -0
- package/dist/test-utils/five/models/parcel-line-item.js +33 -0
- package/dist/test-utils/five/models/parcel-line-item.ts +41 -0
- package/dist/test-utils/five/models/parcel.d.ts +17 -0
- package/dist/test-utils/five/models/parcel.js +23 -0
- package/dist/test-utils/five/models/parcel.ts +27 -0
- package/dist/test-utils/five/orm.d.ts +47 -0
- package/dist/test-utils/five/orm.js +19 -0
- package/dist/test-utils/five/orm.ts +17 -0
- package/dist/test-utils/five/results.json +58 -0
- package/dist/test-utils/four/results.json +772 -0
- package/dist/test-utils/nine/models/feature-switch.d.ts +25 -0
- package/dist/test-utils/nine/models/feature-switch.js +26 -0
- package/dist/test-utils/nine/models/feature-switch.ts +38 -0
- package/dist/test-utils/nine/orm.d.ts +47 -0
- package/dist/test-utils/nine/orm.js +9 -0
- package/dist/test-utils/nine/orm.ts +7 -0
- package/dist/test-utils/nine/results.json +12 -0
- package/dist/test-utils/one/results.json +386 -0
- package/dist/test-utils/order/models/line-item.d.ts +31 -0
- package/dist/test-utils/order/models/line-item.js +50 -0
- package/dist/test-utils/order/models/line-item.ts +66 -0
- package/dist/test-utils/order/models/order.d.ts +42 -0
- package/dist/test-utils/order/models/order.js +79 -0
- package/dist/test-utils/order/models/order.ts +107 -0
- package/dist/test-utils/order/models/product-variant.d.ts +31 -0
- package/dist/test-utils/order/models/product-variant.js +51 -0
- package/dist/test-utils/order/models/product-variant.ts +68 -0
- package/dist/test-utils/order/models/product.d.ts +25 -0
- package/dist/test-utils/order/models/product.js +41 -0
- package/dist/test-utils/order/models/product.ts +53 -0
- package/dist/test-utils/order/models/utm-source.d.ts +20 -0
- package/dist/test-utils/order/models/utm-source.js +26 -0
- package/dist/test-utils/order/models/utm-source.ts +33 -0
- package/dist/test-utils/order/orm.d.ts +47 -0
- package/dist/test-utils/order/orm.js +19 -0
- package/dist/test-utils/order/orm.ts +18 -0
- package/dist/test-utils/order-more/models/actual-product-variant.d.ts +18 -0
- package/dist/test-utils/order-more/models/actual-product-variant.js +24 -0
- package/dist/test-utils/order-more/models/actual-product-variant.ts +31 -0
- package/dist/test-utils/order-more/models/color.d.ts +21 -0
- package/dist/test-utils/order-more/models/color.js +33 -0
- package/dist/test-utils/order-more/models/color.ts +41 -0
- package/dist/test-utils/order-more/models/customer.d.ts +18 -0
- package/dist/test-utils/order-more/models/customer.js +24 -0
- package/dist/test-utils/order-more/models/customer.ts +29 -0
- package/dist/test-utils/order-more/models/gender.d.ts +19 -0
- package/dist/test-utils/order-more/models/gender.js +25 -0
- package/dist/test-utils/order-more/models/gender.ts +31 -0
- package/dist/test-utils/order-more/models/inventory-level.d.ts +27 -0
- package/dist/test-utils/order-more/models/inventory-level.js +41 -0
- package/dist/test-utils/order-more/models/inventory-level.ts +54 -0
- package/dist/test-utils/order-more/models/line-item.d.ts +31 -0
- package/dist/test-utils/order-more/models/line-item.js +50 -0
- package/dist/test-utils/order-more/models/line-item.ts +66 -0
- package/dist/test-utils/order-more/models/order.d.ts +50 -0
- package/dist/test-utils/order-more/models/order.js +90 -0
- package/dist/test-utils/order-more/models/order.ts +124 -0
- package/dist/test-utils/order-more/models/parcel-event.d.ts +22 -0
- package/dist/test-utils/order-more/models/parcel-event.js +33 -0
- package/dist/test-utils/order-more/models/parcel-event.ts +41 -0
- package/dist/test-utils/order-more/models/parcel-line-item.d.ts +23 -0
- package/dist/test-utils/order-more/models/parcel-line-item.js +33 -0
- package/dist/test-utils/order-more/models/parcel-line-item.ts +41 -0
- package/dist/test-utils/order-more/models/parcel.d.ts +17 -0
- package/dist/test-utils/order-more/models/parcel.js +23 -0
- package/dist/test-utils/order-more/models/parcel.ts +27 -0
- package/dist/test-utils/order-more/models/physical-address.d.ts +27 -0
- package/dist/test-utils/order-more/models/physical-address.js +45 -0
- package/dist/test-utils/order-more/models/physical-address.ts +59 -0
- package/dist/test-utils/order-more/models/product-variant-image.d.ts +23 -0
- package/dist/test-utils/order-more/models/product-variant-image.js +35 -0
- package/dist/test-utils/order-more/models/product-variant-image.ts +44 -0
- package/dist/test-utils/order-more/models/product-variant.d.ts +41 -0
- package/dist/test-utils/order-more/models/product-variant.js +63 -0
- package/dist/test-utils/order-more/models/product-variant.ts +86 -0
- package/dist/test-utils/order-more/models/product.d.ts +26 -0
- package/dist/test-utils/order-more/models/product.js +43 -0
- package/dist/test-utils/order-more/models/product.ts +56 -0
- package/dist/test-utils/order-more/models/refund.d.ts +27 -0
- package/dist/test-utils/order-more/models/refund.js +43 -0
- package/dist/test-utils/order-more/models/refund.ts +56 -0
- package/dist/test-utils/order-more/models/shipment-actual-product-variant.d.ts +25 -0
- package/dist/test-utils/order-more/models/shipment-actual-product-variant.js +37 -0
- package/dist/test-utils/order-more/models/shipment-actual-product-variant.ts +49 -0
- package/dist/test-utils/order-more/models/shipment.d.ts +19 -0
- package/dist/test-utils/order-more/models/shipment.js +29 -0
- package/dist/test-utils/order-more/models/shipment.ts +35 -0
- package/dist/test-utils/order-more/models/size.d.ts +19 -0
- package/dist/test-utils/order-more/models/size.js +25 -0
- package/dist/test-utils/order-more/models/size.ts +31 -0
- package/dist/test-utils/order-more/models/utm-medium.d.ts +19 -0
- package/dist/test-utils/order-more/models/utm-medium.js +25 -0
- package/dist/test-utils/order-more/models/utm-medium.ts +31 -0
- package/dist/test-utils/order-more/models/utm-source.d.ts +20 -0
- package/dist/test-utils/order-more/models/utm-source.js +26 -0
- package/dist/test-utils/order-more/models/utm-source.ts +33 -0
- package/dist/test-utils/order-more/orm.d.ts +47 -0
- package/dist/test-utils/order-more/orm.js +49 -0
- package/dist/test-utils/order-more/orm.ts +48 -0
- package/dist/test-utils/seven/results.json +32 -0
- package/dist/test-utils/six/models/customer.d.ts +18 -0
- package/dist/test-utils/six/models/customer.js +24 -0
- package/dist/test-utils/six/models/customer.ts +29 -0
- package/dist/test-utils/six/models/line-item.d.ts +20 -0
- package/dist/test-utils/six/models/line-item.js +29 -0
- package/dist/test-utils/six/models/line-item.ts +35 -0
- package/dist/test-utils/six/models/order.d.ts +20 -0
- package/dist/test-utils/six/models/order.js +29 -0
- package/dist/test-utils/six/models/order.ts +35 -0
- package/dist/test-utils/six/models/parcel-line-item.d.ts +23 -0
- package/dist/test-utils/six/models/parcel-line-item.js +33 -0
- package/dist/test-utils/six/models/parcel-line-item.ts +41 -0
- package/dist/test-utils/six/models/parcel.d.ts +17 -0
- package/dist/test-utils/six/models/parcel.js +23 -0
- package/dist/test-utils/six/models/parcel.ts +27 -0
- package/dist/test-utils/six/orm.d.ts +47 -0
- package/dist/test-utils/six/orm.js +19 -0
- package/dist/test-utils/six/orm.ts +17 -0
- package/dist/test-utils/six/results.json +26 -0
- package/dist/test-utils/ten/results.json +899 -0
- package/dist/test-utils/thirteen/models/audience.d.ts +17 -0
- package/dist/test-utils/thirteen/models/audience.js +23 -0
- package/dist/test-utils/thirteen/models/audience.ts +27 -0
- package/dist/test-utils/thirteen/models/brand.d.ts +17 -0
- package/dist/test-utils/thirteen/models/brand.js +23 -0
- package/dist/test-utils/thirteen/models/brand.ts +27 -0
- package/dist/test-utils/thirteen/models/category.d.ts +17 -0
- package/dist/test-utils/thirteen/models/category.js +23 -0
- package/dist/test-utils/thirteen/models/category.ts +27 -0
- package/dist/test-utils/thirteen/models/member.d.ts +17 -0
- package/dist/test-utils/thirteen/models/member.js +23 -0
- package/dist/test-utils/thirteen/models/member.ts +27 -0
- package/dist/test-utils/thirteen/models/passion.d.ts +17 -0
- package/dist/test-utils/thirteen/models/passion.js +23 -0
- package/dist/test-utils/thirteen/models/passion.ts +27 -0
- package/dist/test-utils/thirteen/models/product.d.ts +20 -0
- package/dist/test-utils/thirteen/models/product.js +29 -0
- package/dist/test-utils/thirteen/models/product.ts +35 -0
- package/dist/test-utils/thirteen/models/recommendation-audience.d.ts +23 -0
- package/dist/test-utils/thirteen/models/recommendation-audience.js +33 -0
- package/dist/test-utils/thirteen/models/recommendation-audience.ts +43 -0
- package/dist/test-utils/thirteen/models/recommendation.d.ts +32 -0
- package/dist/test-utils/thirteen/models/recommendation.js +45 -0
- package/dist/test-utils/thirteen/models/recommendation.ts +60 -0
- package/dist/test-utils/thirteen/orm.d.ts +47 -0
- package/dist/test-utils/thirteen/orm.js +25 -0
- package/dist/test-utils/thirteen/orm.ts +23 -0
- package/dist/test-utils/thirteen/results.json +74 -0
- package/dist/test-utils/three/results.js +422 -0
- package/dist/test-utils/twelve/models/member.d.ts +17 -0
- package/dist/test-utils/twelve/models/member.js +23 -0
- package/dist/test-utils/twelve/models/member.ts +27 -0
- package/dist/test-utils/twelve/models/prompt.d.ts +22 -0
- package/dist/test-utils/twelve/models/prompt.js +32 -0
- package/dist/test-utils/twelve/models/prompt.ts +40 -0
- package/dist/test-utils/twelve/orm.d.ts +47 -0
- package/dist/test-utils/twelve/orm.js +10 -0
- package/dist/test-utils/twelve/orm.ts +8 -0
- package/dist/test-utils/twelve/results.json +8 -0
- package/dist/test-utils/two/results.js +322 -0
- package/example/README.md +3 -0
- package/example/app.ts +12 -0
- package/example/data-access/person.ts +16 -0
- package/example/factories/db.ts +11 -0
- package/example/factories/orm.ts +10 -0
- package/example/models/employer.ts +36 -0
- package/example/models/job.ts +59 -0
- package/example/models/person.ts +42 -0
- package/package.json +18 -7
- package/src/factory.spec.ts +1048 -0
- package/src/factory.ts +733 -0
- package/src/index.ts +8 -0
- package/test-utils/blog/models/article.ts +65 -0
- package/test-utils/blog/models/article_tag.ts +41 -0
- package/test-utils/blog/models/person.ts +78 -0
- package/test-utils/blog/models/tag.ts +32 -0
- package/test-utils/blog/orm.ts +11 -0
- package/test-utils/five/models/line-item.ts +35 -0
- package/test-utils/five/models/order.ts +29 -0
- package/test-utils/five/models/parcel-event.ts +41 -0
- package/test-utils/five/models/parcel-line-item.ts +41 -0
- package/test-utils/five/models/parcel.ts +27 -0
- package/test-utils/five/orm.ts +17 -0
- package/test-utils/nine/models/feature-switch.ts +38 -0
- package/test-utils/nine/orm.ts +7 -0
- package/test-utils/order/models/line-item.ts +66 -0
- package/test-utils/order/models/order.ts +107 -0
- package/test-utils/order/models/product-variant.ts +68 -0
- package/test-utils/order/models/product.ts +53 -0
- package/test-utils/order/models/utm-source.ts +33 -0
- package/test-utils/order/orm.ts +18 -0
- package/test-utils/order-more/models/actual-product-variant.ts +31 -0
- package/test-utils/order-more/models/color.ts +41 -0
- package/test-utils/order-more/models/customer.ts +29 -0
- package/test-utils/order-more/models/gender.ts +31 -0
- package/test-utils/order-more/models/inventory-level.ts +54 -0
- package/test-utils/order-more/models/line-item.ts +66 -0
- package/test-utils/order-more/models/order.ts +124 -0
- package/test-utils/order-more/models/parcel-event.ts +41 -0
- package/test-utils/order-more/models/parcel-line-item.ts +41 -0
- package/test-utils/order-more/models/parcel.ts +27 -0
- package/test-utils/order-more/models/physical-address.ts +59 -0
- package/test-utils/order-more/models/product-variant-image.ts +44 -0
- package/test-utils/order-more/models/product-variant.ts +86 -0
- package/test-utils/order-more/models/product.ts +56 -0
- package/test-utils/order-more/models/refund.ts +56 -0
- package/test-utils/order-more/models/shipment-actual-product-variant.ts +49 -0
- package/test-utils/order-more/models/shipment.ts +35 -0
- package/test-utils/order-more/models/size.ts +31 -0
- package/test-utils/order-more/models/utm-medium.ts +31 -0
- package/test-utils/order-more/models/utm-source.ts +33 -0
- package/test-utils/order-more/orm.ts +48 -0
- package/test-utils/six/models/customer.ts +29 -0
- package/test-utils/six/models/line-item.ts +35 -0
- package/test-utils/six/models/order.ts +35 -0
- package/test-utils/six/models/parcel-line-item.ts +41 -0
- package/test-utils/six/models/parcel.ts +27 -0
- package/test-utils/six/orm.ts +17 -0
- package/test-utils/thirteen/models/audience.ts +27 -0
- package/test-utils/thirteen/models/brand.ts +27 -0
- package/test-utils/thirteen/models/category.ts +27 -0
- package/test-utils/thirteen/models/member.ts +27 -0
- package/test-utils/thirteen/models/passion.ts +27 -0
- package/test-utils/thirteen/models/product.ts +35 -0
- package/test-utils/thirteen/models/recommendation-audience.ts +43 -0
- package/test-utils/thirteen/models/recommendation.ts +60 -0
- package/test-utils/thirteen/orm.ts +23 -0
- package/test-utils/twelve/models/member.ts +27 -0
- package/test-utils/twelve/models/prompt.ts +40 -0
- package/test-utils/twelve/orm.ts +8 -0
- package/tsconfig.json +15 -0
- package/examples/basic/README.md +0 -3
- package/examples/basic/bo/person.js +0 -14
- package/examples/basic/dao/person.js +0 -20
- package/examples/basic/db.js +0 -16
- package/examples/basic/orm.js +0 -8
- package/examples/blog/bo/article.js +0 -35
- package/examples/blog/bo/article_tag.js +0 -27
- package/examples/blog/bo/article_tags.js +0 -10
- package/examples/blog/bo/articles.js +0 -10
- package/examples/blog/bo/person.js +0 -28
- package/examples/blog/bo/tag.js +0 -15
- package/examples/blog/business-objects.js +0 -1
- package/examples/blog/orm.js +0 -14
- package/examples/order/bo/line-item.js +0 -36
- package/examples/order/bo/line-items.js +0 -10
- package/examples/order/bo/order.js +0 -47
- package/examples/order/bo/orders.js +0 -10
- package/examples/order/bo/product-variant.js +0 -36
- package/examples/order/bo/product-variants.js +0 -10
- package/examples/order/bo/product.js +0 -31
- package/examples/order/bo/products.js +0 -10
- package/examples/order/bo/utm-source.js +0 -15
- package/examples/order/orm.js +0 -20
- package/examples/order-more/bo/actual-product-variant.js +0 -28
- package/examples/order-more/bo/actual-product-variants.js +0 -10
- package/examples/order-more/bo/color.js +0 -21
- package/examples/order-more/bo/colors.js +0 -10
- package/examples/order-more/bo/customer.js +0 -21
- package/examples/order-more/bo/customers.js +0 -10
- package/examples/order-more/bo/gender.js +0 -21
- package/examples/order-more/bo/genders.js +0 -10
- package/examples/order-more/bo/inventory-level.js +0 -31
- package/examples/order-more/bo/inventory-levels.js +0 -10
- package/examples/order-more/bo/line-item.js +0 -36
- package/examples/order-more/bo/line-items.js +0 -10
- package/examples/order-more/bo/order.js +0 -52
- package/examples/order-more/bo/orders.js +0 -10
- package/examples/order-more/bo/parcel-event.js +0 -22
- package/examples/order-more/bo/parcel-events.js +0 -10
- package/examples/order-more/bo/parcel-line-item.js +0 -27
- package/examples/order-more/bo/parcel-line-items.js +0 -10
- package/examples/order-more/bo/parcel.js +0 -21
- package/examples/order-more/bo/parcels.js +0 -10
- package/examples/order-more/bo/physical-address.js +0 -33
- package/examples/order-more/bo/physical-addresses.js +0 -13
- package/examples/order-more/bo/product-variant-image.js +0 -28
- package/examples/order-more/bo/product-variant-images.js +0 -10
- package/examples/order-more/bo/product-variant.js +0 -42
- package/examples/order-more/bo/product-variants.js +0 -10
- package/examples/order-more/bo/product.js +0 -32
- package/examples/order-more/bo/products.js +0 -10
- package/examples/order-more/bo/refund.js +0 -31
- package/examples/order-more/bo/refunds.js +0 -10
- package/examples/order-more/bo/shipment-actual-product-variant.js +0 -29
- package/examples/order-more/bo/shipment-actual-product-variants.js +0 -10
- package/examples/order-more/bo/shipment.js +0 -21
- package/examples/order-more/bo/shipments.js +0 -10
- package/examples/order-more/bo/size.js +0 -21
- package/examples/order-more/bo/sizes.js +0 -10
- package/examples/order-more/bo/utm-medium.js +0 -15
- package/examples/order-more/bo/utm-source.js +0 -15
- package/examples/order-more/orm.js +0 -49
- package/src/bo.js +0 -393
- package/src/bo.spec.js +0 -583
- package/src/factory.js +0 -167
- package/src/factory.spec.js +0 -11
- package/src/index.js +0 -50
- package/test-utils/five/bo/base.js +0 -5
- package/test-utils/five/bo/line-item.js +0 -22
- package/test-utils/five/bo/line-items.js +0 -10
- package/test-utils/five/bo/order.js +0 -21
- package/test-utils/five/bo/orders.js +0 -10
- package/test-utils/five/bo/parcel-event.js +0 -22
- package/test-utils/five/bo/parcel-events.js +0 -10
- package/test-utils/five/bo/parcel-line-item.js +0 -27
- package/test-utils/five/bo/parcel-line-items.js +0 -10
- package/test-utils/five/bo/parcel.js +0 -21
- package/test-utils/five/bo/parcels.js +0 -10
- package/test-utils/five/orm.js +0 -19
- package/test-utils/nine/bo/base.js +0 -5
- package/test-utils/nine/bo/feature-switch.js +0 -21
- package/test-utils/nine/bo/feature-switches.js +0 -13
- package/test-utils/nine/orm.js +0 -9
- package/test-utils/six/bo/base.js +0 -5
- package/test-utils/six/bo/customer.js +0 -21
- package/test-utils/six/bo/customers.js +0 -10
- package/test-utils/six/bo/line-item.js +0 -22
- package/test-utils/six/bo/line-items.js +0 -10
- package/test-utils/six/bo/order.js +0 -22
- package/test-utils/six/bo/orders.js +0 -10
- package/test-utils/six/bo/parcel-line-item.js +0 -27
- package/test-utils/six/bo/parcel-line-items.js +0 -10
- package/test-utils/six/bo/parcel.js +0 -21
- package/test-utils/six/bo/parcels.js +0 -10
- package/test-utils/six/orm.js +0 -19
- package/test-utils/thirteen/bo/audience.js +0 -21
- package/test-utils/thirteen/bo/audiences.js +0 -10
- package/test-utils/thirteen/bo/base.js +0 -5
- package/test-utils/thirteen/bo/brand.js +0 -21
- package/test-utils/thirteen/bo/brands.js +0 -10
- package/test-utils/thirteen/bo/categories.js +0 -13
- package/test-utils/thirteen/bo/category.js +0 -21
- package/test-utils/thirteen/bo/member.js +0 -21
- package/test-utils/thirteen/bo/members.js +0 -10
- package/test-utils/thirteen/bo/passion.js +0 -21
- package/test-utils/thirteen/bo/passions.js +0 -10
- package/test-utils/thirteen/bo/product.js +0 -22
- package/test-utils/thirteen/bo/products.js +0 -10
- package/test-utils/thirteen/bo/recommendation-audience.js +0 -27
- package/test-utils/thirteen/bo/recommendation-audiences.js +0 -10
- package/test-utils/thirteen/bo/recommendation.js +0 -33
- package/test-utils/thirteen/bo/recommendations.js +0 -10
- package/test-utils/thirteen/orm.js +0 -25
- package/test-utils/twelve/bo/base.js +0 -5
- package/test-utils/twelve/bo/member.js +0 -19
- package/test-utils/twelve/bo/members.js +0 -10
- package/test-utils/twelve/bo/prompt.js +0 -23
- package/test-utils/twelve/bo/prompts.js +0 -10
- package/test-utils/twelve/orm.js +0 -10
package/README.md
CHANGED
|
@@ -29,138 +29,39 @@ The name _**pure**ORM_ reflects both of these points - that it is _pure_ ORM (th
|
|
|
29
29
|
|
|
30
30
|
#### Concepts
|
|
31
31
|
|
|
32
|
-
A **
|
|
32
|
+
A **Model** is a pure javascript business object corresponding to a table.
|
|
33
33
|
|
|
34
|
+
- In PureORM these pure business objects are referred to as "models".
|
|
34
35
|
- They represent a row of the table data, but as pure javascript objects.
|
|
35
36
|
- They are not connected to the database.
|
|
36
37
|
- They are the subject of the app's business logic.
|
|
37
38
|
- They will be full of userland business logic methods.
|
|
38
39
|
- Their purity allows them to be easy to test/use.
|
|
39
|
-
- These are also referred to as "models".
|
|
40
40
|
|
|
41
|
-
A **
|
|
41
|
+
A **Collection** is a pure business object with a reference to a group of models.
|
|
42
42
|
|
|
43
|
-
- If your query returns records for multiple
|
|
44
|
-
- You can create
|
|
43
|
+
- If your query returns records for multiple models, a Collection will be created and returned.
|
|
44
|
+
- You can create the Collection class (in cases where it is useful to have business methods on the collection object, not just each model object).
|
|
45
45
|
|
|
46
|
-
A **Data Access Layer**
|
|
46
|
+
A **Data Access Layer** is a database-aware abstraction layer where native SQL is written.
|
|
47
47
|
|
|
48
48
|
- This is not an "expresion language" or "query builder". There are not hundreds of methods mapping the complexity, expressiveness, and nuance of SQL to class objects.
|
|
49
49
|
- Rather, is a data access layer in which native SQL is written, and which returns business objects (properly nested and structured).
|
|
50
50
|
|
|
51
|
-
## Quick Example
|
|
52
|
-
|
|
53
|
-
Using PureORM allows you to write code like this:
|
|
54
|
-
|
|
55
|
-
```javascript
|
|
56
|
-
// ./dal/person.js
|
|
57
|
-
const getPerson = ({ id }) => {
|
|
58
|
-
const query = `
|
|
59
|
-
SELECT
|
|
60
|
-
${orm.tables.person.columns},
|
|
61
|
-
${orm.tables.job.columns},
|
|
62
|
-
${orm.tables.employer.columns}
|
|
63
|
-
FROM person
|
|
64
|
-
JOIN job on person.id = job.person_id
|
|
65
|
-
JOIN employer on job.employer_id = employer.id
|
|
66
|
-
WHERE id = $(id)
|
|
67
|
-
`;
|
|
68
|
-
return orm.one(query, { id });
|
|
69
|
-
};
|
|
70
|
-
|
|
71
|
-
// ./controllers/rest/person.js
|
|
72
|
-
const { getPerson } = require('./dal/person');
|
|
73
|
-
const get = (req, res) => {
|
|
74
|
-
const person = await getPerson({ id: req.params.id });
|
|
75
|
-
res.json(person);
|
|
76
|
-
};
|
|
77
|
-
```
|
|
78
|
-
|
|
79
|
-
Which a GET to that controller would return
|
|
80
|
-
|
|
81
|
-
```javascript
|
|
82
|
-
Person {
|
|
83
|
-
id: 55,
|
|
84
|
-
name: 'John Doe',
|
|
85
|
-
jobs: JobsCollection {
|
|
86
|
-
models: [
|
|
87
|
-
Job {
|
|
88
|
-
id: 277,
|
|
89
|
-
personId: 55,
|
|
90
|
-
employerId: 17,
|
|
91
|
-
startDate: '2020-01-01',
|
|
92
|
-
endDate: '2020-12-31',
|
|
93
|
-
employer: Employer {
|
|
94
|
-
id: 17,
|
|
95
|
-
name: 'Good Corp',
|
|
96
|
-
}
|
|
97
|
-
},
|
|
98
|
-
Job {
|
|
99
|
-
id: 278,
|
|
100
|
-
personId: 55,
|
|
101
|
-
employerId: 26,
|
|
102
|
-
startDate: '2021-01-01',
|
|
103
|
-
endDate: '2021-12-31',
|
|
104
|
-
employer: Employer {
|
|
105
|
-
id: 26,
|
|
106
|
-
name: 'Better Corp',
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
]
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
```
|
|
113
|
-
|
|
114
|
-
> This is a quick showcase. To see how to wire up this code, see the full [Practical Example](#practical-example) below.
|
|
115
|
-
|
|
116
|
-
### Things to Note:
|
|
117
|
-
|
|
118
|
-
- Our DAL function returns a single Person business object which is properly structured from the many relational row records!
|
|
119
|
-
- Our query is executed with a `one` method. The ORM methods for `one`, `oneOrNone`, `many`, `any` ensure their count against the number of generated top level business objects - not the number of relational row records the sql expression returns!
|
|
120
|
-
- Rather than manually specifying our columns in the sql select expression, we used the orm's getter for columns. This is purely a convenience method which namespaces each column with the table name prefix to ensure column names don't collide (for example, the person, job, and employer `id`s would collide if not namespaced, as would person and employer `name`s). You are welcome to do this by hand instead of using this convenience if you don't mind the tedium:
|
|
121
|
-
```javascript
|
|
122
|
-
// ./dal/person.js
|
|
123
|
-
const getPerson = ({ id }) => {
|
|
124
|
-
// Example showing you can manually specify the select expression fields
|
|
125
|
-
// instead of using the orm's columns getter.
|
|
126
|
-
// Note: you must namespace the field with table name and hashtag.
|
|
127
|
-
const query = `
|
|
128
|
-
SELECT
|
|
129
|
-
person.id as "person#id",
|
|
130
|
-
person.name as "person#name",
|
|
131
|
-
job.id as "job#id",
|
|
132
|
-
job.person_id: "job#person_id",
|
|
133
|
-
job.employer_id: "job#employer_id",
|
|
134
|
-
job.start_date: "job#start_date",
|
|
135
|
-
job.end_date: "job#end_date",
|
|
136
|
-
employer.id as "employer#id",
|
|
137
|
-
employer.name as "employer#name"
|
|
138
|
-
FROM person
|
|
139
|
-
JOIN job on person.id = job.person_id
|
|
140
|
-
JOIN employer on job.employer_id = employer.id
|
|
141
|
-
WHERE id = $(id)
|
|
142
|
-
`;
|
|
143
|
-
return orm.one(query, { id });
|
|
144
|
-
};
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Usage
|
|
148
|
-
|
|
149
|
-
The exports you'll use from pure-orm:
|
|
150
|
-
|
|
151
|
-
- `create` is a factory to create your ORM. This factory function accepts an object with two properties.
|
|
152
|
-
- `getBusinessObjects` which is a function that returns an array of all your business object classes (where each business object must implement static `table` and `sqlColumnsData` fields.
|
|
153
|
-
- `db` which is an instance of the database driver.
|
|
154
|
-
|
|
155
51
|
## Practical Example
|
|
156
52
|
|
|
157
53
|
Lets take a practical example to see all this in action. Lets fill in the backend for a tiny rest server for a person.
|
|
158
54
|
|
|
159
55
|
Lets say we have a database with three tables: person, job, and employer. We want our rest server to return an payload like this for requests which the get method receive.
|
|
160
56
|
|
|
161
|
-
```
|
|
162
|
-
//
|
|
163
|
-
|
|
57
|
+
```typescript
|
|
58
|
+
// app.ts
|
|
59
|
+
import express, { Express, Request, Response } from 'express';
|
|
60
|
+
|
|
61
|
+
const app: Express = express();
|
|
62
|
+
const port = process.env.PORT;
|
|
63
|
+
|
|
64
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
164
65
|
const person = {
|
|
165
66
|
id: 55,
|
|
166
67
|
name: 'John Doe',
|
|
@@ -192,22 +93,43 @@ const get = (req, res) => {
|
|
|
192
93
|
}
|
|
193
94
|
};
|
|
194
95
|
res.json(person);
|
|
195
|
-
};
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
app.listen(port);
|
|
196
99
|
```
|
|
197
100
|
|
|
198
|
-
Based on the tables
|
|
101
|
+
Based on the tables with this data:
|
|
102
|
+
|
|
103
|
+
**Person**
|
|
104
|
+
| id | name |
|
|
105
|
+
| --- | --- |
|
|
106
|
+
| 55 | John Doe |
|
|
107
|
+
|
|
108
|
+
**Employer**
|
|
109
|
+
| id | name |
|
|
110
|
+
| --- | --- |
|
|
111
|
+
| 17 | Good Corp |
|
|
112
|
+
| 26 | Better Corp |
|
|
113
|
+
|
|
114
|
+
**Job**
|
|
115
|
+
| id | personId | employerId | startDate | endDate |
|
|
116
|
+
| --- | --- | --- | --- | ---|
|
|
117
|
+
| 277 | 55 | 17 | 2020-01-01 | 2020-12-31 |
|
|
118
|
+
| 278 | 55 | 26 | 2021-01-01 | 2021-12-31 |
|
|
119
|
+
|
|
120
|
+
I know exactly how I want to query for it:
|
|
199
121
|
|
|
200
122
|
```sql
|
|
201
123
|
SELECT *
|
|
202
124
|
FROM person
|
|
203
125
|
LEFT JOIN job on person.id = job.person_id
|
|
204
|
-
JOIN employer on job.employer_id = employer.id
|
|
205
|
-
WHERE id = 55;
|
|
126
|
+
LEFT JOIN employer on job.employer_id = employer.id
|
|
127
|
+
WHERE person.id = 55;
|
|
206
128
|
```
|
|
207
129
|
|
|
208
|
-
I already know how
|
|
130
|
+
I already know how SQL, and don't want to spend the time mapping what I already know how to do onto a huge, niche, library-specific API.
|
|
209
131
|
|
|
210
|
-
However, using this query with a database driver would give me a bunch of flat result records
|
|
132
|
+
However, using this query with a database driver would give me a bunch of flat result records (not one object that is properly structed/nested) and with collided fields (id from all three tables, name from person and employer, etc).
|
|
211
133
|
|
|
212
134
|
So, lets install PureORM and the database driver and get started!
|
|
213
135
|
|
|
@@ -220,14 +142,200 @@ npm install --save pure-orm
|
|
|
220
142
|
npm install --save pg-promise
|
|
221
143
|
```
|
|
222
144
|
|
|
223
|
-
### Step 2:
|
|
145
|
+
### Step 2: Creating the Business Objects
|
|
146
|
+
|
|
147
|
+
Let's create a `/models` directory of business object classes for our database tables. These classes need to implement a static getter for `tableName` and `sqlColumnsData` to denote the database table and columns.
|
|
148
|
+
|
|
149
|
+
```typescript
|
|
150
|
+
// models/person.ts
|
|
151
|
+
import { IModel, ICollection, IColumns, IEntity } from 'pure-orm';
|
|
152
|
+
|
|
153
|
+
export const tableName: string = 'person';
|
|
154
|
+
|
|
155
|
+
export const columns: IColumns = ['id', 'name'];
|
|
156
|
+
|
|
157
|
+
export class Person implements IModel {
|
|
158
|
+
id: number;
|
|
159
|
+
name: string;
|
|
160
|
+
constructor(props) {
|
|
161
|
+
this.id = props.id;
|
|
162
|
+
this.name = props.name;
|
|
163
|
+
}
|
|
164
|
+
// any business methods...
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
export const personEntity: IEntity = { tableName, columns, Model: Person };
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
```typescript
|
|
171
|
+
// models/job.ts
|
|
172
|
+
import { IModel, ICollection, IColumns, IEntity } from 'pure-orm';
|
|
173
|
+
import { Person } from './person';
|
|
174
|
+
import { Employer } from './employer';
|
|
175
|
+
|
|
176
|
+
export const tableName: string = 'job';
|
|
177
|
+
|
|
178
|
+
export const columns: IColumns = [
|
|
179
|
+
'id',
|
|
180
|
+
{ column: 'person_id', references: Person },
|
|
181
|
+
{ column: 'employer_id', references: Employer },
|
|
182
|
+
'start_date',
|
|
183
|
+
'end_date'
|
|
184
|
+
];
|
|
185
|
+
|
|
186
|
+
export class Job implements IModel {
|
|
187
|
+
id: number;
|
|
188
|
+
personId: number;
|
|
189
|
+
person?: Person;
|
|
190
|
+
employerId: number;
|
|
191
|
+
employer: Employer;
|
|
192
|
+
startDate: Date;
|
|
193
|
+
endDate: Date;
|
|
194
|
+
constructor(props) {
|
|
195
|
+
this.id = props.id;
|
|
196
|
+
this.personId = props.personId;
|
|
197
|
+
this.person = props.person;
|
|
198
|
+
this.employerId = props.employerId;
|
|
199
|
+
this.employer = props.employer;
|
|
200
|
+
this.startDate = props.startDate;
|
|
201
|
+
this.endDate = props.endDate;
|
|
202
|
+
}
|
|
203
|
+
// any business methods...
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
export const JobEntity: IEntity = { tableName, columns, Model: Job };
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
```typescript
|
|
210
|
+
// models/employer.ts
|
|
211
|
+
import { IModel, ICollection, IColumns, IEntity } from 'pure-orm';
|
|
212
|
+
|
|
213
|
+
export const tableName: string = 'employer';
|
|
214
|
+
|
|
215
|
+
export const columns: IColumns = ['id', 'name'];
|
|
216
|
+
|
|
217
|
+
export class Employer implements IModel {
|
|
218
|
+
id: number;
|
|
219
|
+
name: string;
|
|
220
|
+
constructor(props: IEmployerProps) {
|
|
221
|
+
this.id = props.id;
|
|
222
|
+
this.name = props.name;
|
|
223
|
+
}
|
|
224
|
+
// any business methods...
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
export const EmployerEntity: IEntity = { tableName, columns, Model: Employer };
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
We've not got our three entities that relate our table data to our business objects.
|
|
224
231
|
|
|
225
|
-
|
|
232
|
+
### Step 3: Creating our ORM
|
|
233
|
+
|
|
234
|
+
First we create our database driver:
|
|
235
|
+
|
|
236
|
+
```typescript
|
|
237
|
+
// ./factories/db.ts
|
|
238
|
+
import pgPromise from 'pg-promise';
|
|
239
|
+
const pgp = pgPromise();
|
|
240
|
+
const connectionObject = {
|
|
241
|
+
host: process.env.DB_HOSTNAME,
|
|
242
|
+
port: process.env.DB_PORT,
|
|
243
|
+
database: process.env.DB_NAME,
|
|
244
|
+
user: process.env.DB_USERNAME,
|
|
245
|
+
password: process.env.DB_PASSWORD
|
|
246
|
+
};
|
|
247
|
+
export const db = pgp(connectionObject);
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
We can now create our ORM, which layers atop the database driver to do the object relational mapping of raw sql row data to nest objects. (Besides using the `db` instance directly, the orm also offers access to the db directly (`orm.db`) for anytime this object relational mapping isn't desired.
|
|
251
|
+
|
|
252
|
+
```typescript
|
|
253
|
+
// factories/orm.ts
|
|
254
|
+
import { create } from 'pure-orm';
|
|
255
|
+
import { db } from './db';
|
|
256
|
+
import { personEntity } from '../models/person';
|
|
257
|
+
import { jobEntity } from '../models/job';
|
|
258
|
+
import { employerEntity } from '../models/employer';
|
|
259
|
+
const orm = create({
|
|
260
|
+
getEntities: () => [personEntity, jobEntity, employerEntity],
|
|
261
|
+
db
|
|
262
|
+
});
|
|
263
|
+
export default orm;
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Step 4: Creating our Data Access Layer
|
|
267
|
+
|
|
268
|
+
Let's now create a data access directory with a person file for data access operations related to a person.
|
|
269
|
+
|
|
270
|
+
```typescript
|
|
271
|
+
// data-access/person.ts
|
|
272
|
+
import orm from '../factories/orm';
|
|
273
|
+
import { Person } from '../models/person';
|
|
274
|
+
|
|
275
|
+
export const getPerson = (id: number): Person => {
|
|
276
|
+
const query = `
|
|
277
|
+
SELECT
|
|
278
|
+
${orm.tables.person.columns},
|
|
279
|
+
${orm.tables.job.columns},
|
|
280
|
+
${orm.tables.employer.columns}
|
|
281
|
+
FROM person
|
|
282
|
+
LEFT JOIN job on person.id = job.person_id
|
|
283
|
+
LEFT JOIN employer on job.employer_id = employer.id
|
|
284
|
+
WHERE id = $(id)
|
|
285
|
+
`;
|
|
286
|
+
return orm.one(query, { id });
|
|
287
|
+
};
|
|
288
|
+
```
|
|
289
|
+
|
|
290
|
+
Some things to note:
|
|
291
|
+
|
|
292
|
+
- Our data access function returns a single Person model which is properly structured from the many relational row records!
|
|
293
|
+
- Our query is executed with a `one` method. The ORM methods for `one`, `oneOrNone`, `many`, `any` ensure their count against the number of generated top level models - not the number of relational row records the sql expression returns!
|
|
294
|
+
- Rather than manually specifying our columns in the sql select expression, we used the orm's getter for columns. This is purely a convenience method which namespaces each column with the table name prefix to ensure column names don't collide (for example, the person, job, and employer `id`s would collide if not namespaced, as would person and employer `name`s). You are welcome to do this by hand instead of using this convenience if you don't mind the tedium:
|
|
295
|
+
|
|
296
|
+
```typescript
|
|
297
|
+
// data-access/person.ts
|
|
298
|
+
import orm from '../factories/orm';
|
|
299
|
+
import { Person } from '../models/person';
|
|
300
|
+
|
|
301
|
+
const getPerson(id) {
|
|
302
|
+
// Example showing you can manually specify the select expression fields
|
|
303
|
+
// instead of using the orm's columns getter.
|
|
304
|
+
// Note: you must namespace the field with table name and hashtag.
|
|
305
|
+
const query = `
|
|
306
|
+
SELECT
|
|
307
|
+
person.id as "person#id",
|
|
308
|
+
person.name as "person#name",
|
|
309
|
+
job.id as "job#id",
|
|
310
|
+
job.person_id: "job#person_id",
|
|
311
|
+
job.employer_id: "job#employer_id",
|
|
312
|
+
job.start_date: "job#start_date",
|
|
313
|
+
job.end_date: "job#end_date",
|
|
314
|
+
employer.id as "employer#id",
|
|
315
|
+
employer.name as "employer#name"
|
|
316
|
+
FROM person
|
|
317
|
+
LEFT JOIN job on person.id = job.person_id
|
|
318
|
+
LEFT JOIN employer on job.employer_id = employer.id
|
|
319
|
+
WHERE id = $(id)
|
|
320
|
+
`;
|
|
321
|
+
return orm.one(query, { id });
|
|
322
|
+
}
|
|
323
|
+
module.exports = getPerson;
|
|
324
|
+
```
|
|
325
|
+
|
|
326
|
+
### Step 5: Writing the Controller Code
|
|
327
|
+
|
|
328
|
+
We can now return to our controller code, and use our person data access function.
|
|
226
329
|
|
|
227
330
|
```diff
|
|
228
|
-
//
|
|
229
|
-
|
|
230
|
-
|
|
331
|
+
// app.ts
|
|
332
|
+
import express, { Express, Request, Response } from 'express';
|
|
333
|
+
+import { getPerson } from './data-access/person';
|
|
334
|
+
|
|
335
|
+
const app: Express = express();
|
|
336
|
+
const port = process.env.PORT;
|
|
337
|
+
|
|
338
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
231
339
|
- const person = {
|
|
232
340
|
- id: 55,
|
|
233
341
|
- name: 'John Doe',
|
|
@@ -241,7 +349,7 @@ const renderProfile = (req, res) => {
|
|
|
241
349
|
- endDate: '2020-12-31',
|
|
242
350
|
- employer: {
|
|
243
351
|
- id: 17,
|
|
244
|
-
- name: 'Good Corp'
|
|
352
|
+
- name: 'Good Corp'
|
|
245
353
|
- }
|
|
246
354
|
- },
|
|
247
355
|
- {
|
|
@@ -252,185 +360,198 @@ const renderProfile = (req, res) => {
|
|
|
252
360
|
- endDate: '2021-12-31',
|
|
253
361
|
- employer: {
|
|
254
362
|
- id: 26,
|
|
255
|
-
- name: 'Better Corp'
|
|
363
|
+
- name: 'Better Corp'
|
|
256
364
|
- }
|
|
257
365
|
- }
|
|
258
366
|
- ]
|
|
259
367
|
- }
|
|
260
368
|
- };
|
|
261
|
-
+ const person = getPerson(
|
|
262
|
-
res.
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
This looks nice, now let's create the necessary bo and function in the dal.
|
|
266
|
-
|
|
267
|
-
### Step 3: Creating the Business Objects
|
|
268
|
-
|
|
269
|
-
Let's create a `/bo` directory and the classes we want.
|
|
270
|
-
|
|
271
|
-
```javascript
|
|
272
|
-
// ./bo/person.js
|
|
273
|
-
class Person {
|
|
274
|
-
static tableName = 'person';
|
|
275
|
-
static sqlColumnsData = ['id', 'name'];
|
|
276
|
-
// any other business methods...
|
|
277
|
-
}
|
|
278
|
-
module.exports = Person;
|
|
279
|
-
```
|
|
369
|
+
+ const person = getPerson(req.params.id);
|
|
370
|
+
res.json(person);
|
|
371
|
+
});
|
|
280
372
|
|
|
281
|
-
|
|
282
|
-
// ./bo/job.js
|
|
283
|
-
const Person = require('./person');
|
|
284
|
-
const Employer = require('./employer');
|
|
285
|
-
|
|
286
|
-
class Job {
|
|
287
|
-
static tableName = 'job';
|
|
288
|
-
static sqlColumnsData = [
|
|
289
|
-
'id',
|
|
290
|
-
{ column: 'person_id', references: Person },
|
|
291
|
-
{ column: 'employer_id', references: Employer },
|
|
292
|
-
'start_date',
|
|
293
|
-
'end_date'
|
|
294
|
-
];
|
|
295
|
-
// any other business methods...
|
|
296
|
-
}
|
|
297
|
-
module.exports = Job;
|
|
373
|
+
app.listen(port);
|
|
298
374
|
```
|
|
299
375
|
|
|
300
|
-
|
|
301
|
-
// ./bo/employer.js
|
|
302
|
-
class Employer {
|
|
303
|
-
static tableName = 'employer';
|
|
304
|
-
static sqlColumnsData = ['id', 'name'];
|
|
305
|
-
// any other business methods...
|
|
306
|
-
}
|
|
307
|
-
module.exports = Employer;
|
|
308
|
-
```
|
|
376
|
+
That's it! This controller code now works! The `getPerson` function returns a properly structured business object as we desire.
|
|
309
377
|
|
|
310
|
-
|
|
378
|
+
## API
|
|
311
379
|
|
|
312
|
-
|
|
313
|
-
- A static `sqlColumnsData` property to enumerate the table columns.
|
|
380
|
+
### `create`
|
|
314
381
|
|
|
315
|
-
|
|
382
|
+
```typescript
|
|
383
|
+
function create(options: {
|
|
384
|
+
getEntities: () => Array<IEntity>;
|
|
385
|
+
db: DataBaseDriver;
|
|
386
|
+
}): PureORM;
|
|
387
|
+
```
|
|
316
388
|
|
|
317
|
-
|
|
318
|
-
// ./factories/orm.js
|
|
319
|
-
const db = require('./db');
|
|
320
|
-
const { create } = require('pure-orm');
|
|
321
|
-
const Person = require('./person');
|
|
322
|
-
const Job = require('./job');
|
|
323
|
-
const Employer = require('./employer');
|
|
389
|
+
The factory function for creating your ORM.
|
|
324
390
|
|
|
325
|
-
|
|
326
|
-
db,
|
|
327
|
-
getBusinessObjects: () => [Person, Job, Employer]
|
|
328
|
-
});
|
|
329
|
-
module.exports = BaseBO;
|
|
330
|
-
```
|
|
391
|
+
**Parameters**
|
|
331
392
|
|
|
332
|
-
|
|
393
|
+
- `getEntities: () => Array<IEntity>` - A function which returns an array of all the business object class entity configuration objects.
|
|
394
|
+
- `db: <DataBaseDriverInstance>` - A database driver instance.
|
|
333
395
|
|
|
334
|
-
|
|
335
|
-
// ./dal/person.js
|
|
336
|
-
const orm = require('../factories/orm');
|
|
396
|
+
**Return Value**
|
|
337
397
|
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
398
|
+
Your `PureORM` instance, which is of this interface:
|
|
399
|
+
|
|
400
|
+
```typescript
|
|
401
|
+
interface PureORM {
|
|
402
|
+
/* ------------------------------------------------------------------------*/
|
|
403
|
+
/* Query methods ----------------------------------------------------------*/
|
|
404
|
+
/* ------------------------------------------------------------------------*/
|
|
405
|
+
|
|
406
|
+
/* Note these query methods ensure their count against the number of
|
|
407
|
+
* generated top level business objects which are created - not the number
|
|
408
|
+
* of relational rows returned from the database driver! Thus, for example,
|
|
409
|
+
* `one` understands that there may be multiple result rows (which a
|
|
410
|
+
* database driver's `one` query method would throw at) but which correctly
|
|
411
|
+
* nest into one Model.)
|
|
412
|
+
*/
|
|
413
|
+
|
|
414
|
+
// Execute a query returning a single model, or throws.
|
|
415
|
+
one: <T extends IModel>(
|
|
416
|
+
query: string,
|
|
417
|
+
values?: object,
|
|
418
|
+
errorHandler = defaultErrorHandler
|
|
419
|
+
) => T;
|
|
420
|
+
|
|
421
|
+
// Execute a query returning either single model or undefined, or throws.
|
|
422
|
+
oneOrNone: <T extends IModel>(
|
|
423
|
+
query: string,
|
|
424
|
+
values?: object,
|
|
425
|
+
errorHandler = defaultErrorHandler
|
|
426
|
+
) => T | void;
|
|
427
|
+
|
|
428
|
+
// Execute a query returning a Collection with at least one model, or throws.
|
|
429
|
+
many: <T extends ICollection<IModel>>(
|
|
430
|
+
query: string,
|
|
431
|
+
values?: object,
|
|
432
|
+
errorHandler = defaultErrorHandler
|
|
433
|
+
) => T;
|
|
434
|
+
|
|
435
|
+
// Execute a query returning a Collection.
|
|
436
|
+
any: <T extends ICollection<IModel>>(
|
|
437
|
+
query: string,
|
|
438
|
+
values?: object,
|
|
439
|
+
errorHandler = defaultErrorHandler
|
|
440
|
+
) => T | void;
|
|
441
|
+
|
|
442
|
+
// Execute a query returning null.
|
|
443
|
+
none: (
|
|
444
|
+
query: string,
|
|
445
|
+
values?: object,
|
|
446
|
+
errorHandler = defaultErrorHandler
|
|
447
|
+
) => void;
|
|
448
|
+
|
|
449
|
+
/* ------------------------------------------------------------------------*/
|
|
450
|
+
/* Built-in basic CRUD functions ------------------------------------------*/
|
|
451
|
+
/* ------------------------------------------------------------------------*/
|
|
452
|
+
|
|
453
|
+
/* These are just provided because they are so common and straight-forward.
|
|
454
|
+
* While the goal of this library is foster writing SQL in your data access
|
|
455
|
+
* layer (which returns pure business objects) some CRUD operations are so
|
|
456
|
+
* common they are included in the ORM. Feel free to completely disregard
|
|
457
|
+
* if you want to write these in your data access layer yourself.
|
|
458
|
+
*/
|
|
459
|
+
|
|
460
|
+
getMatching: <T extends IModel>(model: T) => T;
|
|
461
|
+
getOneOrNoneMatching: <T extends IModel>(model: T) => T | void;
|
|
462
|
+
getAnyMatching: <T extends ICollection<IModel>>(model: IModel) => T | void;
|
|
463
|
+
getAllMatching: <T extends ICollection<IModel>>(model: IModel) => T;
|
|
464
|
+
create: <T extends IModel>(model: T) => T;
|
|
465
|
+
update: <T extends IModel>(model: T, { on = 'id' } = {}) => T;
|
|
466
|
+
_delete: <T extends IModel>(model: T) => void;
|
|
467
|
+
deleteMatching: <T extends IModel>(model => T);
|
|
468
|
+
|
|
469
|
+
/* ------------------------------------------------------------------------*/
|
|
470
|
+
/* Built-in basic CRUD functions ------------------------------------------*/
|
|
471
|
+
/* ------------------------------------------------------------------------*/
|
|
472
|
+
|
|
473
|
+
/* The tables property gives access to the sql select clause string for
|
|
474
|
+
* each entity based on it's `displayName`. This property can be used when
|
|
475
|
+
* writing raw SQL as the select clause, which handles quoting column names
|
|
476
|
+
* and namespacing them to the table to avoid collisions and as required
|
|
477
|
+
* for PureORM mapping.
|
|
478
|
+
*/
|
|
479
|
+
|
|
480
|
+
tables: { [key:string]: { [key: string]: string; }};
|
|
350
481
|
}
|
|
351
|
-
module.exports = getPerson;
|
|
352
482
|
```
|
|
353
483
|
|
|
354
|
-
|
|
484
|
+
## FAQ
|
|
355
485
|
|
|
356
|
-
###
|
|
486
|
+
### Can you show the business objects of a more complex entity?
|
|
357
487
|
|
|
358
|
-
|
|
488
|
+
```typescript
|
|
489
|
+
import { IModel, ICollection, IColumns, IEntity } from 'pure-orm';
|
|
359
490
|
|
|
360
|
-
|
|
361
|
-
// ./factories/db.js
|
|
362
|
-
const pgPromise = require('pg-promise');
|
|
363
|
-
const pgp = pgPromise();
|
|
364
|
-
module.exports = pgp({
|
|
365
|
-
host: process.env.DB_HOSTNAME,
|
|
366
|
-
port: process.env.DB_PORT,
|
|
367
|
-
database: process.env.DB_NAME,
|
|
368
|
-
user: process.env.DB_USERNAME,
|
|
369
|
-
password: process.env.DB_PASSWORD
|
|
370
|
-
});
|
|
371
|
-
```
|
|
491
|
+
export const tableName: string = 'library_v2';
|
|
372
492
|
|
|
373
|
-
|
|
493
|
+
export const columns: IColumns = [
|
|
494
|
+
'id',
|
|
495
|
+
'name',
|
|
496
|
+
{ column: 'is_ala_member', property: 'isALAMember' },
|
|
497
|
+
{ column: 'address_id', references: Address }
|
|
498
|
+
];
|
|
374
499
|
|
|
375
|
-
|
|
500
|
+
export const displayName = 'library';
|
|
501
|
+
export const collectionDisplayName = 'libraries';
|
|
376
502
|
|
|
377
|
-
|
|
503
|
+
interface ILibraryProps {
|
|
504
|
+
id: number;
|
|
505
|
+
name: string;
|
|
506
|
+
isALAMember: string;
|
|
507
|
+
addressId: number;
|
|
508
|
+
address: Address;
|
|
509
|
+
}
|
|
378
510
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
}
|
|
389
|
-
static get displayName() {
|
|
390
|
-
// If we didn't provide this static field, in javascript an object
|
|
391
|
-
// referencing a library bo would use `libraryV2` as the property name.
|
|
392
|
-
return 'library';
|
|
393
|
-
}
|
|
394
|
-
static get sqlColumnsData() {
|
|
395
|
-
return [
|
|
396
|
-
'id',
|
|
397
|
-
'name',
|
|
398
|
-
{ column: 'is_ala_member', property: 'isALAMember' },
|
|
399
|
-
{ column: 'address', references: Address }
|
|
400
|
-
];
|
|
511
|
+
export class Library implements IModel {
|
|
512
|
+
id: number;
|
|
513
|
+
name: string;
|
|
514
|
+
constructor(props: ILibraryProps) {
|
|
515
|
+
this.id = props.id;
|
|
516
|
+
this.name = props.name;
|
|
517
|
+
this.isALAMember = props.isALAMember;
|
|
518
|
+
this.addressId = props.addressId;
|
|
519
|
+
this.address = props.address;
|
|
401
520
|
}
|
|
402
521
|
aBussinessObjectMethod() {}
|
|
403
522
|
anotherBussinessObjectMethod() {}
|
|
404
523
|
}
|
|
405
|
-
```
|
|
406
524
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
return
|
|
412
|
-
}
|
|
413
|
-
static get displayName() {
|
|
414
|
-
// If we didn't provide this static field, in javascript an object
|
|
415
|
-
// referencing this collection would use `librarys` as the property name.
|
|
416
|
-
return 'libraries';
|
|
525
|
+
export class Persons implements ICollection<Person> {
|
|
526
|
+
models: Array<Person>;
|
|
527
|
+
constructor({ models }: any) {
|
|
528
|
+
this.models = models;
|
|
529
|
+
return this;
|
|
417
530
|
}
|
|
418
531
|
aCollectionMethod() {}
|
|
419
532
|
anotherCollectionMethod() {}
|
|
420
533
|
}
|
|
534
|
+
|
|
535
|
+
export const personEntity: IEntity = {
|
|
536
|
+
tableName,
|
|
537
|
+
displayName,
|
|
538
|
+
collectionDisplayName,
|
|
539
|
+
columns,
|
|
540
|
+
Model: Person,
|
|
541
|
+
Collection: Persons
|
|
542
|
+
};
|
|
421
543
|
```
|
|
422
544
|
|
|
423
545
|
### If I use PureORM do I have to re-invent all the super basic CRUD methods?
|
|
424
546
|
|
|
425
547
|
The goal of PureORM is to foster writing SQL and receiving pure business objects. That said, some SQL is so common that we preload the created ORM with with some basic CRUD operations.
|
|
426
548
|
|
|
427
|
-
For example, rather than every entity
|
|
549
|
+
For example, rather than every entity needing data access operatons for get, create, etc method, you can use built-in orm functions.
|
|
428
550
|
|
|
429
|
-
```
|
|
430
|
-
|
|
431
|
-
const get = (req, res) => {
|
|
551
|
+
```typescript
|
|
552
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
432
553
|
if (req.params.id) {
|
|
433
|
-
return res.json(await orm.
|
|
554
|
+
return res.json(await orm.getMatching(new Person({ id })));
|
|
434
555
|
}
|
|
435
556
|
if (req.query.name) {
|
|
436
557
|
return res.json(
|
|
@@ -443,12 +564,12 @@ const get = (req, res) => {
|
|
|
443
564
|
};
|
|
444
565
|
```
|
|
445
566
|
|
|
446
|
-
At any point you can ditch these built-ins and write some SQL in a
|
|
567
|
+
At any point you can ditch these built-ins and write some SQL in a data access function.
|
|
447
568
|
|
|
448
|
-
```
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
569
|
+
```typescript
|
|
570
|
+
import { getPerson, getPeopleWithName } from '../../data-access/person';
|
|
571
|
+
|
|
572
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
452
573
|
if (req.params.id) {
|
|
453
574
|
return res.json(await getPerson(id));
|
|
454
575
|
}
|
|
@@ -465,13 +586,13 @@ const get = (req, res) => {
|
|
|
465
586
|
|
|
466
587
|
Traditional/stateful ORMs offer a dialetic-generic, chainable object api for expressing underlying SQL - thus solving for database "lock-in" as well the inability of string queries compose easily. PureORM takes the approach that the tradeoff of developers having to learn the huge surface area of of a query builder, and having to map the complexity and nuance of SQL to it, are simply not worth the cost, and so is premised on not using a query building library. PureORM sees writing straight SQL heaviliy as a feature, not a defect needing solved, and not eclipsed by the composibility of a query builder.
|
|
467
588
|
|
|
468
|
-
### Will I then have dozens of similar
|
|
589
|
+
### Will I then have dozens of similar data access functions, since strings aren't as composable as stateful ORM builder builder APIs?
|
|
469
590
|
|
|
470
591
|
There is still a lot of composibility possible with functions returning strings (someone create an Issue if you want to see examples used in the Kujo codebase), but in general yes, there is more repitition. Most of this remaining repitition is not something I think is a defect (though those obsessed with DRY would disagree). The only "defect" of this repitition is that there may be more than one similiar method (for example a "get" that does certain joins vs others), and differentiating the large query in a function name can be lengthy/annoying. In these cases where composing functions doesn't bring the number of similar functions methods to only one, rather than distilling these large queries into the function name (eg, getPersonWithJobsAndEmployers), I usually just opt for a small arbitrary hash at the end of the short name (eg, getXTW instead of getPersonWithJobsAndEmployers, getRJF instead of getPersonWithFriendsLocatedNearANewFriendRequest, etc).
|
|
471
592
|
|
|
472
593
|
### Does PureORM abstract away the database driver?
|
|
473
594
|
|
|
474
|
-
No, the whole premise of PureORM is to offer a library to aid the use of writing SQL. The datebase driver is always available to you (at `orm.db`) if you wish to use it directly with no PureORM mappings, or just import it. In my experience, a small percentage of highly complex queries looking for sums or counts in my
|
|
595
|
+
No, the whole premise of PureORM is to offer a library to aid the use of writing SQL. The datebase driver is always available to you (at `orm.db`) if you wish to use it directly with no PureORM mappings, or just import it. In my experience, a small percentage of highly complex queries looking for sums or counts in my data access layer use the database driver directly.
|
|
475
596
|
|
|
476
597
|
The only difference is how the SQL is invoked: `orm.one(query, {})` vs `orm.db.one(query, {})`
|
|
477
598
|
|
|
@@ -483,7 +604,7 @@ Yes, if you'd like to get the mapping while also passing through some select exp
|
|
|
483
604
|
const getBloggerPayout = ({ id, startDate, endDate }) => {
|
|
484
605
|
const query = `
|
|
485
606
|
SELECT
|
|
486
|
-
${
|
|
607
|
+
${orm.tables.person.columns},
|
|
487
608
|
COALESCE(SUM(article.blogger_payout), 0) as meta_amount
|
|
488
609
|
FROM
|
|
489
610
|
person
|
|
@@ -518,69 +639,6 @@ PureORM
|
|
|
518
639
|
- PureORM is more than just the preference against the query builder portion of Stateful ORMs
|
|
519
640
|
- PureORM is the preference against stateful, db-connected objects: PureORM resolves result rows to _pure_ business objects. This purity in business objects fosters a clean layer of the business layer from the data access layer, as well as ensuring the very best in performance (eg, the [N+1 problem](https://docs.sqlalchemy.org/en/13/glossary.html#term-n-plus-one-problem) can't exist with pure objects).
|
|
520
641
|
|
|
521
|
-
## API
|
|
522
|
-
|
|
523
|
-
### Interfaces
|
|
524
|
-
|
|
525
|
-
#### `PureORMEntity`
|
|
526
|
-
|
|
527
|
-
An interface which your business object classes need to implement.
|
|
528
|
-
|
|
529
|
-
- `static get tableName(): string` - Returns the string table name which the business object associates with from the database.
|
|
530
|
-
- `static get sqlColumnsData(): Array<string|ColumnData>` - Returns an array of the database column data. The type is either:
|
|
531
|
-
- `ColumnData {column, property?, references?, primaryKey?}`
|
|
532
|
-
- `column: string` - The sql column name
|
|
533
|
-
- `propery: string` - The javascript property name for this column (defaults to camelCase of `column`)
|
|
534
|
-
- `references: Bo` - The relationship to another Bo (defaults to null)
|
|
535
|
-
- `primaryKey: boolean` - Is this column (part of) the primary key (defaults to false)
|
|
536
|
-
- `string` - If a string, it is applied as the `column` value, with all others defaulted.
|
|
537
|
-
- (Note: if there is no primary key, `id` is defaulted)
|
|
538
|
-
- `get BoCollection()?: BoCollection` - (Optional) returns the business object collection class constructor.
|
|
539
|
-
- `static get displayName()?: string` - (Optional) returns the string display name of the business object (defaults to camelcase of tableName)
|
|
540
|
-
|
|
541
|
-
#### `PureORMCollection`
|
|
542
|
-
|
|
543
|
-
An abstract class which is the base class your Bo Collection classes extend.
|
|
544
|
-
|
|
545
|
-
- `static get Bo(): BO` - Returns the individual (singular) business object class constructor.
|
|
546
|
-
- `get displayName()?: BO` - (Optional) returns the string display name of the business object collection (defaults to bo displayName with an "s")
|
|
547
|
-
|
|
548
|
-
#### `create`
|
|
549
|
-
|
|
550
|
-
The factory function for creating your ORM.
|
|
551
|
-
|
|
552
|
-
**Parameters**
|
|
553
|
-
|
|
554
|
-
- `getBusinessObjects: () => Array<BusinessObject>` - A function which returns an array of all the business objects.
|
|
555
|
-
- `db: <DataBaseDriverInstance>` - A database driver instance.
|
|
556
|
-
|
|
557
|
-
**Return Value**
|
|
558
|
-
|
|
559
|
-
Your ORM.
|
|
560
|
-
|
|
561
|
-
It has the following query methods:
|
|
562
|
-
|
|
563
|
-
- `one(query: string, params: object)` - executes a query and returns a Bo, or throws.
|
|
564
|
-
- `oneOrNone(query: string, params: object)` - executes a query and returns a Bo or undefined, or throws.
|
|
565
|
-
- `many(query: string, params: object)` - executes a query and returns a BoCollection with at least one model, or throws.
|
|
566
|
-
- `any(query: string, params: object)` - executes a query and returns a BoCollection.
|
|
567
|
-
- `none(query: string, params: object)` - executes a query and returns null.
|
|
568
|
-
|
|
569
|
-
(Note these orm query methods ensure their count against the number of generated top level business objects are created - not the number of relational rows returned from the database driver! Thus, for example, `one` understands that there may be multiple result rows (which a database driver's `one` query method would throw at) but which correctly nest into one BO.)
|
|
570
|
-
|
|
571
|
-
Built-in "basic" / generic crud functions
|
|
572
|
-
|
|
573
|
-
- `getMatching(bo: BaseBO)`
|
|
574
|
-
- `getOneOrNoneMatching(bo: BaseBO)`
|
|
575
|
-
- `getAnyMatching(bo: BaseBO)`
|
|
576
|
-
- `getAllMatching(bo: BaseBO)`
|
|
577
|
-
- `create(bo: BaseBO)`
|
|
578
|
-
- `update(bo: BaseBO)`
|
|
579
|
-
- `delete(bo: BaseBO)`
|
|
580
|
-
- `deleteMatching(bo: BaseBO)`
|
|
581
|
-
|
|
582
|
-
These are just provided because they are so common and straight-forward. While the goal of this library is foster writing SQL in your DAL (which returns pure business objects) some CRUD operations are so common they are included in the ORM. Feel free to completely disregard if you want to write these in your DAL yourself.
|
|
583
|
-
|
|
584
642
|
## Current Status
|
|
585
643
|
|
|
586
644
|
#### Current Limitations (PRs welcome!)
|