@rangka/core 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/.claude/skills/extend-core/SKILL.md +133 -0
- package/.turbo/turbo-build.log +4 -0
- package/CLAUDE.md +180 -0
- package/LICENSE +21 -0
- package/README.md +68 -0
- package/dist/__tests__/coerce.test.d.ts +2 -0
- package/dist/__tests__/coerce.test.d.ts.map +1 -0
- package/dist/__tests__/coerce.test.js +121 -0
- package/dist/__tests__/coerce.test.js.map +1 -0
- package/dist/__tests__/context.test.d.ts +2 -0
- package/dist/__tests__/context.test.d.ts.map +1 -0
- package/dist/__tests__/context.test.js +99 -0
- package/dist/__tests__/context.test.js.map +1 -0
- package/dist/__tests__/helpers.d.ts +3 -0
- package/dist/__tests__/helpers.d.ts.map +1 -0
- package/dist/__tests__/helpers.js +21 -0
- package/dist/__tests__/helpers.js.map +1 -0
- package/dist/__tests__/index.test.d.ts +2 -0
- package/dist/__tests__/index.test.d.ts.map +1 -0
- package/dist/__tests__/index.test.js +7 -0
- package/dist/__tests__/index.test.js.map +1 -0
- package/dist/__tests__/widgets.test.d.ts +2 -0
- package/dist/__tests__/widgets.test.d.ts.map +1 -0
- package/dist/__tests__/widgets.test.js +171 -0
- package/dist/__tests__/widgets.test.js.map +1 -0
- package/dist/api/__tests__/handlers.test.d.ts +2 -0
- package/dist/api/__tests__/handlers.test.d.ts.map +1 -0
- package/dist/api/__tests__/handlers.test.js +349 -0
- package/dist/api/__tests__/handlers.test.js.map +1 -0
- package/dist/api/__tests__/include-resolver.test.d.ts +2 -0
- package/dist/api/__tests__/include-resolver.test.d.ts.map +1 -0
- package/dist/api/__tests__/include-resolver.test.js +338 -0
- package/dist/api/__tests__/include-resolver.test.js.map +1 -0
- package/dist/api/__tests__/middleware.test.d.ts +2 -0
- package/dist/api/__tests__/middleware.test.d.ts.map +1 -0
- package/dist/api/__tests__/middleware.test.js +83 -0
- package/dist/api/__tests__/middleware.test.js.map +1 -0
- package/dist/api/__tests__/openapi-schema.test.d.ts +2 -0
- package/dist/api/__tests__/openapi-schema.test.d.ts.map +1 -0
- package/dist/api/__tests__/openapi-schema.test.js +184 -0
- package/dist/api/__tests__/openapi-schema.test.js.map +1 -0
- package/dist/api/__tests__/query-parser.test.d.ts +2 -0
- package/dist/api/__tests__/query-parser.test.d.ts.map +1 -0
- package/dist/api/__tests__/query-parser.test.js +239 -0
- package/dist/api/__tests__/query-parser.test.js.map +1 -0
- package/dist/api/__tests__/route-generator.test.d.ts +2 -0
- package/dist/api/__tests__/route-generator.test.d.ts.map +1 -0
- package/dist/api/__tests__/route-generator.test.js +120 -0
- package/dist/api/__tests__/route-generator.test.js.map +1 -0
- package/dist/api/__tests__/server.test.d.ts +2 -0
- package/dist/api/__tests__/server.test.d.ts.map +1 -0
- package/dist/api/__tests__/server.test.js +62 -0
- package/dist/api/__tests__/server.test.js.map +1 -0
- package/dist/api/__tests__/swagger.test.d.ts +2 -0
- package/dist/api/__tests__/swagger.test.d.ts.map +1 -0
- package/dist/api/__tests__/swagger.test.js +144 -0
- package/dist/api/__tests__/swagger.test.js.map +1 -0
- package/dist/api/handlers.d.ts +23 -0
- package/dist/api/handlers.d.ts.map +1 -0
- package/dist/api/handlers.js +182 -0
- package/dist/api/handlers.js.map +1 -0
- package/dist/api/include-resolver.d.ts +6 -0
- package/dist/api/include-resolver.d.ts.map +1 -0
- package/dist/api/include-resolver.js +13 -0
- package/dist/api/include-resolver.js.map +1 -0
- package/dist/api/index.d.ts +5 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +4 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/meta-handler.d.ts +19 -0
- package/dist/api/meta-handler.d.ts.map +1 -0
- package/dist/api/meta-handler.js +188 -0
- package/dist/api/meta-handler.js.map +1 -0
- package/dist/api/openapi-schema.d.ts +25 -0
- package/dist/api/openapi-schema.d.ts.map +1 -0
- package/dist/api/openapi-schema.js +77 -0
- package/dist/api/openapi-schema.js.map +1 -0
- package/dist/api/query-parser.d.ts +81 -0
- package/dist/api/query-parser.d.ts.map +1 -0
- package/dist/api/query-parser.js +232 -0
- package/dist/api/query-parser.js.map +1 -0
- package/dist/api/route-generator.d.ts +161 -0
- package/dist/api/route-generator.d.ts.map +1 -0
- package/dist/api/route-generator.js +315 -0
- package/dist/api/route-generator.js.map +1 -0
- package/dist/api/server.d.ts +8 -0
- package/dist/api/server.d.ts.map +1 -0
- package/dist/api/server.js +128 -0
- package/dist/api/server.js.map +1 -0
- package/dist/api/types.d.ts +20 -0
- package/dist/api/types.d.ts.map +1 -0
- package/dist/api/types.js +2 -0
- package/dist/api/types.js.map +1 -0
- package/dist/audit/__tests__/audit.test.d.ts +2 -0
- package/dist/audit/__tests__/audit.test.d.ts.map +1 -0
- package/dist/audit/__tests__/audit.test.js +127 -0
- package/dist/audit/__tests__/audit.test.js.map +1 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +3 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/record.d.ts +4 -0
- package/dist/audit/record.d.ts.map +1 -0
- package/dist/audit/record.js +52 -0
- package/dist/audit/record.js.map +1 -0
- package/dist/audit/tables.d.ts +3 -0
- package/dist/audit/tables.d.ts.map +1 -0
- package/dist/audit/tables.js +46 -0
- package/dist/audit/tables.js.map +1 -0
- package/dist/audit/types.d.ts +27 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/auth/__tests__/core-module.test.d.ts +2 -0
- package/dist/auth/__tests__/core-module.test.d.ts.map +1 -0
- package/dist/auth/__tests__/core-module.test.js +49 -0
- package/dist/auth/__tests__/core-module.test.js.map +1 -0
- package/dist/auth/__tests__/debug.test.d.ts +2 -0
- package/dist/auth/__tests__/debug.test.d.ts.map +1 -0
- package/dist/auth/__tests__/debug.test.js +42 -0
- package/dist/auth/__tests__/debug.test.js.map +1 -0
- package/dist/auth/__tests__/field-permissions.test.d.ts +2 -0
- package/dist/auth/__tests__/field-permissions.test.d.ts.map +1 -0
- package/dist/auth/__tests__/field-permissions.test.js +213 -0
- package/dist/auth/__tests__/field-permissions.test.js.map +1 -0
- package/dist/auth/__tests__/integration.test.d.ts +2 -0
- package/dist/auth/__tests__/integration.test.d.ts.map +1 -0
- package/dist/auth/__tests__/integration.test.js +186 -0
- package/dist/auth/__tests__/integration.test.js.map +1 -0
- package/dist/auth/__tests__/meta-boot.test.d.ts +2 -0
- package/dist/auth/__tests__/meta-boot.test.d.ts.map +1 -0
- package/dist/auth/__tests__/meta-boot.test.js +459 -0
- package/dist/auth/__tests__/meta-boot.test.js.map +1 -0
- package/dist/auth/__tests__/model-permissions.test.d.ts +2 -0
- package/dist/auth/__tests__/model-permissions.test.d.ts.map +1 -0
- package/dist/auth/__tests__/model-permissions.test.js +171 -0
- package/dist/auth/__tests__/model-permissions.test.js.map +1 -0
- package/dist/auth/__tests__/password.test.d.ts +2 -0
- package/dist/auth/__tests__/password.test.d.ts.map +1 -0
- package/dist/auth/__tests__/password.test.js +25 -0
- package/dist/auth/__tests__/password.test.js.map +1 -0
- package/dist/auth/__tests__/permission-registry.test.d.ts +2 -0
- package/dist/auth/__tests__/permission-registry.test.d.ts.map +1 -0
- package/dist/auth/__tests__/permission-registry.test.js +225 -0
- package/dist/auth/__tests__/permission-registry.test.js.map +1 -0
- package/dist/auth/__tests__/scope-hook.test.d.ts +2 -0
- package/dist/auth/__tests__/scope-hook.test.d.ts.map +1 -0
- package/dist/auth/__tests__/scope-hook.test.js +429 -0
- package/dist/auth/__tests__/scope-hook.test.js.map +1 -0
- package/dist/auth/__tests__/scope-registry.test.d.ts +2 -0
- package/dist/auth/__tests__/scope-registry.test.d.ts.map +1 -0
- package/dist/auth/__tests__/scope-registry.test.js +261 -0
- package/dist/auth/__tests__/scope-registry.test.js.map +1 -0
- package/dist/auth/__tests__/scopes.test.d.ts +2 -0
- package/dist/auth/__tests__/scopes.test.d.ts.map +1 -0
- package/dist/auth/__tests__/scopes.test.js +57 -0
- package/dist/auth/__tests__/scopes.test.js.map +1 -0
- package/dist/auth/__tests__/session.test.d.ts +2 -0
- package/dist/auth/__tests__/session.test.d.ts.map +1 -0
- package/dist/auth/__tests__/session.test.js +199 -0
- package/dist/auth/__tests__/session.test.js.map +1 -0
- package/dist/auth/core-models.d.ts +110 -0
- package/dist/auth/core-models.d.ts.map +1 -0
- package/dist/auth/core-models.js +48 -0
- package/dist/auth/core-models.js.map +1 -0
- package/dist/auth/core-module.d.ts +5 -0
- package/dist/auth/core-module.d.ts.map +1 -0
- package/dist/auth/core-module.js +48 -0
- package/dist/auth/core-module.js.map +1 -0
- package/dist/auth/debug.d.ts +20 -0
- package/dist/auth/debug.d.ts.map +1 -0
- package/dist/auth/debug.js +118 -0
- package/dist/auth/debug.js.map +1 -0
- package/dist/auth/field-permissions.d.ts +11 -0
- package/dist/auth/field-permissions.d.ts.map +1 -0
- package/dist/auth/field-permissions.js +82 -0
- package/dist/auth/field-permissions.js.map +1 -0
- package/dist/auth/index.d.ts +15 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +12 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/model-permissions.d.ts +8 -0
- package/dist/auth/model-permissions.d.ts.map +1 -0
- package/dist/auth/model-permissions.js +35 -0
- package/dist/auth/model-permissions.js.map +1 -0
- package/dist/auth/password.d.ts +3 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +19 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/permission-registry.d.ts +27 -0
- package/dist/auth/permission-registry.d.ts.map +1 -0
- package/dist/auth/permission-registry.js +148 -0
- package/dist/auth/permission-registry.js.map +1 -0
- package/dist/auth/scope-filters.d.ts +3 -0
- package/dist/auth/scope-filters.d.ts.map +1 -0
- package/dist/auth/scope-filters.js +9 -0
- package/dist/auth/scope-filters.js.map +1 -0
- package/dist/auth/scope-registry.d.ts +31 -0
- package/dist/auth/scope-registry.d.ts.map +1 -0
- package/dist/auth/scope-registry.js +78 -0
- package/dist/auth/scope-registry.js.map +1 -0
- package/dist/auth/scopes.d.ts +16 -0
- package/dist/auth/scopes.d.ts.map +1 -0
- package/dist/auth/scopes.js +93 -0
- package/dist/auth/scopes.js.map +1 -0
- package/dist/auth/seed.d.ts +3 -0
- package/dist/auth/seed.d.ts.map +1 -0
- package/dist/auth/seed.js +40 -0
- package/dist/auth/seed.js.map +1 -0
- package/dist/auth/session.d.ts +15 -0
- package/dist/auth/session.d.ts.map +1 -0
- package/dist/auth/session.js +138 -0
- package/dist/auth/session.js.map +1 -0
- package/dist/auth/types.d.ts +44 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +2 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/boot/__tests__/page-scanning.test.d.ts +2 -0
- package/dist/boot/__tests__/page-scanning.test.d.ts.map +1 -0
- package/dist/boot/__tests__/page-scanning.test.js +144 -0
- package/dist/boot/__tests__/page-scanning.test.js.map +1 -0
- package/dist/boot/__tests__/page-utils.test.d.ts +2 -0
- package/dist/boot/__tests__/page-utils.test.d.ts.map +1 -0
- package/dist/boot/__tests__/page-utils.test.js +204 -0
- package/dist/boot/__tests__/page-utils.test.js.map +1 -0
- package/dist/boot/__tests__/project-scanner.test.d.ts +2 -0
- package/dist/boot/__tests__/project-scanner.test.d.ts.map +1 -0
- package/dist/boot/__tests__/project-scanner.test.js +71 -0
- package/dist/boot/__tests__/project-scanner.test.js.map +1 -0
- package/dist/boot/dependency-sort.d.ts +3 -0
- package/dist/boot/dependency-sort.d.ts.map +1 -0
- package/dist/boot/dependency-sort.js +63 -0
- package/dist/boot/dependency-sort.js.map +1 -0
- package/dist/boot/discovery.d.ts +14 -0
- package/dist/boot/discovery.d.ts.map +1 -0
- package/dist/boot/discovery.js +80 -0
- package/dist/boot/discovery.js.map +1 -0
- package/dist/boot/index.d.ts +68 -0
- package/dist/boot/index.d.ts.map +1 -0
- package/dist/boot/index.js +309 -0
- package/dist/boot/index.js.map +1 -0
- package/dist/boot/page-utils.d.ts +24 -0
- package/dist/boot/page-utils.d.ts.map +1 -0
- package/dist/boot/page-utils.js +77 -0
- package/dist/boot/page-utils.js.map +1 -0
- package/dist/boot/project-scanner.d.ts +69 -0
- package/dist/boot/project-scanner.d.ts.map +1 -0
- package/dist/boot/project-scanner.js +293 -0
- package/dist/boot/project-scanner.js.map +1 -0
- package/dist/boot/schema-loader.d.ts +16 -0
- package/dist/boot/schema-loader.d.ts.map +1 -0
- package/dist/boot/schema-loader.js +15 -0
- package/dist/boot/schema-loader.js.map +1 -0
- package/dist/boot/schema-merger.d.ts +12 -0
- package/dist/boot/schema-merger.d.ts.map +1 -0
- package/dist/boot/schema-merger.js +93 -0
- package/dist/boot/schema-merger.js.map +1 -0
- package/dist/boot/traits.d.ts +6 -0
- package/dist/boot/traits.d.ts.map +1 -0
- package/dist/boot/traits.js +17 -0
- package/dist/boot/traits.js.map +1 -0
- package/dist/boot/types.d.ts +65 -0
- package/dist/boot/types.d.ts.map +1 -0
- package/dist/boot/types.js +33 -0
- package/dist/boot/types.js.map +1 -0
- package/dist/context.d.ts +34 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +70 -0
- package/dist/context.js.map +1 -0
- package/dist/db/__tests__/cascade-delete.test.d.ts +2 -0
- package/dist/db/__tests__/cascade-delete.test.d.ts.map +1 -0
- package/dist/db/__tests__/cascade-delete.test.js +136 -0
- package/dist/db/__tests__/cascade-delete.test.js.map +1 -0
- package/dist/db/__tests__/desired-state.test.d.ts +2 -0
- package/dist/db/__tests__/desired-state.test.d.ts.map +1 -0
- package/dist/db/__tests__/desired-state.test.js +119 -0
- package/dist/db/__tests__/desired-state.test.js.map +1 -0
- package/dist/db/__tests__/diff-engine.test.d.ts +2 -0
- package/dist/db/__tests__/diff-engine.test.d.ts.map +1 -0
- package/dist/db/__tests__/diff-engine.test.js +600 -0
- package/dist/db/__tests__/diff-engine.test.js.map +1 -0
- package/dist/db/__tests__/field-mapper.test.d.ts +2 -0
- package/dist/db/__tests__/field-mapper.test.d.ts.map +1 -0
- package/dist/db/__tests__/field-mapper.test.js +320 -0
- package/dist/db/__tests__/field-mapper.test.js.map +1 -0
- package/dist/db/__tests__/introspect.test.d.ts +2 -0
- package/dist/db/__tests__/introspect.test.d.ts.map +1 -0
- package/dist/db/__tests__/introspect.test.js +64 -0
- package/dist/db/__tests__/introspect.test.js.map +1 -0
- package/dist/db/__tests__/search-filter.test.d.ts +2 -0
- package/dist/db/__tests__/search-filter.test.d.ts.map +1 -0
- package/dist/db/__tests__/search-filter.test.js +41 -0
- package/dist/db/__tests__/search-filter.test.js.map +1 -0
- package/dist/db/__tests__/sequence.test.d.ts +2 -0
- package/dist/db/__tests__/sequence.test.d.ts.map +1 -0
- package/dist/db/__tests__/sequence.test.js +183 -0
- package/dist/db/__tests__/sequence.test.js.map +1 -0
- package/dist/db/auto-sync.d.ts +16 -0
- package/dist/db/auto-sync.d.ts.map +1 -0
- package/dist/db/auto-sync.js +104 -0
- package/dist/db/auto-sync.js.map +1 -0
- package/dist/db/client.d.ts +45 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +116 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/desired-state.d.ts +19 -0
- package/dist/db/desired-state.d.ts.map +1 -0
- package/dist/db/desired-state.js +82 -0
- package/dist/db/desired-state.js.map +1 -0
- package/dist/db/diff-engine.d.ts +53 -0
- package/dist/db/diff-engine.d.ts.map +1 -0
- package/dist/db/diff-engine.js +234 -0
- package/dist/db/diff-engine.js.map +1 -0
- package/dist/db/field-mapper.d.ts +22 -0
- package/dist/db/field-mapper.d.ts.map +1 -0
- package/dist/db/field-mapper.js +395 -0
- package/dist/db/field-mapper.js.map +1 -0
- package/dist/db/filter-applier.d.ts +4 -0
- package/dist/db/filter-applier.d.ts.map +1 -0
- package/dist/db/filter-applier.js +86 -0
- package/dist/db/filter-applier.js.map +1 -0
- package/dist/db/include-resolver.d.ts +20 -0
- package/dist/db/include-resolver.d.ts.map +1 -0
- package/dist/db/include-resolver.js +21 -0
- package/dist/db/include-resolver.js.map +1 -0
- package/dist/db/index.d.ts +16 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +11 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/introspect.d.ts +9 -0
- package/dist/db/introspect.d.ts.map +1 -0
- package/dist/db/introspect.js +194 -0
- package/dist/db/introspect.js.map +1 -0
- package/dist/db/model-include-resolver.d.ts +14 -0
- package/dist/db/model-include-resolver.d.ts.map +1 -0
- package/dist/db/model-include-resolver.js +232 -0
- package/dist/db/model-include-resolver.js.map +1 -0
- package/dist/db/model-ops.d.ts +46 -0
- package/dist/db/model-ops.d.ts.map +1 -0
- package/dist/db/model-ops.js +220 -0
- package/dist/db/model-ops.js.map +1 -0
- package/dist/db/scope-enforcer.d.ts +8 -0
- package/dist/db/scope-enforcer.d.ts.map +1 -0
- package/dist/db/scope-enforcer.js +22 -0
- package/dist/db/scope-enforcer.js.map +1 -0
- package/dist/db/types.d.ts +76 -0
- package/dist/db/types.d.ts.map +1 -0
- package/dist/db/types.js +2 -0
- package/dist/db/types.js.map +1 -0
- package/dist/errors.d.ts +19 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +37 -0
- package/dist/errors.js.map +1 -0
- package/dist/events/__tests__/bus.test.d.ts +2 -0
- package/dist/events/__tests__/bus.test.d.ts.map +1 -0
- package/dist/events/__tests__/bus.test.js +83 -0
- package/dist/events/__tests__/bus.test.js.map +1 -0
- package/dist/events/bus.d.ts +40 -0
- package/dist/events/bus.d.ts.map +1 -0
- package/dist/events/bus.js +74 -0
- package/dist/events/bus.js.map +1 -0
- package/dist/events/index.d.ts +3 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +2 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/types.d.ts +9 -0
- package/dist/events/types.d.ts.map +1 -0
- package/dist/events/types.js +2 -0
- package/dist/events/types.js.map +1 -0
- package/dist/external-model/__tests__/computed-fields.test.d.ts +2 -0
- package/dist/external-model/__tests__/computed-fields.test.d.ts.map +1 -0
- package/dist/external-model/__tests__/computed-fields.test.js +94 -0
- package/dist/external-model/__tests__/computed-fields.test.js.map +1 -0
- package/dist/external-model/__tests__/field-mapper.test.d.ts +2 -0
- package/dist/external-model/__tests__/field-mapper.test.d.ts.map +1 -0
- package/dist/external-model/__tests__/field-mapper.test.js +132 -0
- package/dist/external-model/__tests__/field-mapper.test.js.map +1 -0
- package/dist/external-model/__tests__/in-memory-ops.test.d.ts +2 -0
- package/dist/external-model/__tests__/in-memory-ops.test.d.ts.map +1 -0
- package/dist/external-model/__tests__/in-memory-ops.test.js +209 -0
- package/dist/external-model/__tests__/in-memory-ops.test.js.map +1 -0
- package/dist/external-model/__tests__/mutation-executor.test.d.ts +2 -0
- package/dist/external-model/__tests__/mutation-executor.test.d.ts.map +1 -0
- package/dist/external-model/__tests__/mutation-executor.test.js +135 -0
- package/dist/external-model/__tests__/mutation-executor.test.js.map +1 -0
- package/dist/external-model/__tests__/query-executor.test.d.ts +2 -0
- package/dist/external-model/__tests__/query-executor.test.d.ts.map +1 -0
- package/dist/external-model/__tests__/query-executor.test.js +241 -0
- package/dist/external-model/__tests__/query-executor.test.js.map +1 -0
- package/dist/external-model/__tests__/schema-converter.test.d.ts +2 -0
- package/dist/external-model/__tests__/schema-converter.test.d.ts.map +1 -0
- package/dist/external-model/__tests__/schema-converter.test.js +152 -0
- package/dist/external-model/__tests__/schema-converter.test.js.map +1 -0
- package/dist/external-model/computed-fields.d.ts +3 -0
- package/dist/external-model/computed-fields.d.ts.map +1 -0
- package/dist/external-model/computed-fields.js +10 -0
- package/dist/external-model/computed-fields.js.map +1 -0
- package/dist/external-model/define.d.ts +3 -0
- package/dist/external-model/define.d.ts.map +1 -0
- package/dist/external-model/define.js +4 -0
- package/dist/external-model/define.js.map +1 -0
- package/dist/external-model/external-model-ops.d.ts +27 -0
- package/dist/external-model/external-model-ops.d.ts.map +1 -0
- package/dist/external-model/external-model-ops.js +80 -0
- package/dist/external-model/external-model-ops.js.map +1 -0
- package/dist/external-model/field-mapper.d.ts +5 -0
- package/dist/external-model/field-mapper.d.ts.map +1 -0
- package/dist/external-model/field-mapper.js +49 -0
- package/dist/external-model/field-mapper.js.map +1 -0
- package/dist/external-model/in-memory-ops.d.ts +8 -0
- package/dist/external-model/in-memory-ops.d.ts.map +1 -0
- package/dist/external-model/in-memory-ops.js +97 -0
- package/dist/external-model/in-memory-ops.js.map +1 -0
- package/dist/external-model/index.d.ts +8 -0
- package/dist/external-model/index.d.ts.map +1 -0
- package/dist/external-model/index.js +6 -0
- package/dist/external-model/index.js.map +1 -0
- package/dist/external-model/mutation-executor.d.ts +27 -0
- package/dist/external-model/mutation-executor.d.ts.map +1 -0
- package/dist/external-model/mutation-executor.js +53 -0
- package/dist/external-model/mutation-executor.js.map +1 -0
- package/dist/external-model/query-executor.d.ts +37 -0
- package/dist/external-model/query-executor.d.ts.map +1 -0
- package/dist/external-model/query-executor.js +61 -0
- package/dist/external-model/query-executor.js.map +1 -0
- package/dist/external-model/schema-converter.d.ts +8 -0
- package/dist/external-model/schema-converter.d.ts.map +1 -0
- package/dist/external-model/schema-converter.js +38 -0
- package/dist/external-model/schema-converter.js.map +1 -0
- package/dist/external-model/types.d.ts +29 -0
- package/dist/external-model/types.d.ts.map +1 -0
- package/dist/external-model/types.js +2 -0
- package/dist/external-model/types.js.map +1 -0
- package/dist/fixtures/__tests__/fixtures.test.d.ts +2 -0
- package/dist/fixtures/__tests__/fixtures.test.d.ts.map +1 -0
- package/dist/fixtures/__tests__/fixtures.test.js +180 -0
- package/dist/fixtures/__tests__/fixtures.test.js.map +1 -0
- package/dist/fixtures/index.d.ts +4 -0
- package/dist/fixtures/index.d.ts.map +1 -0
- package/dist/fixtures/index.js +3 -0
- package/dist/fixtures/index.js.map +1 -0
- package/dist/fixtures/loader.d.ts +11 -0
- package/dist/fixtures/loader.d.ts.map +1 -0
- package/dist/fixtures/loader.js +157 -0
- package/dist/fixtures/loader.js.map +1 -0
- package/dist/fixtures/registry.d.ts +27 -0
- package/dist/fixtures/registry.d.ts.map +1 -0
- package/dist/fixtures/registry.js +103 -0
- package/dist/fixtures/registry.js.map +1 -0
- package/dist/fixtures/types.d.ts +29 -0
- package/dist/fixtures/types.d.ts.map +1 -0
- package/dist/fixtures/types.js +2 -0
- package/dist/fixtures/types.js.map +1 -0
- package/dist/helpers/assert-ownership.d.ts +4 -0
- package/dist/helpers/assert-ownership.d.ts.map +1 -0
- package/dist/helpers/assert-ownership.js +11 -0
- package/dist/helpers/assert-ownership.js.map +1 -0
- package/dist/helpers/coerce.d.ts +9 -0
- package/dist/helpers/coerce.d.ts.map +1 -0
- package/dist/helpers/coerce.js +28 -0
- package/dist/helpers/coerce.js.map +1 -0
- package/dist/helpers/stamping.d.ts +12 -0
- package/dist/helpers/stamping.d.ts.map +1 -0
- package/dist/helpers/stamping.js +20 -0
- package/dist/helpers/stamping.js.map +1 -0
- package/dist/helpers/validation.d.ts +3 -0
- package/dist/helpers/validation.d.ts.map +1 -0
- package/dist/helpers/validation.js +10 -0
- package/dist/helpers/validation.js.map +1 -0
- package/dist/hooks/__tests__/context.test.d.ts +2 -0
- package/dist/hooks/__tests__/context.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/context.test.js +62 -0
- package/dist/hooks/__tests__/context.test.js.map +1 -0
- package/dist/hooks/__tests__/executor.test.d.ts +2 -0
- package/dist/hooks/__tests__/executor.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/executor.test.js +339 -0
- package/dist/hooks/__tests__/executor.test.js.map +1 -0
- package/dist/hooks/__tests__/middleware.test.d.ts +2 -0
- package/dist/hooks/__tests__/middleware.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/middleware.test.js +187 -0
- package/dist/hooks/__tests__/middleware.test.js.map +1 -0
- package/dist/hooks/__tests__/registry.test.d.ts +2 -0
- package/dist/hooks/__tests__/registry.test.d.ts.map +1 -0
- package/dist/hooks/__tests__/registry.test.js +42 -0
- package/dist/hooks/__tests__/registry.test.js.map +1 -0
- package/dist/hooks/context.d.ts +20 -0
- package/dist/hooks/context.d.ts.map +1 -0
- package/dist/hooks/context.js +62 -0
- package/dist/hooks/context.js.map +1 -0
- package/dist/hooks/errors.d.ts +6 -0
- package/dist/hooks/errors.d.ts.map +1 -0
- package/dist/hooks/errors.js +11 -0
- package/dist/hooks/errors.js.map +1 -0
- package/dist/hooks/executor.d.ts +27 -0
- package/dist/hooks/executor.d.ts.map +1 -0
- package/dist/hooks/executor.js +72 -0
- package/dist/hooks/executor.js.map +1 -0
- package/dist/hooks/index.d.ts +7 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +6 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/middleware.d.ts +23 -0
- package/dist/hooks/middleware.d.ts.map +1 -0
- package/dist/hooks/middleware.js +137 -0
- package/dist/hooks/middleware.js.map +1 -0
- package/dist/hooks/registry.d.ts +9 -0
- package/dist/hooks/registry.d.ts.map +1 -0
- package/dist/hooks/registry.js +15 -0
- package/dist/hooks/registry.js.map +1 -0
- package/dist/hooks/types.d.ts +12 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +2 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +72 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +61 -0
- package/dist/index.js.map +1 -0
- package/dist/jobs/__tests__/enqueue.test.d.ts +2 -0
- package/dist/jobs/__tests__/enqueue.test.d.ts.map +1 -0
- package/dist/jobs/__tests__/enqueue.test.js +69 -0
- package/dist/jobs/__tests__/enqueue.test.js.map +1 -0
- package/dist/jobs/__tests__/integration.test.d.ts +2 -0
- package/dist/jobs/__tests__/integration.test.d.ts.map +1 -0
- package/dist/jobs/__tests__/integration.test.js +52 -0
- package/dist/jobs/__tests__/integration.test.js.map +1 -0
- package/dist/jobs/__tests__/registry.test.d.ts +2 -0
- package/dist/jobs/__tests__/registry.test.d.ts.map +1 -0
- package/dist/jobs/__tests__/registry.test.js +65 -0
- package/dist/jobs/__tests__/registry.test.js.map +1 -0
- package/dist/jobs/__tests__/scheduler.test.d.ts +2 -0
- package/dist/jobs/__tests__/scheduler.test.d.ts.map +1 -0
- package/dist/jobs/__tests__/scheduler.test.js +79 -0
- package/dist/jobs/__tests__/scheduler.test.js.map +1 -0
- package/dist/jobs/__tests__/worker-execution.test.d.ts +2 -0
- package/dist/jobs/__tests__/worker-execution.test.d.ts.map +1 -0
- package/dist/jobs/__tests__/worker-execution.test.js +171 -0
- package/dist/jobs/__tests__/worker-execution.test.js.map +1 -0
- package/dist/jobs/__tests__/worker.test.d.ts +2 -0
- package/dist/jobs/__tests__/worker.test.d.ts.map +1 -0
- package/dist/jobs/__tests__/worker.test.js +97 -0
- package/dist/jobs/__tests__/worker.test.js.map +1 -0
- package/dist/jobs/enqueue.d.ts +13 -0
- package/dist/jobs/enqueue.d.ts.map +1 -0
- package/dist/jobs/enqueue.js +58 -0
- package/dist/jobs/enqueue.js.map +1 -0
- package/dist/jobs/index.d.ts +6 -0
- package/dist/jobs/index.d.ts.map +1 -0
- package/dist/jobs/index.js +5 -0
- package/dist/jobs/index.js.map +1 -0
- package/dist/jobs/registry.d.ts +23 -0
- package/dist/jobs/registry.d.ts.map +1 -0
- package/dist/jobs/registry.js +72 -0
- package/dist/jobs/registry.js.map +1 -0
- package/dist/jobs/scheduler.d.ts +51 -0
- package/dist/jobs/scheduler.d.ts.map +1 -0
- package/dist/jobs/scheduler.js +172 -0
- package/dist/jobs/scheduler.js.map +1 -0
- package/dist/jobs/tables.d.ts +3 -0
- package/dist/jobs/tables.d.ts.map +1 -0
- package/dist/jobs/tables.js +128 -0
- package/dist/jobs/tables.js.map +1 -0
- package/dist/jobs/types.d.ts +55 -0
- package/dist/jobs/types.d.ts.map +1 -0
- package/dist/jobs/types.js +2 -0
- package/dist/jobs/types.js.map +1 -0
- package/dist/jobs/worker.d.ts +55 -0
- package/dist/jobs/worker.d.ts.map +1 -0
- package/dist/jobs/worker.js +228 -0
- package/dist/jobs/worker.js.map +1 -0
- package/dist/model-api/__tests__/cross-boundary-includes.test.d.ts +2 -0
- package/dist/model-api/__tests__/cross-boundary-includes.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/cross-boundary-includes.test.js +299 -0
- package/dist/model-api/__tests__/cross-boundary-includes.test.js.map +1 -0
- package/dist/model-api/__tests__/extended-api.test.d.ts +2 -0
- package/dist/model-api/__tests__/extended-api.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/extended-api.test.js +219 -0
- package/dist/model-api/__tests__/extended-api.test.js.map +1 -0
- package/dist/model-api/__tests__/filter-applier.test.d.ts +2 -0
- package/dist/model-api/__tests__/filter-applier.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/filter-applier.test.js +150 -0
- package/dist/model-api/__tests__/filter-applier.test.js.map +1 -0
- package/dist/model-api/__tests__/filter-translator.test.d.ts +2 -0
- package/dist/model-api/__tests__/filter-translator.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/filter-translator.test.js +157 -0
- package/dist/model-api/__tests__/filter-translator.test.js.map +1 -0
- package/dist/model-api/__tests__/include-resolver.test.d.ts +2 -0
- package/dist/model-api/__tests__/include-resolver.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/include-resolver.test.js +193 -0
- package/dist/model-api/__tests__/include-resolver.test.js.map +1 -0
- package/dist/model-api/__tests__/model-access.test.d.ts +2 -0
- package/dist/model-api/__tests__/model-access.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/model-access.test.js +242 -0
- package/dist/model-api/__tests__/model-access.test.js.map +1 -0
- package/dist/model-api/__tests__/query-builder.test.d.ts +2 -0
- package/dist/model-api/__tests__/query-builder.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/query-builder.test.js +190 -0
- package/dist/model-api/__tests__/query-builder.test.js.map +1 -0
- package/dist/model-api/__tests__/scope-enforcer.test.d.ts +2 -0
- package/dist/model-api/__tests__/scope-enforcer.test.d.ts.map +1 -0
- package/dist/model-api/__tests__/scope-enforcer.test.js +221 -0
- package/dist/model-api/__tests__/scope-enforcer.test.js.map +1 -0
- package/dist/model-api/field-access.d.ts +3 -0
- package/dist/model-api/field-access.d.ts.map +1 -0
- package/dist/model-api/field-access.js +25 -0
- package/dist/model-api/field-access.js.map +1 -0
- package/dist/model-api/filter-applier.d.ts +2 -0
- package/dist/model-api/filter-applier.d.ts.map +1 -0
- package/dist/model-api/filter-applier.js +2 -0
- package/dist/model-api/filter-applier.js.map +1 -0
- package/dist/model-api/filter-translator.d.ts +4 -0
- package/dist/model-api/filter-translator.d.ts.map +1 -0
- package/dist/model-api/filter-translator.js +61 -0
- package/dist/model-api/filter-translator.js.map +1 -0
- package/dist/model-api/include-resolver.d.ts +3 -0
- package/dist/model-api/include-resolver.d.ts.map +1 -0
- package/dist/model-api/include-resolver.js +2 -0
- package/dist/model-api/include-resolver.js.map +1 -0
- package/dist/model-api/index.d.ts +10 -0
- package/dist/model-api/index.d.ts.map +1 -0
- package/dist/model-api/index.js +63 -0
- package/dist/model-api/index.js.map +1 -0
- package/dist/model-api/query-builder.d.ts +35 -0
- package/dist/model-api/query-builder.d.ts.map +1 -0
- package/dist/model-api/query-builder.js +106 -0
- package/dist/model-api/query-builder.js.map +1 -0
- package/dist/model-api/scope-enforcer.d.ts +4 -0
- package/dist/model-api/scope-enforcer.d.ts.map +1 -0
- package/dist/model-api/scope-enforcer.js +3 -0
- package/dist/model-api/scope-enforcer.js.map +1 -0
- package/dist/model-api/types.d.ts +113 -0
- package/dist/model-api/types.d.ts.map +1 -0
- package/dist/model-api/types.js +2 -0
- package/dist/model-api/types.js.map +1 -0
- package/dist/plugins/__tests__/adapter-registry.test.d.ts +2 -0
- package/dist/plugins/__tests__/adapter-registry.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/adapter-registry.test.js +75 -0
- package/dist/plugins/__tests__/adapter-registry.test.js.map +1 -0
- package/dist/plugins/__tests__/lifecycle.test.d.ts +2 -0
- package/dist/plugins/__tests__/lifecycle.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/lifecycle.test.js +81 -0
- package/dist/plugins/__tests__/lifecycle.test.js.map +1 -0
- package/dist/plugins/__tests__/loader.test.d.ts +2 -0
- package/dist/plugins/__tests__/loader.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/loader.test.js +227 -0
- package/dist/plugins/__tests__/loader.test.js.map +1 -0
- package/dist/plugins/__tests__/validator.test.d.ts +2 -0
- package/dist/plugins/__tests__/validator.test.d.ts.map +1 -0
- package/dist/plugins/__tests__/validator.test.js +227 -0
- package/dist/plugins/__tests__/validator.test.js.map +1 -0
- package/dist/plugins/adapter-registry.d.ts +20 -0
- package/dist/plugins/adapter-registry.d.ts.map +1 -0
- package/dist/plugins/adapter-registry.js +39 -0
- package/dist/plugins/adapter-registry.js.map +1 -0
- package/dist/plugins/define.d.ts +3 -0
- package/dist/plugins/define.d.ts.map +1 -0
- package/dist/plugins/define.js +4 -0
- package/dist/plugins/define.js.map +1 -0
- package/dist/plugins/index.d.ts +8 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +6 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/lifecycle.d.ts +9 -0
- package/dist/plugins/lifecycle.d.ts.map +1 -0
- package/dist/plugins/lifecycle.js +23 -0
- package/dist/plugins/lifecycle.js.map +1 -0
- package/dist/plugins/loader.d.ts +27 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +96 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +57 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +3 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/plugins/validator.d.ts +16 -0
- package/dist/plugins/validator.d.ts.map +1 -0
- package/dist/plugins/validator.js +92 -0
- package/dist/plugins/validator.js.map +1 -0
- package/dist/schema/__tests__/registry-models-by-module.test.d.ts +2 -0
- package/dist/schema/__tests__/registry-models-by-module.test.d.ts.map +1 -0
- package/dist/schema/__tests__/registry-models-by-module.test.js +52 -0
- package/dist/schema/__tests__/registry-models-by-module.test.js.map +1 -0
- package/dist/schema/registry.d.ts +30 -0
- package/dist/schema/registry.d.ts.map +1 -0
- package/dist/schema/registry.js +81 -0
- package/dist/schema/registry.js.map +1 -0
- package/dist/schema/relationships.d.ts +6 -0
- package/dist/schema/relationships.d.ts.map +1 -0
- package/dist/schema/relationships.js +81 -0
- package/dist/schema/relationships.js.map +1 -0
- package/dist/schema/types.d.ts +39 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/types.js +2 -0
- package/dist/schema/types.js.map +1 -0
- package/dist/services/__tests__/integration.test.d.ts +2 -0
- package/dist/services/__tests__/integration.test.d.ts.map +1 -0
- package/dist/services/__tests__/integration.test.js +53 -0
- package/dist/services/__tests__/integration.test.js.map +1 -0
- package/dist/services/__tests__/registry.test.d.ts +2 -0
- package/dist/services/__tests__/registry.test.d.ts.map +1 -0
- package/dist/services/__tests__/registry.test.js +143 -0
- package/dist/services/__tests__/registry.test.js.map +1 -0
- package/dist/services/index.d.ts +3 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +2 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/registry.d.ts +48 -0
- package/dist/services/registry.d.ts.map +1 -0
- package/dist/services/registry.js +133 -0
- package/dist/services/registry.js.map +1 -0
- package/dist/services/types.d.ts +23 -0
- package/dist/services/types.d.ts.map +1 -0
- package/dist/services/types.js +2 -0
- package/dist/services/types.js.map +1 -0
- package/dist/validation/__tests__/field-validator.test.d.ts +2 -0
- package/dist/validation/__tests__/field-validator.test.d.ts.map +1 -0
- package/dist/validation/__tests__/field-validator.test.js +161 -0
- package/dist/validation/__tests__/field-validator.test.js.map +1 -0
- package/dist/validation/field-validator.d.ts +8 -0
- package/dist/validation/field-validator.d.ts.map +1 -0
- package/dist/validation/field-validator.js +85 -0
- package/dist/validation/field-validator.js.map +1 -0
- package/dist/validation/index.d.ts +2 -0
- package/dist/validation/index.d.ts.map +1 -0
- package/dist/validation/index.js +2 -0
- package/dist/validation/index.js.map +1 -0
- package/dist/widgets/index.d.ts +4 -0
- package/dist/widgets/index.d.ts.map +1 -0
- package/dist/widgets/index.js +3 -0
- package/dist/widgets/index.js.map +1 -0
- package/dist/widgets/slot-validator.d.ts +8 -0
- package/dist/widgets/slot-validator.d.ts.map +1 -0
- package/dist/widgets/slot-validator.js +69 -0
- package/dist/widgets/slot-validator.js.map +1 -0
- package/dist/widgets/widget-registry.d.ts +11 -0
- package/dist/widgets/widget-registry.d.ts.map +1 -0
- package/dist/widgets/widget-registry.js +25 -0
- package/dist/widgets/widget-registry.js.map +1 -0
- package/package.json +35 -0
- package/src/__tests__/coerce.test.ts +154 -0
- package/src/__tests__/context.test.ts +111 -0
- package/src/__tests__/helpers.ts +21 -0
- package/src/__tests__/index.test.ts +7 -0
- package/src/__tests__/widgets.test.ts +197 -0
- package/src/api/__tests__/handlers.test.ts +389 -0
- package/src/api/__tests__/include-resolver.test.ts +393 -0
- package/src/api/__tests__/middleware.test.ts +100 -0
- package/src/api/__tests__/openapi-schema.test.ts +210 -0
- package/src/api/__tests__/query-parser.test.ts +291 -0
- package/src/api/__tests__/route-generator.test.ts +137 -0
- package/src/api/__tests__/server.test.ts +73 -0
- package/src/api/__tests__/swagger.test.ts +166 -0
- package/src/api/handlers.ts +274 -0
- package/src/api/include-resolver.ts +27 -0
- package/src/api/index.ts +4 -0
- package/src/api/meta-handler.ts +254 -0
- package/src/api/openapi-schema.ts +99 -0
- package/src/api/query-parser.ts +315 -0
- package/src/api/route-generator.ts +448 -0
- package/src/api/server.ts +147 -0
- package/src/api/types.ts +16 -0
- package/src/audit/__tests__/audit.test.ts +144 -0
- package/src/audit/index.ts +3 -0
- package/src/audit/record.ts +69 -0
- package/src/audit/tables.ts +48 -0
- package/src/audit/types.ts +26 -0
- package/src/auth/__tests__/core-module.test.ts +54 -0
- package/src/auth/__tests__/debug.test.ts +47 -0
- package/src/auth/__tests__/field-permissions.test.ts +245 -0
- package/src/auth/__tests__/integration.test.ts +208 -0
- package/src/auth/__tests__/meta-boot.test.ts +538 -0
- package/src/auth/__tests__/model-permissions.test.ts +205 -0
- package/src/auth/__tests__/password.test.ts +29 -0
- package/src/auth/__tests__/permission-registry.test.ts +313 -0
- package/src/auth/__tests__/scope-hook.test.ts +509 -0
- package/src/auth/__tests__/scope-registry.test.ts +297 -0
- package/src/auth/__tests__/scopes.test.ts +66 -0
- package/src/auth/__tests__/session.test.ts +214 -0
- package/src/auth/core-models.ts +52 -0
- package/src/auth/core-module.ts +59 -0
- package/src/auth/debug.ts +157 -0
- package/src/auth/field-permissions.ts +116 -0
- package/src/auth/index.ts +37 -0
- package/src/auth/model-permissions.ts +59 -0
- package/src/auth/password.ts +22 -0
- package/src/auth/permission-registry.ts +171 -0
- package/src/auth/scope-filters.ts +11 -0
- package/src/auth/scope-registry.ts +121 -0
- package/src/auth/scopes.ts +146 -0
- package/src/auth/seed.ts +44 -0
- package/src/auth/session.ts +178 -0
- package/src/auth/types.ts +50 -0
- package/src/boot/__tests__/page-scanning.test.ts +170 -0
- package/src/boot/__tests__/page-utils.test.ts +225 -0
- package/src/boot/__tests__/project-scanner.test.ts +88 -0
- package/src/boot/dependency-sort.ts +82 -0
- package/src/boot/discovery.ts +85 -0
- package/src/boot/index.ts +457 -0
- package/src/boot/page-utils.ts +110 -0
- package/src/boot/project-scanner.ts +397 -0
- package/src/boot/schema-loader.ts +26 -0
- package/src/boot/schema-merger.ts +125 -0
- package/src/boot/traits.ts +25 -0
- package/src/boot/types.ts +73 -0
- package/src/context.ts +105 -0
- package/src/db/__tests__/cascade-delete.test.ts +182 -0
- package/src/db/__tests__/desired-state.test.ts +136 -0
- package/src/db/__tests__/diff-engine.test.ts +635 -0
- package/src/db/__tests__/field-mapper.test.ts +355 -0
- package/src/db/__tests__/introspect.test.ts +70 -0
- package/src/db/__tests__/search-filter.test.ts +45 -0
- package/src/db/__tests__/sequence.test.ts +221 -0
- package/src/db/auto-sync.ts +133 -0
- package/src/db/client.ts +147 -0
- package/src/db/desired-state.ts +98 -0
- package/src/db/diff-engine.ts +305 -0
- package/src/db/field-mapper.ts +504 -0
- package/src/db/filter-applier.ts +89 -0
- package/src/db/include-resolver.ts +40 -0
- package/src/db/index.ts +23 -0
- package/src/db/introspect.ts +265 -0
- package/src/db/model-include-resolver.ts +327 -0
- package/src/db/model-ops.ts +281 -0
- package/src/db/scope-enforcer.ts +37 -0
- package/src/db/types.ts +98 -0
- package/src/errors.ts +41 -0
- package/src/events/__tests__/bus.test.ts +105 -0
- package/src/events/bus.ts +89 -0
- package/src/events/index.ts +2 -0
- package/src/events/types.ts +9 -0
- package/src/external-model/__tests__/computed-fields.test.ts +106 -0
- package/src/external-model/__tests__/field-mapper.test.ts +160 -0
- package/src/external-model/__tests__/in-memory-ops.test.ts +247 -0
- package/src/external-model/__tests__/mutation-executor.test.ts +160 -0
- package/src/external-model/__tests__/query-executor.test.ts +284 -0
- package/src/external-model/__tests__/schema-converter.test.ts +174 -0
- package/src/external-model/computed-fields.ts +15 -0
- package/src/external-model/define.ts +5 -0
- package/src/external-model/external-model-ops.ts +108 -0
- package/src/external-model/field-mapper.ts +66 -0
- package/src/external-model/in-memory-ops.ts +107 -0
- package/src/external-model/index.ts +7 -0
- package/src/external-model/mutation-executor.ts +71 -0
- package/src/external-model/query-executor.ts +100 -0
- package/src/external-model/schema-converter.ts +53 -0
- package/src/external-model/types.ts +32 -0
- package/src/fixtures/__tests__/fixtures.test.ts +203 -0
- package/src/fixtures/index.ts +10 -0
- package/src/fixtures/loader.ts +196 -0
- package/src/fixtures/registry.ts +125 -0
- package/src/fixtures/types.ts +33 -0
- package/src/helpers/assert-ownership.ts +19 -0
- package/src/helpers/coerce.ts +28 -0
- package/src/helpers/stamping.ts +28 -0
- package/src/helpers/validation.ts +14 -0
- package/src/hooks/__tests__/context.test.ts +73 -0
- package/src/hooks/__tests__/executor.test.ts +433 -0
- package/src/hooks/__tests__/middleware.test.ts +224 -0
- package/src/hooks/__tests__/registry.test.ts +50 -0
- package/src/hooks/context.ts +89 -0
- package/src/hooks/errors.ts +11 -0
- package/src/hooks/executor.ts +115 -0
- package/src/hooks/index.ts +10 -0
- package/src/hooks/middleware.ts +220 -0
- package/src/hooks/registry.ts +20 -0
- package/src/hooks/types.ts +32 -0
- package/src/index.ts +172 -0
- package/src/jobs/__tests__/enqueue.test.ts +77 -0
- package/src/jobs/__tests__/integration.test.ts +71 -0
- package/src/jobs/__tests__/registry.test.ts +103 -0
- package/src/jobs/__tests__/scheduler.test.ts +92 -0
- package/src/jobs/__tests__/worker-execution.test.ts +202 -0
- package/src/jobs/__tests__/worker.test.ts +119 -0
- package/src/jobs/enqueue.ts +93 -0
- package/src/jobs/index.ts +14 -0
- package/src/jobs/registry.ts +92 -0
- package/src/jobs/scheduler.ts +205 -0
- package/src/jobs/tables.ts +132 -0
- package/src/jobs/types.ts +62 -0
- package/src/jobs/worker.ts +272 -0
- package/src/model-api/__tests__/cross-boundary-includes.test.ts +366 -0
- package/src/model-api/__tests__/extended-api.test.ts +244 -0
- package/src/model-api/__tests__/filter-applier.test.ts +177 -0
- package/src/model-api/__tests__/filter-translator.test.ts +186 -0
- package/src/model-api/__tests__/include-resolver.test.ts +226 -0
- package/src/model-api/__tests__/model-access.test.ts +284 -0
- package/src/model-api/__tests__/query-builder.test.ts +224 -0
- package/src/model-api/__tests__/scope-enforcer.test.ts +268 -0
- package/src/model-api/field-access.ts +28 -0
- package/src/model-api/filter-applier.ts +1 -0
- package/src/model-api/filter-translator.ts +67 -0
- package/src/model-api/include-resolver.ts +2 -0
- package/src/model-api/index.ts +86 -0
- package/src/model-api/query-builder.ts +155 -0
- package/src/model-api/scope-enforcer.ts +3 -0
- package/src/model-api/types.ts +139 -0
- package/src/plugins/__tests__/adapter-registry.test.ts +92 -0
- package/src/plugins/__tests__/lifecycle.test.ts +96 -0
- package/src/plugins/__tests__/loader.test.ts +273 -0
- package/src/plugins/__tests__/validator.test.ts +275 -0
- package/src/plugins/adapter-registry.ts +42 -0
- package/src/plugins/define.ts +5 -0
- package/src/plugins/index.ts +28 -0
- package/src/plugins/lifecycle.ts +27 -0
- package/src/plugins/loader.ts +126 -0
- package/src/plugins/types.ts +76 -0
- package/src/plugins/validator.ts +141 -0
- package/src/schema/__tests__/registry-models-by-module.test.ts +58 -0
- package/src/schema/registry.ts +93 -0
- package/src/schema/relationships.ts +93 -0
- package/src/schema/types.ts +43 -0
- package/src/services/__tests__/integration.test.ts +63 -0
- package/src/services/__tests__/registry.test.ts +175 -0
- package/src/services/index.ts +13 -0
- package/src/services/registry.ts +156 -0
- package/src/services/types.ts +27 -0
- package/src/validation/__tests__/field-validator.test.ts +195 -0
- package/src/validation/field-validator.ts +113 -0
- package/src/validation/index.ts +1 -0
- package/src/widgets/index.ts +3 -0
- package/src/widgets/slot-validator.ts +87 -0
- package/src/widgets/widget-registry.ts +32 -0
- package/tests/boot.test.ts +323 -0
- package/tests/dependency-sort.test.ts +99 -0
- package/tests/discovery.test.ts +126 -0
- package/tests/registry.test.ts +216 -0
- package/tests/schema-loader.test.ts +52 -0
- package/tests/schema-merger.test.ts +180 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
- package/vitest.config.ts +14 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ModelOps, QueryState, QueryResult, QueryResultWithMeta } from '../model-api/types.js';
|
|
2
|
+
import type { RequestContext } from '../auth/types.js';
|
|
3
|
+
import type { DataAdapter, AdapterCapability } from '../plugins/types.js';
|
|
4
|
+
import type { ExternalFieldConfig } from './types.js';
|
|
5
|
+
import { CapabilityNotSupportedError } from './mutation-executor.js';
|
|
6
|
+
export { CapabilityNotSupportedError };
|
|
7
|
+
export interface ExternalModelOpsConfig {
|
|
8
|
+
adapter: DataAdapter;
|
|
9
|
+
adapterName: string;
|
|
10
|
+
modelName: string;
|
|
11
|
+
fields: Record<string, ExternalFieldConfig>;
|
|
12
|
+
capabilities: AdapterCapability[];
|
|
13
|
+
}
|
|
14
|
+
export declare class ExternalModelOps implements ModelOps {
|
|
15
|
+
private readonly queryExecutor;
|
|
16
|
+
private readonly mutationExecutor;
|
|
17
|
+
constructor(config: ExternalModelOpsConfig);
|
|
18
|
+
find(state: QueryState): Promise<QueryResult>;
|
|
19
|
+
findWithMeta(state: QueryState): Promise<QueryResultWithMeta>;
|
|
20
|
+
findOne(state: QueryState): Promise<Record<string, unknown> | null>;
|
|
21
|
+
count(state: QueryState): Promise<number>;
|
|
22
|
+
get(id: string): Promise<Record<string, unknown> | null>;
|
|
23
|
+
create(data: Record<string, unknown>, _auth?: RequestContext): Promise<Record<string, unknown>>;
|
|
24
|
+
update(id: string, data: Record<string, unknown>, _auth?: RequestContext): Promise<Record<string, unknown>>;
|
|
25
|
+
delete(id: string, _auth?: RequestContext): Promise<Record<string, unknown>>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=external-model-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-model-ops.d.ts","sourceRoot":"","sources":["../../src/external-model/external-model-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,UAAU,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AACpG,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,OAAO,EAA4B,2BAA2B,EAAE,MAAM,wBAAwB,CAAC;AAE/F,OAAO,EAAE,2BAA2B,EAAE,CAAC;AAEvC,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAwB;IACtD,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAA2B;gBAEhD,MAAM,EAAE,sBAAsB;IAgBpC,IAAI,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,WAAW,CAAC;IAY7C,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAe7D,OAAO,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAUnE,KAAK,CAAC,KAAK,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;IAQzC,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAIxD,MAAM,CACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7B,MAAM,CACV,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,KAAK,CAAC,EAAE,cAAc,GACrB,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAI7B,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAMnF"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { ExternalQueryExecutor } from './query-executor.js';
|
|
2
|
+
import { ExternalMutationExecutor, CapabilityNotSupportedError } from './mutation-executor.js';
|
|
3
|
+
export { CapabilityNotSupportedError };
|
|
4
|
+
export class ExternalModelOps {
|
|
5
|
+
queryExecutor;
|
|
6
|
+
mutationExecutor;
|
|
7
|
+
constructor(config) {
|
|
8
|
+
this.queryExecutor = new ExternalQueryExecutor({
|
|
9
|
+
adapter: config.adapter,
|
|
10
|
+
modelName: config.modelName,
|
|
11
|
+
fields: config.fields,
|
|
12
|
+
capabilities: config.capabilities,
|
|
13
|
+
});
|
|
14
|
+
this.mutationExecutor = new ExternalMutationExecutor({
|
|
15
|
+
adapter: config.adapter,
|
|
16
|
+
adapterName: config.adapterName,
|
|
17
|
+
modelName: config.modelName,
|
|
18
|
+
fields: config.fields,
|
|
19
|
+
capabilities: config.capabilities,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
async find(state) {
|
|
23
|
+
const result = await this.queryExecutor.execList({
|
|
24
|
+
filters: state.filters,
|
|
25
|
+
sorts: state.sorts,
|
|
26
|
+
fieldNames: state.fieldNames,
|
|
27
|
+
limitVal: state.limitVal,
|
|
28
|
+
offsetVal: state.offsetVal,
|
|
29
|
+
pageVal: state.pageVal,
|
|
30
|
+
});
|
|
31
|
+
return { data: result.data, total: result.total, hasMore: result.hasMore };
|
|
32
|
+
}
|
|
33
|
+
async findWithMeta(state) {
|
|
34
|
+
const limit = state.limitVal ?? 25;
|
|
35
|
+
const page = state.pageVal ?? 1;
|
|
36
|
+
const result = await this.queryExecutor.execList({
|
|
37
|
+
filters: state.filters,
|
|
38
|
+
sorts: state.sorts,
|
|
39
|
+
fieldNames: state.fieldNames,
|
|
40
|
+
limitVal: limit,
|
|
41
|
+
pageVal: page,
|
|
42
|
+
});
|
|
43
|
+
const total = result.total ?? result.data.length;
|
|
44
|
+
const totalPages = Math.ceil(total / limit);
|
|
45
|
+
return { data: result.data, meta: { total, page, limit, totalPages } };
|
|
46
|
+
}
|
|
47
|
+
async findOne(state) {
|
|
48
|
+
const result = await this.queryExecutor.execList({
|
|
49
|
+
filters: state.filters,
|
|
50
|
+
sorts: state.sorts,
|
|
51
|
+
fieldNames: state.fieldNames,
|
|
52
|
+
limitVal: 1,
|
|
53
|
+
});
|
|
54
|
+
return result.data[0] ?? null;
|
|
55
|
+
}
|
|
56
|
+
async count(state) {
|
|
57
|
+
return this.queryExecutor.execCount({
|
|
58
|
+
filters: state.filters,
|
|
59
|
+
sorts: state.sorts,
|
|
60
|
+
fieldNames: state.fieldNames,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
async get(id) {
|
|
64
|
+
return this.queryExecutor.execGet(id);
|
|
65
|
+
}
|
|
66
|
+
async create(data, _auth) {
|
|
67
|
+
return this.mutationExecutor.create(data);
|
|
68
|
+
}
|
|
69
|
+
async update(id, data, _auth) {
|
|
70
|
+
return this.mutationExecutor.update(id, data);
|
|
71
|
+
}
|
|
72
|
+
async delete(id, _auth) {
|
|
73
|
+
const record = await this.get(id);
|
|
74
|
+
if (!record)
|
|
75
|
+
throw new Error(`Record not found: ${id}`);
|
|
76
|
+
await this.mutationExecutor.delete(id);
|
|
77
|
+
return record;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=external-model-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"external-model-ops.js","sourceRoot":"","sources":["../../src/external-model/external-model-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { ExternalFieldConfig } from './types.js';
|
|
2
|
+
export declare function resolveFieldValue(record: Record<string, unknown>, path: string): unknown;
|
|
3
|
+
export declare function mapAdapterResponse(raw: Record<string, unknown>, fields: Record<string, ExternalFieldConfig>): Record<string, unknown>;
|
|
4
|
+
export declare function reverseMapForWrite(data: Record<string, unknown>, fields: Record<string, ExternalFieldConfig>): Record<string, unknown>;
|
|
5
|
+
//# sourceMappingURL=field-mapper.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-mapper.d.ts","sourceRoot":"","sources":["../../src/external-model/field-mapper.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAUxF;AAED,wBAAgB,kBAAkB,CAChC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAWzB;AAED,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,GAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAiBzB"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
export function resolveFieldValue(record, path) {
|
|
2
|
+
const parts = path.split('.');
|
|
3
|
+
let current = record;
|
|
4
|
+
for (const part of parts) {
|
|
5
|
+
if (current == null || typeof current !== 'object')
|
|
6
|
+
return undefined;
|
|
7
|
+
current = current[part];
|
|
8
|
+
}
|
|
9
|
+
return current;
|
|
10
|
+
}
|
|
11
|
+
export function mapAdapterResponse(raw, fields) {
|
|
12
|
+
const result = {};
|
|
13
|
+
for (const [fieldName, config] of Object.entries(fields)) {
|
|
14
|
+
if (config.computed)
|
|
15
|
+
continue;
|
|
16
|
+
const sourcePath = config.from ?? fieldName;
|
|
17
|
+
result[fieldName] = resolveFieldValue(raw, sourcePath);
|
|
18
|
+
}
|
|
19
|
+
return result;
|
|
20
|
+
}
|
|
21
|
+
export function reverseMapForWrite(data, fields) {
|
|
22
|
+
const result = {};
|
|
23
|
+
for (const [fieldName, value] of Object.entries(data)) {
|
|
24
|
+
const config = fields[fieldName];
|
|
25
|
+
if (!config || config.computed)
|
|
26
|
+
continue;
|
|
27
|
+
const targetPath = config.from ?? fieldName;
|
|
28
|
+
if (targetPath.includes('.')) {
|
|
29
|
+
setNestedValue(result, targetPath, value);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
result[targetPath] = value;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
function setNestedValue(obj, path, value) {
|
|
38
|
+
const parts = path.split('.');
|
|
39
|
+
let current = obj;
|
|
40
|
+
for (let i = 0; i < parts.length - 1; i++) {
|
|
41
|
+
const part = parts[i];
|
|
42
|
+
if (current[part] == null || typeof current[part] !== 'object') {
|
|
43
|
+
current[part] = {};
|
|
44
|
+
}
|
|
45
|
+
current = current[part];
|
|
46
|
+
}
|
|
47
|
+
current[parts[parts.length - 1]] = value;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=field-mapper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"field-mapper.js","sourceRoot":"","sources":["../../src/external-model/field-mapper.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,iBAAiB,CAAC,MAA+B,EAAE,IAAY;IAC7E,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAAY,MAAM,CAAC;IAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,OAAO,IAAI,IAAI,IAAI,OAAO,OAAO,KAAK,QAAQ;YAAE,OAAO,SAAS,CAAC;QACrE,OAAO,GAAI,OAAmC,CAAC,IAAI,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,GAA4B,EAC5B,MAA2C;IAE3C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,MAAM,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;QACzD,IAAI,MAAM,CAAC,QAAQ;YAAE,SAAS;QAE9B,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;QAC5C,MAAM,CAAC,SAAS,CAAC,GAAG,iBAAiB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACzD,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAChC,IAA6B,EAC7B,MAA2C;IAE3C,MAAM,MAAM,GAA4B,EAAE,CAAC;IAE3C,KAAK,MAAM,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACtD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC;QACjC,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ;YAAE,SAAS;QAEzC,MAAM,UAAU,GAAG,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC;QAE5C,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7B,cAAc,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,CAAC,CAAC;QAC5C,CAAC;aAAM,CAAC;YACN,MAAM,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC;QAC7B,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,cAAc,CAAC,GAA4B,EAAE,IAAY,EAAE,KAAc;IAChF,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,OAAO,GAA4B,GAAG,CAAC;IAE3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC1C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;YAC/D,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;QACrB,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAA4B,CAAC;IACrD,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { TranslatedFilter } from '../model-api/filter-translator.js';
|
|
2
|
+
export declare function applyInMemoryFilters(records: Record<string, unknown>[], filters: TranslatedFilter[]): Record<string, unknown>[];
|
|
3
|
+
export declare function applyInMemorySort(records: Record<string, unknown>[], sorts: Array<{
|
|
4
|
+
field: string;
|
|
5
|
+
direction: 'asc' | 'desc';
|
|
6
|
+
}>): Record<string, unknown>[];
|
|
7
|
+
export declare function applyInMemoryPagination(records: Record<string, unknown>[], limit: number, offset: number): Record<string, unknown>[];
|
|
8
|
+
//# sourceMappingURL=in-memory-ops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-ops.d.ts","sourceRoot":"","sources":["../../src/external-model/in-memory-ops.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAG1E,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,OAAO,EAAE,gBAAgB,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAsE3B;AAED,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,KAAK,EAAE,KAAK,CAAC;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;CAAE,CAAC,GACzD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAiB3B;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,EAClC,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAE3B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { toBool, isNil } from '../helpers/coerce.js';
|
|
2
|
+
export function applyInMemoryFilters(records, filters) {
|
|
3
|
+
return records.filter((record) => {
|
|
4
|
+
for (const { field, operator, value } of filters) {
|
|
5
|
+
const fieldValue = record[field];
|
|
6
|
+
switch (operator) {
|
|
7
|
+
case 'eq':
|
|
8
|
+
if (fieldValue !== value)
|
|
9
|
+
return false;
|
|
10
|
+
break;
|
|
11
|
+
case 'neq':
|
|
12
|
+
if (fieldValue === value)
|
|
13
|
+
return false;
|
|
14
|
+
break;
|
|
15
|
+
case 'gt':
|
|
16
|
+
if (!(fieldValue > value))
|
|
17
|
+
return false;
|
|
18
|
+
break;
|
|
19
|
+
case 'gte':
|
|
20
|
+
if (!(fieldValue >= value))
|
|
21
|
+
return false;
|
|
22
|
+
break;
|
|
23
|
+
case 'lt':
|
|
24
|
+
if (!(fieldValue < value))
|
|
25
|
+
return false;
|
|
26
|
+
break;
|
|
27
|
+
case 'lte':
|
|
28
|
+
if (!(fieldValue <= value))
|
|
29
|
+
return false;
|
|
30
|
+
break;
|
|
31
|
+
case 'in':
|
|
32
|
+
if (!value.includes(fieldValue))
|
|
33
|
+
return false;
|
|
34
|
+
break;
|
|
35
|
+
case 'notIn':
|
|
36
|
+
if (value.includes(fieldValue))
|
|
37
|
+
return false;
|
|
38
|
+
break;
|
|
39
|
+
case 'contains':
|
|
40
|
+
if (typeof fieldValue !== 'string' ||
|
|
41
|
+
!fieldValue.toLowerCase().includes(value.toLowerCase()))
|
|
42
|
+
return false;
|
|
43
|
+
break;
|
|
44
|
+
case 'startsWith':
|
|
45
|
+
if (typeof fieldValue !== 'string' ||
|
|
46
|
+
!fieldValue.toLowerCase().startsWith(value.toLowerCase()))
|
|
47
|
+
return false;
|
|
48
|
+
break;
|
|
49
|
+
case 'endsWith':
|
|
50
|
+
if (typeof fieldValue !== 'string' ||
|
|
51
|
+
!fieldValue.toLowerCase().endsWith(value.toLowerCase()))
|
|
52
|
+
return false;
|
|
53
|
+
break;
|
|
54
|
+
case 'is':
|
|
55
|
+
case 'isnull':
|
|
56
|
+
if (isNil(value) || toBool(value)) {
|
|
57
|
+
if (!isNil(fieldValue))
|
|
58
|
+
return false;
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (isNil(fieldValue))
|
|
62
|
+
return false;
|
|
63
|
+
}
|
|
64
|
+
break;
|
|
65
|
+
case 'like':
|
|
66
|
+
if (typeof fieldValue !== 'string' ||
|
|
67
|
+
!fieldValue.toLowerCase().includes(value.toLowerCase()))
|
|
68
|
+
return false;
|
|
69
|
+
break;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return true;
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
export function applyInMemorySort(records, sorts) {
|
|
76
|
+
if (sorts.length === 0)
|
|
77
|
+
return records;
|
|
78
|
+
return [...records].sort((a, b) => {
|
|
79
|
+
for (const { field, direction } of sorts) {
|
|
80
|
+
const aVal = a[field];
|
|
81
|
+
const bVal = b[field];
|
|
82
|
+
if (aVal === bVal)
|
|
83
|
+
continue;
|
|
84
|
+
if (aVal == null)
|
|
85
|
+
return direction === 'asc' ? -1 : 1;
|
|
86
|
+
if (bVal == null)
|
|
87
|
+
return direction === 'asc' ? 1 : -1;
|
|
88
|
+
const cmp = aVal < bVal ? -1 : 1;
|
|
89
|
+
return direction === 'asc' ? cmp : -cmp;
|
|
90
|
+
}
|
|
91
|
+
return 0;
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
export function applyInMemoryPagination(records, limit, offset) {
|
|
95
|
+
return records.slice(offset, offset + limit);
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=in-memory-ops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"in-memory-ops.js","sourceRoot":"","sources":["../../src/external-model/in-memory-ops.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export { defineExternalModel } from './define.js';
|
|
2
|
+
export { mapAdapterResponse, reverseMapForWrite, resolveFieldValue } from './field-mapper.js';
|
|
3
|
+
export { evaluateComputedFields } from './computed-fields.js';
|
|
4
|
+
export { externalModelToResolved } from './schema-converter.js';
|
|
5
|
+
export type { ExternalModelConfig, ExternalFieldConfig, ComputedFieldConfig } from './types.js';
|
|
6
|
+
export { ExternalModelOps } from './external-model-ops.js';
|
|
7
|
+
export type { ExternalModelOpsConfig } from './external-model-ops.js';
|
|
8
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/external-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,YAAY,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,YAAY,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { defineExternalModel } from './define.js';
|
|
2
|
+
export { mapAdapterResponse, reverseMapForWrite, resolveFieldValue } from './field-mapper.js';
|
|
3
|
+
export { evaluateComputedFields } from './computed-fields.js';
|
|
4
|
+
export { externalModelToResolved } from './schema-converter.js';
|
|
5
|
+
export { ExternalModelOps } from './external-model-ops.js';
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/external-model/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAC9F,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAEhE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { DataAdapter, AdapterCapability } from '../plugins/types.js';
|
|
2
|
+
import type { ExternalFieldConfig } from './types.js';
|
|
3
|
+
export declare class CapabilityNotSupportedError extends Error {
|
|
4
|
+
readonly adapterName: string;
|
|
5
|
+
readonly operation: string;
|
|
6
|
+
constructor(adapterName: string, operation: string);
|
|
7
|
+
}
|
|
8
|
+
export interface ExternalMutationOptions {
|
|
9
|
+
adapter: DataAdapter;
|
|
10
|
+
adapterName: string;
|
|
11
|
+
modelName: string;
|
|
12
|
+
fields: Record<string, ExternalFieldConfig>;
|
|
13
|
+
capabilities: AdapterCapability[];
|
|
14
|
+
}
|
|
15
|
+
export declare class ExternalMutationExecutor {
|
|
16
|
+
private readonly adapter;
|
|
17
|
+
private readonly adapterName;
|
|
18
|
+
private readonly modelName;
|
|
19
|
+
private readonly fields;
|
|
20
|
+
private readonly capabilities;
|
|
21
|
+
constructor(options: ExternalMutationOptions);
|
|
22
|
+
create(data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
23
|
+
update(id: string, data: Record<string, unknown>): Promise<Record<string, unknown>>;
|
|
24
|
+
delete(id: string): Promise<void>;
|
|
25
|
+
private transformRecord;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=mutation-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-executor.d.ts","sourceRoot":"","sources":["../../src/external-model/mutation-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAItD,qBAAa,2BAA4B,SAAQ,KAAK;aAElC,WAAW,EAAE,MAAM;aACnB,SAAS,EAAE,MAAM;gBADjB,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM;CAKpC;AAED,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,WAAW,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,OAAO,EAAE,uBAAuB;IAQtC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAUvE,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAUnF,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQvC,OAAO,CAAC,eAAe;CAIxB"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { reverseMapForWrite, mapAdapterResponse } from './field-mapper.js';
|
|
2
|
+
import { evaluateComputedFields } from './computed-fields.js';
|
|
3
|
+
export class CapabilityNotSupportedError extends Error {
|
|
4
|
+
adapterName;
|
|
5
|
+
operation;
|
|
6
|
+
constructor(adapterName, operation) {
|
|
7
|
+
super(`Adapter "${adapterName}" does not support operation "${operation}"`);
|
|
8
|
+
this.adapterName = adapterName;
|
|
9
|
+
this.operation = operation;
|
|
10
|
+
this.name = 'CapabilityNotSupportedError';
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export class ExternalMutationExecutor {
|
|
14
|
+
adapter;
|
|
15
|
+
adapterName;
|
|
16
|
+
modelName;
|
|
17
|
+
fields;
|
|
18
|
+
capabilities;
|
|
19
|
+
constructor(options) {
|
|
20
|
+
this.adapter = options.adapter;
|
|
21
|
+
this.adapterName = options.adapterName;
|
|
22
|
+
this.modelName = options.modelName;
|
|
23
|
+
this.fields = options.fields;
|
|
24
|
+
this.capabilities = new Set(options.capabilities);
|
|
25
|
+
}
|
|
26
|
+
async create(data) {
|
|
27
|
+
if (!this.capabilities.has('create') || !this.adapter.create) {
|
|
28
|
+
throw new CapabilityNotSupportedError(this.adapterName, 'create');
|
|
29
|
+
}
|
|
30
|
+
const mapped = reverseMapForWrite(data, this.fields);
|
|
31
|
+
const raw = await this.adapter.create(this.modelName, mapped);
|
|
32
|
+
return this.transformRecord(raw);
|
|
33
|
+
}
|
|
34
|
+
async update(id, data) {
|
|
35
|
+
if (!this.capabilities.has('update') || !this.adapter.update) {
|
|
36
|
+
throw new CapabilityNotSupportedError(this.adapterName, 'update');
|
|
37
|
+
}
|
|
38
|
+
const mapped = reverseMapForWrite(data, this.fields);
|
|
39
|
+
const raw = await this.adapter.update(this.modelName, id, mapped);
|
|
40
|
+
return this.transformRecord(raw);
|
|
41
|
+
}
|
|
42
|
+
async delete(id) {
|
|
43
|
+
if (!this.capabilities.has('delete') || !this.adapter.delete) {
|
|
44
|
+
throw new CapabilityNotSupportedError(this.adapterName, 'delete');
|
|
45
|
+
}
|
|
46
|
+
await this.adapter.delete(this.modelName, id);
|
|
47
|
+
}
|
|
48
|
+
transformRecord(raw) {
|
|
49
|
+
const mapped = mapAdapterResponse(raw, this.fields);
|
|
50
|
+
return evaluateComputedFields(mapped, this.fields);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=mutation-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mutation-executor.js","sourceRoot":"","sources":["../../src/external-model/mutation-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { DataAdapter } from '../plugins/types.js';
|
|
2
|
+
import type { ExternalFieldConfig } from './types.js';
|
|
3
|
+
import type { TranslatedFilter } from '../model-api/filter-translator.js';
|
|
4
|
+
import type { AdapterCapability } from '../plugins/types.js';
|
|
5
|
+
export interface ExternalQueryOptions {
|
|
6
|
+
adapter: DataAdapter;
|
|
7
|
+
modelName: string;
|
|
8
|
+
fields: Record<string, ExternalFieldConfig>;
|
|
9
|
+
capabilities: AdapterCapability[];
|
|
10
|
+
}
|
|
11
|
+
export interface ExternalQueryState {
|
|
12
|
+
filters: TranslatedFilter[];
|
|
13
|
+
sorts: Array<{
|
|
14
|
+
field: string;
|
|
15
|
+
direction: 'asc' | 'desc';
|
|
16
|
+
}>;
|
|
17
|
+
limitVal?: number;
|
|
18
|
+
offsetVal?: number;
|
|
19
|
+
pageVal?: number;
|
|
20
|
+
fieldNames: string[];
|
|
21
|
+
}
|
|
22
|
+
export declare class ExternalQueryExecutor {
|
|
23
|
+
private readonly adapter;
|
|
24
|
+
private readonly modelName;
|
|
25
|
+
private readonly fields;
|
|
26
|
+
private readonly capabilities;
|
|
27
|
+
constructor(options: ExternalQueryOptions);
|
|
28
|
+
execGet(id: string): Promise<Record<string, unknown> | null>;
|
|
29
|
+
execList(state: ExternalQueryState): Promise<{
|
|
30
|
+
data: Record<string, unknown>[];
|
|
31
|
+
total?: number;
|
|
32
|
+
hasMore?: boolean;
|
|
33
|
+
}>;
|
|
34
|
+
execCount(state: ExternalQueryState): Promise<number>;
|
|
35
|
+
private transformRecord;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=query-executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-executor.d.ts","sourceRoot":"","sources":["../../src/external-model/query-executor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,qBAAqB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAC;AAQ1E,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAE7D,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,WAAW,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;IAC5C,YAAY,EAAE,iBAAiB,EAAE,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,KAAK,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,KAAK,GAAG,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAc;IACtC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsC;IAC7D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAyB;gBAE1C,OAAO,EAAE,oBAAoB;IAOnC,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAM5D,QAAQ,CACZ,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAyC5E,SAAS,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,MAAM,CAAC;IAK3D,OAAO,CAAC,eAAe;CAIxB"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { mapAdapterResponse } from './field-mapper.js';
|
|
2
|
+
import { evaluateComputedFields } from './computed-fields.js';
|
|
3
|
+
import { applyInMemoryFilters, applyInMemorySort, applyInMemoryPagination, } from './in-memory-ops.js';
|
|
4
|
+
export class ExternalQueryExecutor {
|
|
5
|
+
adapter;
|
|
6
|
+
modelName;
|
|
7
|
+
fields;
|
|
8
|
+
capabilities;
|
|
9
|
+
constructor(options) {
|
|
10
|
+
this.adapter = options.adapter;
|
|
11
|
+
this.modelName = options.modelName;
|
|
12
|
+
this.fields = options.fields;
|
|
13
|
+
this.capabilities = new Set(options.capabilities);
|
|
14
|
+
}
|
|
15
|
+
async execGet(id) {
|
|
16
|
+
const raw = await this.adapter.get(this.modelName, id);
|
|
17
|
+
if (!raw)
|
|
18
|
+
return null;
|
|
19
|
+
return this.transformRecord(raw);
|
|
20
|
+
}
|
|
21
|
+
async execList(state) {
|
|
22
|
+
const limit = state.limitVal ?? 25;
|
|
23
|
+
const page = state.pageVal ?? 1;
|
|
24
|
+
if (this.capabilities.has('list')) {
|
|
25
|
+
const query = { pageSize: limit, page };
|
|
26
|
+
if (state.filters.length > 0 && this.capabilities.has('filter')) {
|
|
27
|
+
query.filters = state.filters.map((f) => ({
|
|
28
|
+
field: f.field,
|
|
29
|
+
operator: f.operator,
|
|
30
|
+
value: f.value,
|
|
31
|
+
}));
|
|
32
|
+
}
|
|
33
|
+
if (state.sorts.length > 0 && this.capabilities.has('sort')) {
|
|
34
|
+
query.sort = state.sorts[0];
|
|
35
|
+
}
|
|
36
|
+
const result = await this.adapter.list(this.modelName, query);
|
|
37
|
+
let data = result.data.map((r) => this.transformRecord(r));
|
|
38
|
+
if (state.filters.length > 0 && !this.capabilities.has('filter')) {
|
|
39
|
+
data = applyInMemoryFilters(data, state.filters);
|
|
40
|
+
}
|
|
41
|
+
if (state.sorts.length > 0 && !this.capabilities.has('sort')) {
|
|
42
|
+
data = applyInMemorySort(data, state.sorts);
|
|
43
|
+
}
|
|
44
|
+
if (!this.capabilities.has('filter') || !this.capabilities.has('sort')) {
|
|
45
|
+
data = applyInMemoryPagination(data, limit, 0);
|
|
46
|
+
}
|
|
47
|
+
return { data, total: result.total, hasMore: result.hasMore };
|
|
48
|
+
}
|
|
49
|
+
// Fallback: no list capability, fetch all via repeated get (not practical for real use)
|
|
50
|
+
return { data: [], total: 0 };
|
|
51
|
+
}
|
|
52
|
+
async execCount(state) {
|
|
53
|
+
const result = await this.execList(state);
|
|
54
|
+
return result.total ?? result.data.length;
|
|
55
|
+
}
|
|
56
|
+
transformRecord(raw) {
|
|
57
|
+
const mapped = mapAdapterResponse(raw, this.fields);
|
|
58
|
+
return evaluateComputedFields(mapped, this.fields);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=query-executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-executor.js","sourceRoot":"","sources":["../../src/external-model/query-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ResolvedModel, ModelRelationship } from '../schema/types.js';
|
|
2
|
+
import type { ExternalModelConfig } from './types.js';
|
|
3
|
+
export interface ExternalModelConversionResult {
|
|
4
|
+
model: ResolvedModel;
|
|
5
|
+
relationships: ModelRelationship[];
|
|
6
|
+
}
|
|
7
|
+
export declare function externalModelToResolved(config: ExternalModelConfig, app: string, module: string): ExternalModelConversionResult;
|
|
8
|
+
//# sourceMappingURL=schema-converter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-converter.d.ts","sourceRoot":"","sources":["../../src/external-model/schema-converter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAiB,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC1F,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAEtD,MAAM,WAAW,6BAA6B;IAC5C,KAAK,EAAE,aAAa,CAAC;IACrB,aAAa,EAAE,iBAAiB,EAAE,CAAC;CACpC;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,mBAAmB,EAC3B,GAAG,EAAE,MAAM,EACX,MAAM,EAAE,MAAM,GACb,6BAA6B,CAwC/B"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
export function externalModelToResolved(config, app, module) {
|
|
2
|
+
const qualifiedName = `${module}.${config.name}`;
|
|
3
|
+
const fields = Object.entries(config.fields).map(([name, fieldConfig]) => ({
|
|
4
|
+
name,
|
|
5
|
+
config: {
|
|
6
|
+
type: fieldConfig.type,
|
|
7
|
+
label: fieldConfig.label,
|
|
8
|
+
required: fieldConfig.required,
|
|
9
|
+
},
|
|
10
|
+
provenance: { source: 'base' },
|
|
11
|
+
}));
|
|
12
|
+
const relationships = [];
|
|
13
|
+
for (const [fieldName, fieldConfig] of Object.entries(config.fields)) {
|
|
14
|
+
if (!fieldConfig.relationship)
|
|
15
|
+
continue;
|
|
16
|
+
relationships.push({
|
|
17
|
+
type: fieldConfig.relationship.type,
|
|
18
|
+
from: qualifiedName,
|
|
19
|
+
field: fieldName,
|
|
20
|
+
to: fieldConfig.relationship.model,
|
|
21
|
+
foreignKey: fieldConfig.relationship.foreignKey,
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
const model = {
|
|
25
|
+
qualifiedName,
|
|
26
|
+
app,
|
|
27
|
+
module,
|
|
28
|
+
name: config.name,
|
|
29
|
+
label: config.label,
|
|
30
|
+
auditLog: false,
|
|
31
|
+
traits: [],
|
|
32
|
+
fields,
|
|
33
|
+
indexes: [],
|
|
34
|
+
source: config.source,
|
|
35
|
+
};
|
|
36
|
+
return { model, relationships };
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=schema-converter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"schema-converter.js","sourceRoot":"","sources":["../../src/external-model/schema-converter.ts"],"names":[],"mappings":"AAQA,MAAM,UAAU,uBAAuB,CACrC,MAA2B,EAC3B,GAAW,EACX,MAAc;IAEd,MAAM,aAAa,GAAG,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;IAEjD,MAAM,MAAM,GAAoB,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC;QAC1F,IAAI;QACJ,MAAM,EAAE;YACN,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;SAC/B;QACD,UAAU,EAAE,EAAE,MAAM,EAAE,MAAe,EAAE;KACxC,CAAC,CAAC,CAAC;IAEJ,MAAM,aAAa,GAAwB,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;QACrE,IAAI,CAAC,WAAW,CAAC,YAAY;YAAE,SAAS;QAExC,aAAa,CAAC,IAAI,CAAC;YACjB,IAAI,EAAE,WAAW,CAAC,YAAY,CAAC,IAAI;YACnC,IAAI,EAAE,aAAa;YACnB,KAAK,EAAE,SAAS;YAChB,EAAE,EAAE,WAAW,CAAC,YAAY,CAAC,KAAK;YAClC,UAAU,EAAE,WAAW,CAAC,YAAY,CAAC,UAAU;SAChD,CAAC,CAAC;IACL,CAAC;IAED,MAAM,KAAK,GAAkB;QAC3B,aAAa;QACb,GAAG;QACH,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,IAAI;QACjB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,EAAE;QACV,MAAM;QACN,OAAO,EAAE,EAAE;QACX,MAAM,EAAE,MAAM,CAAC,MAAM;KACtB,CAAC;IAEF,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;AAClC,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface ExternalFieldMapping {
|
|
2
|
+
from?: string;
|
|
3
|
+
}
|
|
4
|
+
export interface ComputedFieldConfig {
|
|
5
|
+
depends: string[];
|
|
6
|
+
compute: (record: Record<string, unknown>) => unknown;
|
|
7
|
+
}
|
|
8
|
+
export interface ExternalRelationshipConfig {
|
|
9
|
+
type: 'link' | 'hasMany';
|
|
10
|
+
model: string;
|
|
11
|
+
from?: string;
|
|
12
|
+
foreignKey?: string;
|
|
13
|
+
}
|
|
14
|
+
export interface ExternalFieldConfig {
|
|
15
|
+
type: 'string' | 'int' | 'decimal' | 'boolean' | 'date' | 'datetime' | 'json';
|
|
16
|
+
label?: string;
|
|
17
|
+
required?: boolean;
|
|
18
|
+
from?: string;
|
|
19
|
+
computed?: ComputedFieldConfig;
|
|
20
|
+
relationship?: ExternalRelationshipConfig;
|
|
21
|
+
}
|
|
22
|
+
export interface ExternalModelConfig {
|
|
23
|
+
name: string;
|
|
24
|
+
source: string;
|
|
25
|
+
module?: string;
|
|
26
|
+
label?: string;
|
|
27
|
+
fields: Record<string, ExternalFieldConfig>;
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/external-model/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;CACvD;AAED,MAAM,WAAW,0BAA0B;IACzC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,MAAM,CAAC;IAC9E,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,mBAAmB,CAAC;IAC/B,YAAY,CAAC,EAAE,0BAA0B,CAAC;CAC3C;AAED,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,mBAAmB,CAAC,CAAC;CAC7C"}
|