pure-orm 2.3.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/.eslintrc.json +2 -2
- package/.prettierignore +1 -0
- package/README.md +426 -441
- 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 +21 -8
- 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/thirteen/results.json +74 -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/base.js +0 -5
- package/examples/basic/bo/person.js +0 -13
- package/examples/basic/business-objects.js +0 -9
- package/examples/basic/dao/base.js +0 -9
- package/examples/basic/dao/person.js +0 -21
- package/examples/basic/db.js +0 -25
- package/examples/blog/bo/article.js +0 -32
- package/examples/blog/bo/article_tag.js +0 -24
- package/examples/blog/bo/article_tags.js +0 -9
- package/examples/blog/bo/articles.js +0 -9
- package/examples/blog/bo/base.js +0 -5
- package/examples/blog/bo/person.js +0 -26
- package/examples/blog/bo/tag.js +0 -13
- package/examples/blog/business-objects.js +0 -10
- package/examples/order/bo/base.js +0 -5
- package/examples/order/bo/line-item.js +0 -33
- package/examples/order/bo/line-items.js +0 -9
- package/examples/order/bo/order.js +0 -44
- package/examples/order/bo/orders.js +0 -9
- package/examples/order/bo/product-variant.js +0 -33
- package/examples/order/bo/product-variants.js +0 -9
- package/examples/order/bo/product.js +0 -28
- package/examples/order/bo/products.js +0 -9
- package/examples/order/bo/utm-source.js +0 -13
- package/examples/order/business-objects.js +0 -11
- package/examples/order-more/bo/actual-product-variant.js +0 -25
- package/examples/order-more/bo/actual-product-variants.js +0 -9
- package/examples/order-more/bo/base.js +0 -5
- package/examples/order-more/bo/color.js +0 -18
- package/examples/order-more/bo/colors.js +0 -9
- package/examples/order-more/bo/customer.js +0 -18
- package/examples/order-more/bo/customers.js +0 -9
- package/examples/order-more/bo/gender.js +0 -18
- package/examples/order-more/bo/genders.js +0 -9
- package/examples/order-more/bo/inventory-level.js +0 -28
- package/examples/order-more/bo/inventory-levels.js +0 -9
- package/examples/order-more/bo/line-item.js +0 -33
- package/examples/order-more/bo/line-items.js +0 -9
- package/examples/order-more/bo/order.js +0 -49
- package/examples/order-more/bo/orders.js +0 -9
- package/examples/order-more/bo/parcel-event.js +0 -19
- package/examples/order-more/bo/parcel-events.js +0 -9
- package/examples/order-more/bo/parcel-line-item.js +0 -24
- package/examples/order-more/bo/parcel-line-items.js +0 -9
- package/examples/order-more/bo/parcel.js +0 -18
- package/examples/order-more/bo/parcels.js +0 -9
- package/examples/order-more/bo/physical-address.js +0 -30
- package/examples/order-more/bo/physical-addresses.js +0 -12
- package/examples/order-more/bo/product-variant-image.js +0 -25
- package/examples/order-more/bo/product-variant-images.js +0 -9
- package/examples/order-more/bo/product-variant.js +0 -39
- package/examples/order-more/bo/product-variants.js +0 -9
- package/examples/order-more/bo/product.js +0 -29
- package/examples/order-more/bo/products.js +0 -9
- package/examples/order-more/bo/refund.js +0 -28
- package/examples/order-more/bo/refunds.js +0 -9
- package/examples/order-more/bo/shipment-actual-product-variant.js +0 -26
- package/examples/order-more/bo/shipment-actual-product-variants.js +0 -9
- package/examples/order-more/bo/shipment.js +0 -18
- package/examples/order-more/bo/shipments.js +0 -9
- package/examples/order-more/bo/size.js +0 -18
- package/examples/order-more/bo/sizes.js +0 -9
- package/examples/order-more/bo/utm-medium.js +0 -13
- package/examples/order-more/bo/utm-source.js +0 -13
- package/examples/order-more/business-objects.js +0 -26
- package/src/bo/base-bo-collection.js +0 -15
- package/src/bo/base-bo.js +0 -379
- package/src/bo/base-bo.spec.js +0 -547
- package/src/dao/base-dao.js +0 -146
- package/src/dao/base-dao.spec.js +0 -6
- package/src/index.js +0 -7
- package/src/util/helpers.js +0 -28
- package/src/util/helpers.spec.js +0 -6
- package/test-utils/five/bo/base.js +0 -5
- package/test-utils/five/bo/line-item.js +0 -19
- package/test-utils/five/bo/line-items.js +0 -9
- package/test-utils/five/bo/order.js +0 -18
- package/test-utils/five/bo/orders.js +0 -9
- package/test-utils/five/bo/parcel-event.js +0 -19
- package/test-utils/five/bo/parcel-events.js +0 -9
- package/test-utils/five/bo/parcel-line-item.js +0 -24
- package/test-utils/five/bo/parcel-line-items.js +0 -9
- package/test-utils/five/bo/parcel.js +0 -18
- package/test-utils/five/bo/parcels.js +0 -9
- package/test-utils/five/business-objects.js +0 -11
- package/test-utils/nine/bo/base.js +0 -5
- package/test-utils/nine/bo/feature-switch.js +0 -18
- package/test-utils/nine/bo/feature-switches.js +0 -12
- package/test-utils/nine/business-objects.js +0 -7
- package/test-utils/six/bo/base.js +0 -5
- package/test-utils/six/bo/customer.js +0 -18
- package/test-utils/six/bo/customers.js +0 -9
- package/test-utils/six/bo/line-item.js +0 -19
- package/test-utils/six/bo/line-items.js +0 -9
- package/test-utils/six/bo/order.js +0 -19
- package/test-utils/six/bo/orders.js +0 -9
- package/test-utils/six/bo/parcel-line-item.js +0 -24
- package/test-utils/six/bo/parcel-line-items.js +0 -9
- package/test-utils/six/bo/parcel.js +0 -18
- package/test-utils/six/bo/parcels.js +0 -9
- package/test-utils/six/business-objects.js +0 -11
- package/test-utils/twelve/bo/base.js +0 -5
- package/test-utils/twelve/bo/member.js +0 -16
- package/test-utils/twelve/bo/members.js +0 -9
- package/test-utils/twelve/bo/prompt.js +0 -20
- package/test-utils/twelve/bo/prompts.js +0 -9
- package/test-utils/twelve/business-objects.js +0 -8
package/README.md
CHANGED
|
@@ -25,154 +25,43 @@ The name _**pure**ORM_ reflects both of these points - that it is _pure_ ORM (th
|
|
|
25
25
|
|
|
26
26
|
#### Philosophy
|
|
27
27
|
|
|
28
|
-
- Write _native_, _unobstructed_ SQL in a "data access
|
|
29
|
-
- Have _database-connected_ "data access objects" which allow the unobstructed writing of normal SQL.
|
|
30
|
-
- Have the "data access objects" returning the pure business objects.
|
|
28
|
+
- Write _native_, _unobstructed_ SQL in a "data access layer" which returns _pure_ "business objects" to be used in the app's business logic.
|
|
31
29
|
|
|
32
30
|
#### Concepts
|
|
33
31
|
|
|
34
|
-
A **
|
|
32
|
+
A **Model** is a pure javascript business object corresponding to a table.
|
|
35
33
|
|
|
34
|
+
- In PureORM these pure business objects are referred to as "models".
|
|
36
35
|
- They represent a row of the table data, but as pure javascript objects.
|
|
37
36
|
- They are not connected to the database.
|
|
38
37
|
- They are the subject of the app's business logic.
|
|
39
38
|
- They will be full of userland business logic methods.
|
|
40
39
|
- Their purity allows them to be easy to test/use.
|
|
41
|
-
- These are also referred to as "models".
|
|
42
40
|
|
|
43
|
-
A **
|
|
41
|
+
A **Collection** is a pure business object with a reference to a group of models.
|
|
44
42
|
|
|
45
|
-
- If your query returns records for multiple
|
|
46
|
-
- 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).
|
|
47
45
|
|
|
48
|
-
A **Data Access
|
|
46
|
+
A **Data Access Layer** is a database-aware abstraction layer where native SQL is written.
|
|
49
47
|
|
|
50
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.
|
|
51
49
|
- Rather, is a data access layer in which native SQL is written, and which returns business objects (properly nested and structured).
|
|
52
|
-
- By convention, they may also accept business objects as inputs (to get, create, or update records) - but this is just a convention (necessary input data can be passed as separate arguments, or however).
|
|
53
50
|
|
|
54
|
-
##
|
|
55
|
-
|
|
56
|
-
Using PureORM allows you to write code like this:
|
|
57
|
-
|
|
58
|
-
```javascript
|
|
59
|
-
class PersonDAO extends BaseDAO {
|
|
60
|
-
get({ id }) {
|
|
61
|
-
const query = `
|
|
62
|
-
SELECT
|
|
63
|
-
${Person.getSQLSelectClause()},
|
|
64
|
-
${Job.getSQLSelectClause()},
|
|
65
|
-
${Employer.getSQLSelectClause()}
|
|
66
|
-
FROM person
|
|
67
|
-
JOIN job on person.id = job.person_id
|
|
68
|
-
JOIN employer on job.employer_id = employer.id
|
|
69
|
-
WHERE id = $(id)
|
|
70
|
-
`;
|
|
71
|
-
return this.one(query, { id });
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
```
|
|
75
|
-
|
|
76
|
-
And use it like this:
|
|
77
|
-
|
|
78
|
-
```javascript
|
|
79
|
-
const person = await personDAO.get({ id: 55 });
|
|
80
|
-
console.log(person);
|
|
81
|
-
```
|
|
82
|
-
|
|
83
|
-
```javascript
|
|
84
|
-
Person {
|
|
85
|
-
id: 55,
|
|
86
|
-
name: 'John Doe',
|
|
87
|
-
jobs: JobsCollection {
|
|
88
|
-
models: [
|
|
89
|
-
Job {
|
|
90
|
-
id: 277,
|
|
91
|
-
personId: 55,
|
|
92
|
-
employerId: 17,
|
|
93
|
-
startDate: '2020-01-01',
|
|
94
|
-
endDate: '2020-12-31',
|
|
95
|
-
employer: Employer {
|
|
96
|
-
id: 17,
|
|
97
|
-
name: 'Good Corp',
|
|
98
|
-
}
|
|
99
|
-
},
|
|
100
|
-
Job {
|
|
101
|
-
id: 278,
|
|
102
|
-
personId: 55,
|
|
103
|
-
employerId: 26,
|
|
104
|
-
startDate: '2021-01-01',
|
|
105
|
-
endDate: '2021-12-31',
|
|
106
|
-
employer: Employer {
|
|
107
|
-
id: 26,
|
|
108
|
-
name: 'Better Corp',
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
]
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
```
|
|
115
|
-
|
|
116
|
-
> This is a quick showcase. To see how to wire up this code, see the full [Practical Example](#practical-example) below.
|
|
117
|
-
|
|
118
|
-
### Things to Note:
|
|
119
|
-
|
|
120
|
-
- Our DAO returns a single Person business object which is properly structured from the many relational row records!
|
|
121
|
-
- Our query is executed with a `one` method. The DAO 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!
|
|
122
|
-
- Rather than manually specifying our columns in the sql select expression, we use the business object's `getSQLSelectClause`. 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 the convenience methods (as were used above), if you don't mind the tedium:
|
|
123
|
-
```javascript
|
|
124
|
-
class PersonDAO extends BaseDAO {
|
|
125
|
-
get({ id }) {
|
|
126
|
-
// Example showing you can manually specific the select expression fields
|
|
127
|
-
// instead of using a business object's `getSQLSelectClause` convenience
|
|
128
|
-
// method. Note: you must namespace the field with table name and hashtag.
|
|
129
|
-
const query = `
|
|
130
|
-
SELECT
|
|
131
|
-
person.id as "person#id",
|
|
132
|
-
person.name as "person#name",
|
|
133
|
-
job.id as "job#id",
|
|
134
|
-
job.person_id: "job#person_id",
|
|
135
|
-
job.employer_id: "job#employer_id",
|
|
136
|
-
job.start_date: "job#start_date",
|
|
137
|
-
job.end_date: "job#end_date",
|
|
138
|
-
employer.id as "employer#id",
|
|
139
|
-
employer.name as "employer#name"
|
|
140
|
-
FROM person
|
|
141
|
-
JOIN job on person.id = job.person_id
|
|
142
|
-
JOIN employer on job.employer_id = employer.id
|
|
143
|
-
WHERE id = $(id)
|
|
144
|
-
`;
|
|
145
|
-
return this.one(query, { id });
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
```
|
|
149
|
-
|
|
150
|
-
## Usage
|
|
151
|
-
|
|
152
|
-
### Ways of Using PureORM
|
|
153
|
-
|
|
154
|
-
PureORM can work with no integration with your database driver. This is the strictest usage of PureORM. Going this route, the only export you use from PureORM is the factory to create your base bo constructor (`createBaseBO`) and optionally a base bo collection constructor (`BaseBoCollection`).
|
|
155
|
-
|
|
156
|
-
PureORM also can wrap your database driver to make the API slightly less redundant. In this case you'll use the export which is a factory to create a base dao constructor (`createBaseDAO`). When you use this PureORM in this way, your DAO also inherits a handful of convenience methods for basic CRUD operations.
|
|
157
|
-
|
|
158
|
-
Overview of the API (full [API details](#api) further down):
|
|
159
|
-
|
|
160
|
-
- `createBaseBO` is a factory to create a base bo constructor. This factory method accepts a single argument: `getBusinessObjects` which is a function that returns an array of all your business object classes. You extend this class for all your business objects, and for each of these you must provide static `table` and `sqlColumnsData` fields. There are a number of other methods you can override from base to accomodate more advanced usage (including a `BoCollection` field to reference a custom class you want used for the collection).
|
|
161
|
-
- `BaseBoCollection` can be used as the base class for any bo collection classes you make. Sometimes it can be useful to have business methods on the collection entity (not just each model entity) and so you can create such a class by extending `BaseBoCollection` and providing a `BoCollection` field on the business object model class.
|
|
162
|
-
|
|
163
|
-
If you would like PureORM to wrap your database driver, you'll also use:
|
|
51
|
+
## Practical Example
|
|
164
52
|
|
|
165
|
-
|
|
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.
|
|
166
54
|
|
|
167
|
-
|
|
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.
|
|
168
56
|
|
|
169
|
-
|
|
57
|
+
```typescript
|
|
58
|
+
// app.ts
|
|
59
|
+
import express, { Express, Request, Response } from 'express';
|
|
170
60
|
|
|
171
|
-
|
|
61
|
+
const app: Express = express();
|
|
62
|
+
const port = process.env.PORT;
|
|
172
63
|
|
|
173
|
-
|
|
174
|
-
// ./controllers/pages/person.js
|
|
175
|
-
const renderProfile = (req, res) => {
|
|
64
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
176
65
|
const person = {
|
|
177
66
|
id: 55,
|
|
178
67
|
name: 'John Doe',
|
|
@@ -203,25 +92,46 @@ const renderProfile = (req, res) => {
|
|
|
203
92
|
]
|
|
204
93
|
}
|
|
205
94
|
};
|
|
206
|
-
res.
|
|
207
|
-
};
|
|
95
|
+
res.json(person);
|
|
96
|
+
});
|
|
97
|
+
|
|
98
|
+
app.listen(port);
|
|
208
99
|
```
|
|
209
100
|
|
|
210
|
-
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:
|
|
211
121
|
|
|
212
122
|
```sql
|
|
213
123
|
SELECT *
|
|
214
124
|
FROM person
|
|
215
|
-
JOIN job on person.id = job.person_id
|
|
216
|
-
JOIN employer on job.employer_id = employer.id
|
|
217
|
-
WHERE id = 55;
|
|
125
|
+
LEFT JOIN job on person.id = job.person_id
|
|
126
|
+
LEFT JOIN employer on job.employer_id = employer.id
|
|
127
|
+
WHERE person.id = 55;
|
|
218
128
|
```
|
|
219
129
|
|
|
220
|
-
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.
|
|
221
131
|
|
|
222
|
-
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).
|
|
223
133
|
|
|
224
|
-
So, lets install
|
|
134
|
+
So, lets install PureORM and the database driver and get started!
|
|
225
135
|
|
|
226
136
|
### Step 1: Installing PureORM and the Database Driver
|
|
227
137
|
|
|
@@ -232,14 +142,200 @@ npm install --save pure-orm
|
|
|
232
142
|
npm install --save pg-promise
|
|
233
143
|
```
|
|
234
144
|
|
|
235
|
-
### 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.
|
|
231
|
+
|
|
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
|
|
236
327
|
|
|
237
|
-
|
|
328
|
+
We can now return to our controller code, and use our person data access function.
|
|
238
329
|
|
|
239
330
|
```diff
|
|
240
|
-
//
|
|
241
|
-
|
|
242
|
-
|
|
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) => {
|
|
243
339
|
- const person = {
|
|
244
340
|
- id: 55,
|
|
245
341
|
- name: 'John Doe',
|
|
@@ -253,7 +349,7 @@ const renderProfile = (req, res) => {
|
|
|
253
349
|
- endDate: '2020-12-31',
|
|
254
350
|
- employer: {
|
|
255
351
|
- id: 17,
|
|
256
|
-
- name: 'Good Corp'
|
|
352
|
+
- name: 'Good Corp'
|
|
257
353
|
- }
|
|
258
354
|
- },
|
|
259
355
|
- {
|
|
@@ -264,251 +360,251 @@ const renderProfile = (req, res) => {
|
|
|
264
360
|
- endDate: '2021-12-31',
|
|
265
361
|
- employer: {
|
|
266
362
|
- id: 26,
|
|
267
|
-
- name: 'Better Corp'
|
|
363
|
+
- name: 'Better Corp'
|
|
268
364
|
- }
|
|
269
365
|
- }
|
|
270
366
|
- ]
|
|
271
367
|
- }
|
|
272
368
|
- };
|
|
273
|
-
+ const person =
|
|
274
|
-
res.
|
|
275
|
-
|
|
369
|
+
+ const person = getPerson(req.params.id);
|
|
370
|
+
res.json(person);
|
|
371
|
+
});
|
|
276
372
|
|
|
277
|
-
|
|
373
|
+
app.listen(port);
|
|
374
|
+
```
|
|
278
375
|
|
|
279
|
-
|
|
376
|
+
That's it! This controller code now works! The `getPerson` function returns a properly structured business object as we desire.
|
|
280
377
|
|
|
281
|
-
|
|
378
|
+
## API
|
|
282
379
|
|
|
283
|
-
|
|
284
|
-
// ./bo/person.js
|
|
285
|
-
const Base = require('./base');
|
|
380
|
+
### `create`
|
|
286
381
|
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
module.exports = Person;
|
|
382
|
+
```typescript
|
|
383
|
+
function create(options: {
|
|
384
|
+
getEntities: () => Array<IEntity>;
|
|
385
|
+
db: DataBaseDriver;
|
|
386
|
+
}): PureORM;
|
|
293
387
|
```
|
|
294
388
|
|
|
295
|
-
|
|
296
|
-
// ./bo/job.js
|
|
297
|
-
const Base = require('./base');
|
|
298
|
-
const Person = require('./person');
|
|
299
|
-
const Employer = require('./employer');
|
|
300
|
-
|
|
301
|
-
class Job extends Base {
|
|
302
|
-
static tableName = 'job';
|
|
303
|
-
static sqlColumnsData = [
|
|
304
|
-
'id',
|
|
305
|
-
{ column: 'person_id', references: Person },
|
|
306
|
-
{ column: 'employer_id', references: Employer },
|
|
307
|
-
'start_date',
|
|
308
|
-
'end_date'
|
|
309
|
-
];
|
|
310
|
-
// any other business methods...
|
|
311
|
-
}
|
|
312
|
-
module.exports = Job;
|
|
313
|
-
```
|
|
389
|
+
The factory function for creating your ORM.
|
|
314
390
|
|
|
315
|
-
|
|
316
|
-
// ./bo/employer.js
|
|
317
|
-
const Base = require('./base');
|
|
391
|
+
**Parameters**
|
|
318
392
|
|
|
319
|
-
class
|
|
320
|
-
|
|
321
|
-
static sqlColumnsData = ['id', 'name'];
|
|
322
|
-
// any other business methods...
|
|
323
|
-
}
|
|
324
|
-
module.exports = Employer;
|
|
325
|
-
```
|
|
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.
|
|
326
395
|
|
|
327
|
-
|
|
396
|
+
**Return Value**
|
|
328
397
|
|
|
329
|
-
|
|
330
|
-
|
|
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; }};
|
|
481
|
+
}
|
|
482
|
+
```
|
|
331
483
|
|
|
332
|
-
|
|
484
|
+
## FAQ
|
|
333
485
|
|
|
334
|
-
|
|
335
|
-
// ./bo/base.js
|
|
336
|
-
const { createBaseBO } = require('pure-orm');
|
|
337
|
-
|
|
338
|
-
const BaseBO = createBaseBO({
|
|
339
|
-
getBusinessObjects: () => [
|
|
340
|
-
require('./person'), // eslint-disable-line
|
|
341
|
-
require('./job'), // eslint-disable-line
|
|
342
|
-
require('./employer') // eslint-disable-line
|
|
343
|
-
]
|
|
344
|
-
});
|
|
345
|
-
module.exports = BaseBO;
|
|
346
|
-
```
|
|
486
|
+
### Can you show the business objects of a more complex entity?
|
|
347
487
|
|
|
348
|
-
|
|
488
|
+
```typescript
|
|
489
|
+
import { IModel, ICollection, IColumns, IEntity } from 'pure-orm';
|
|
349
490
|
|
|
350
|
-
|
|
491
|
+
export const tableName: string = 'library_v2';
|
|
351
492
|
|
|
352
|
-
|
|
493
|
+
export const columns: IColumns = [
|
|
494
|
+
'id',
|
|
495
|
+
'name',
|
|
496
|
+
{ column: 'is_ala_member', property: 'isALAMember' },
|
|
497
|
+
{ column: 'address_id', references: Address }
|
|
498
|
+
];
|
|
353
499
|
|
|
354
|
-
|
|
500
|
+
export const displayName = 'library';
|
|
501
|
+
export const collectionDisplayName = 'libraries';
|
|
355
502
|
|
|
356
|
-
|
|
503
|
+
interface ILibraryProps {
|
|
504
|
+
id: number;
|
|
505
|
+
name: string;
|
|
506
|
+
isALAMember: string;
|
|
507
|
+
addressId: number;
|
|
508
|
+
address: Address;
|
|
509
|
+
}
|
|
357
510
|
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
${Job.getSQLSelectClause()},
|
|
368
|
-
${Employer.getSQLSelectClause()}
|
|
369
|
-
FROM person
|
|
370
|
-
JOIN job on person.id = job.person_id
|
|
371
|
-
JOIN employer on job.employer_id = employer.id
|
|
372
|
-
WHERE id = $(id)
|
|
373
|
-
`;
|
|
374
|
-
const rawResultRows = await db.many(query, { id });
|
|
375
|
-
return Person.createOneFromDatabase(rawResultRows);
|
|
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;
|
|
376
520
|
}
|
|
521
|
+
aBussinessObjectMethod() {}
|
|
522
|
+
anotherBussinessObjectMethod() {}
|
|
377
523
|
}
|
|
378
|
-
module.exports = new PersonDAO();
|
|
379
|
-
```
|
|
380
|
-
|
|
381
|
-
Notice we are using the _one_ method `createOneFromDatabase` which is what we want since we are creating _one_ person, even though we use _many_ for the database driver. From the database driver's perspective there are many relational result row; however, from our perspective, these compose _one_ properly structured person. The create from database methods (`createOneFromDatabase`, `createOneOrNoneFromDatabase`, `createManyFromDatabase`, `createFromDatabase` for any) ensure their count against the number of generated top level business objects - not the number of rows the sql expression returns!
|
|
382
524
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
// ./dao/person.js
|
|
389
|
-
const BaseDAO = require('../dao/base');
|
|
390
|
-
const Person = require('../business-objects/person');
|
|
391
|
-
class PersonDAO extends BaseDAO {
|
|
392
|
-
Bo = Person;
|
|
393
|
-
get({ id }) {
|
|
394
|
-
const query = `
|
|
395
|
-
SELECT
|
|
396
|
-
${Person.getSQLSelectClause()},
|
|
397
|
-
${Job.getSQLSelectClause()},
|
|
398
|
-
${Employer.getSQLSelectClause()}
|
|
399
|
-
FROM person
|
|
400
|
-
JOIN job on person.id = job.person_id
|
|
401
|
-
JOIN employer on job.employer_id = employer.id
|
|
402
|
-
WHERE id = $(id)
|
|
403
|
-
`;
|
|
404
|
-
return this.one(query, { id });
|
|
525
|
+
export class Persons implements ICollection<Person> {
|
|
526
|
+
models: Array<Person>;
|
|
527
|
+
constructor({ models }: any) {
|
|
528
|
+
this.models = models;
|
|
529
|
+
return this;
|
|
405
530
|
}
|
|
531
|
+
aCollectionMethod() {}
|
|
532
|
+
anotherCollectionMethod() {}
|
|
406
533
|
}
|
|
407
|
-
module.exports = new PersonDAO();
|
|
408
|
-
```
|
|
409
|
-
|
|
410
|
-
Notice that we're using `this.one`, which is what we want. The DAO methods for `one`, `oneOrNone`, `many`, `any` ensure their count against the number of generated top level business objects - not the number of rows the sql expression returns!
|
|
411
|
-
|
|
412
|
-
### Step 5: Creating the BaseDAO
|
|
413
|
-
|
|
414
|
-
Our PersonDAO extends BaseDAO, so lets create that by passing our database driver and optioanlly an error logger.
|
|
415
|
-
|
|
416
|
-
```javascript
|
|
417
|
-
// ./dao/base.js
|
|
418
|
-
const { db } = require('../factories/db');
|
|
419
|
-
const constructor = createBaseDAO({ db, logError: console.log.bind(console) });
|
|
420
|
-
```
|
|
421
534
|
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
module.exports = pgp({
|
|
431
|
-
host: process.env.DB_HOSTNAME,
|
|
432
|
-
port: process.env.DB_PORT,
|
|
433
|
-
database: process.env.DB_NAME,
|
|
434
|
-
user: DB_USERNAME,
|
|
435
|
-
password: DB_PASSWORD
|
|
436
|
-
});
|
|
535
|
+
export const personEntity: IEntity = {
|
|
536
|
+
tableName,
|
|
537
|
+
displayName,
|
|
538
|
+
collectionDisplayName,
|
|
539
|
+
columns,
|
|
540
|
+
Model: Person,
|
|
541
|
+
Collection: Persons
|
|
542
|
+
};
|
|
437
543
|
```
|
|
438
544
|
|
|
439
|
-
|
|
545
|
+
### If I use PureORM do I have to re-invent all the super basic CRUD methods?
|
|
440
546
|
|
|
441
|
-
|
|
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.
|
|
442
548
|
|
|
443
|
-
|
|
549
|
+
For example, rather than every entity needing data access operatons for get, create, etc method, you can use built-in orm functions.
|
|
444
550
|
|
|
445
|
-
```
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
get BoCollection() {
|
|
450
|
-
return Libraries;
|
|
451
|
-
}
|
|
452
|
-
static get tableName() {
|
|
453
|
-
return 'library_v2';
|
|
454
|
-
}
|
|
455
|
-
static get displayName() {
|
|
456
|
-
// If we didn't provide this static field, in javascript an object
|
|
457
|
-
// referencing a library bo would use `libraryV2` as the property name.
|
|
458
|
-
return 'library';
|
|
551
|
+
```typescript
|
|
552
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
553
|
+
if (req.params.id) {
|
|
554
|
+
return res.json(await orm.getMatching(new Person({ id })));
|
|
459
555
|
}
|
|
460
|
-
|
|
461
|
-
return
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
{ column: 'is_ala_member', property: 'isALAMember' },
|
|
465
|
-
{ column: 'address', references: Address }
|
|
466
|
-
];
|
|
556
|
+
if (req.query.name) {
|
|
557
|
+
return res.json(
|
|
558
|
+
await orm.getAnyMatching(new Person({ name: req.query.name }))
|
|
559
|
+
);
|
|
467
560
|
}
|
|
468
|
-
|
|
561
|
+
res
|
|
562
|
+
.status(404)
|
|
563
|
+
.json({ error: 'Please specify an id or provide a name filter' });
|
|
564
|
+
};
|
|
469
565
|
```
|
|
470
566
|
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
567
|
+
At any point you can ditch these built-ins and write some SQL in a data access function.
|
|
568
|
+
|
|
569
|
+
```typescript
|
|
570
|
+
import { getPerson, getPeopleWithName } from '../../data-access/person';
|
|
571
|
+
|
|
572
|
+
app.get('/rest/person', (req: Request, res: Response) => {
|
|
573
|
+
if (req.params.id) {
|
|
574
|
+
return res.json(await getPerson(id));
|
|
476
575
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
// referencing this collection would use `librarys` as the property name.
|
|
480
|
-
return 'libraries';
|
|
576
|
+
if (req.query.name) {
|
|
577
|
+
return res.json(await getPeopleWithName(req.query.name));
|
|
481
578
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
}
|
|
579
|
+
res
|
|
580
|
+
.status(404)
|
|
581
|
+
.json({ error: 'Please specify an id or provide a name filter' });
|
|
582
|
+
};
|
|
485
583
|
```
|
|
486
584
|
|
|
487
|
-
### If I use PureORM do I have to re-invent all the super basic CRUD methods?
|
|
488
|
-
|
|
489
|
-
If you're using PureORM in the strict usage, then yes - it's scope is limited to a business object's mapping relational result rows to pure objects. If you are using PureORM in the more integrated usage extending the BaseDAO class, then you receive a handful of convenience methods for basic CRUD operations. At any point, you could override these convenience methods.
|
|
490
|
-
|
|
491
585
|
### Whare are the tradeoffs that PureORM makes in using SQL instead of a query builder API?
|
|
492
586
|
|
|
493
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.
|
|
494
588
|
|
|
495
|
-
### 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?
|
|
496
590
|
|
|
497
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).
|
|
498
592
|
|
|
499
593
|
### Does PureORM abstract away the database driver?
|
|
500
594
|
|
|
501
|
-
No, the whole premise of PureORM is to offer a library to aid the use of writing SQL.
|
|
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.
|
|
596
|
+
|
|
597
|
+
The only difference is how the SQL is invoked: `orm.one(query, {})` vs `orm.db.one(query, {})`
|
|
502
598
|
|
|
503
599
|
### Can I use aggregate functions while still using the PureORM mapping?
|
|
504
600
|
|
|
505
601
|
Yes, if you'd like to get the mapping while also passing through some select expressions, use the special meta prefix. For example:
|
|
506
602
|
|
|
507
603
|
```javascript
|
|
508
|
-
getBloggerPayout({id, startDate, endDate}) {
|
|
604
|
+
const getBloggerPayout = ({ id, startDate, endDate }) => {
|
|
509
605
|
const query = `
|
|
510
606
|
SELECT
|
|
511
|
-
${
|
|
607
|
+
${orm.tables.person.columns},
|
|
512
608
|
COALESCE(SUM(article.blogger_payout), 0) as meta_amount
|
|
513
609
|
FROM
|
|
514
610
|
person
|
|
@@ -522,8 +618,8 @@ getBloggerPayout({id, startDate, endDate}) {
|
|
|
522
618
|
person.pay_frequency
|
|
523
619
|
ORDER BY meta_amount DESC NULLS LAST;
|
|
524
620
|
`;
|
|
525
|
-
return
|
|
526
|
-
}
|
|
621
|
+
return orm.one(query, { id, startDate, endDate });
|
|
622
|
+
};
|
|
527
623
|
```
|
|
528
624
|
|
|
529
625
|
## Comparisons
|
|
@@ -543,122 +639,11 @@ PureORM
|
|
|
543
639
|
- PureORM is more than just the preference against the query builder portion of Stateful ORMs
|
|
544
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).
|
|
545
641
|
|
|
546
|
-
## API
|
|
547
|
-
|
|
548
|
-
### Classes
|
|
549
|
-
|
|
550
|
-
#### `BaseBo`
|
|
551
|
-
|
|
552
|
-
An abstract class which is the base class your BO classes to extend.
|
|
553
|
-
|
|
554
|
-
**Abstract Methods** to be implemented
|
|
555
|
-
|
|
556
|
-
- `static get tableName(): string` - Returns the string table name which the business object associates with from the database.
|
|
557
|
-
- `static get sqlColumnsData(): Array<string|ColumnData>` - Returns an array of the database column data. The type is either:
|
|
558
|
-
- `ColumnData {column, property?, references?, primaryKey?}`
|
|
559
|
-
- `column: string` - The sql column name
|
|
560
|
-
- `propery: string` - The javascript property name for this column (defaults to camelCase of `column`)
|
|
561
|
-
- `references: Bo` - The relationship to another Bo (defaults to null)
|
|
562
|
-
- `primaryKey: boolean` - Is this column (part of) the primary key (defaults to false)
|
|
563
|
-
- `string` - If a string, it is applied as the `column` value, with all others defaulted.
|
|
564
|
-
- (Note: if there is no primary key, `id` is defaulted)
|
|
565
|
-
|
|
566
|
-
Optional
|
|
567
|
-
|
|
568
|
-
- `get BoCollection(): BoCollection` - Returns the business object collection class constructor.
|
|
569
|
-
- `static get displayName(): string` - Returns the string display name of the business object (defaults to camelcase of tableName)
|
|
570
|
-
|
|
571
|
-
**Public Methods**
|
|
572
|
-
|
|
573
|
-
- `createOneFromDatabase(relationalResultRows)` - Returns the properly structured Bo object (asserts one).
|
|
574
|
-
- `createOneOrNoneFromDatabase(relationalResultRows)` - Returns the properly structured Bo object if results (asserts one or none).
|
|
575
|
-
- `createManyFromDatabase(relationalResultRows)` - Returns the properly structured Bo objects (asserts many).
|
|
576
|
-
- `createFromDatabase(relationalResultRows)` - Returns any properly structured Bo objects (no assertion on count).
|
|
577
|
-
|
|
578
|
-
(Note these create from database methods ensure their count against the number of generated top level business objects - not the number of relational rows used!)
|
|
579
|
-
|
|
580
|
-
#### `BaseBoCollection`
|
|
581
|
-
|
|
582
|
-
An abstract class which is the base class your Bo Collection classes extend.
|
|
583
|
-
|
|
584
|
-
**Abstract Methods** to be implemented
|
|
585
|
-
|
|
586
|
-
- `static get Bo(): BO` - Returns the individual (singular) business object class constructor.
|
|
587
|
-
|
|
588
|
-
Optional
|
|
589
|
-
|
|
590
|
-
- `get displayName(): BO` - Returns the string display name of the business object collection (defaults to bo displayName with an "s")
|
|
591
|
-
|
|
592
|
-
**Public Methods**
|
|
593
|
-
|
|
594
|
-
- `filter(predicate)`
|
|
595
|
-
- and some advanced methods
|
|
596
|
-
|
|
597
|
-
#### `BaseDAO`
|
|
598
|
-
|
|
599
|
-
The base class your DAO classes extend.
|
|
600
|
-
|
|
601
|
-
**Abstract Methods** to be implemented
|
|
602
|
-
|
|
603
|
-
- `get Bo(): BO` - Returns the business object class constructor.
|
|
604
|
-
|
|
605
|
-
**Public Methods**
|
|
606
|
-
|
|
607
|
-
- `constructor({ db }})`
|
|
608
|
-
|
|
609
|
-
Abstractions over `pg-promise`'s query methods:
|
|
610
|
-
|
|
611
|
-
- `one(query: string, params: object)` - executes a query and returns a Bo, or throws.
|
|
612
|
-
- `oneOrNone(query: string, params: object)` - executes a query and returns a Bo or undefined, or throws.
|
|
613
|
-
- `many(query: string, params: object)` - executes a query and returns a BoCollection with at least one model, or throws.
|
|
614
|
-
- `any(query: string, params: object)` - executes a query and returns a BoCollection.
|
|
615
|
-
- `none(query: string, params: object)` - executes a query and returns null.
|
|
616
|
-
|
|
617
|
-
(Note these create from database 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.)
|
|
618
|
-
|
|
619
|
-
Built-in "basic" / generic functions which your extending DAO class instance gets for free
|
|
620
|
-
|
|
621
|
-
- `getMatching(bo: BaseBO)`
|
|
622
|
-
- `getOneOrNoneMatching(bo: BaseBO)`
|
|
623
|
-
- `getAnyMatching(bo: BaseBO)`
|
|
624
|
-
- `getAllMatching(bo: BaseBO)`
|
|
625
|
-
- `create(bo: BaseBO)`
|
|
626
|
-
- `update(bo: BaseBO)`
|
|
627
|
-
- `delete(bo: BaseBO)`
|
|
628
|
-
- `deleteMatching(bo: BaseBO)`
|
|
629
|
-
|
|
630
|
-
These are just provided because they are so common and straight-forward. However, the point of this library specifically contrasts against having a large surface area of pre-built functions to learn. The idea is to add a DAO class, and add your own custom functions with your own SQL.
|
|
631
|
-
|
|
632
|
-
### Methods
|
|
633
|
-
|
|
634
|
-
#### `createBaseBO({ getBusinessObjects }): BaseBo`
|
|
635
|
-
|
|
636
|
-
**Parameters**
|
|
637
|
-
|
|
638
|
-
- `getBusinessObjects: () => Array<BusinessObject>` - A function which returns an array of all the business objects. In order for a business model to properly structure/nest data which could include any other business object, each business object needs to know about every other business object. We accomplish this by accepting this function which returns an array of all the business objects. (There is of course a circular dependency with the base class needing all classes that will end up extending it, but using this function handles this gracefully).
|
|
639
|
-
|
|
640
|
-
**Return Value**
|
|
641
|
-
|
|
642
|
-
- The BaseBo class to extend for your business objects.
|
|
643
|
-
|
|
644
|
-
#### `createBaseDAO({ db, logError }): BaseDAO`
|
|
645
|
-
|
|
646
|
-
**Parameters**
|
|
647
|
-
|
|
648
|
-
- `logError: function`
|
|
649
|
-
- `db: (database driver)`
|
|
650
|
-
|
|
651
|
-
**Return Value**
|
|
652
|
-
|
|
653
|
-
- The BaseDAO class to extend for your dao classes.
|
|
654
|
-
|
|
655
642
|
## Current Status
|
|
656
643
|
|
|
657
644
|
#### Current Limitations (PRs welcome!)
|
|
658
645
|
|
|
659
|
-
- `pg-promise`/`node-postgres` is the only database driver supported out-of-the-box
|
|
660
|
-
- the dao you are writing your sql in must always be in the "select" and must be the one you want as your root(s) return objects
|
|
661
|
-
- the query can start from some other table, and join a bunch of times to get there, though
|
|
646
|
+
- `pg-promise`/`node-postgres` is the only database driver supported out-of-the-box. There is not technical reason for this, other than that the project I'm using has a postgres database and so I only had `pg-promise` in mind. We could support more database drivers out of the box.
|
|
662
647
|
- there must be a clear path in the "select" to your leaf joined-to-entities (eg, (Good): Article, ArticleTag, Tag, TagModerator, Moderator; not (Bad): Article, Moderator).
|
|
663
648
|
- the result of _the select_ must always be a non-circular tree (eg, (Bad): Article, Person, Group, GroupArticle, Article)
|
|
664
649
|
|