apexrest 0.4.0-beta.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/LICENSE +202 -0
- package/NOTICE +18 -0
- package/README.md +201 -0
- package/README.uk.md +201 -0
- package/dist/codex-compat/.agents/plugins/marketplace.json +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/.codex-plugin/plugin.json +32 -0
- package/dist/codex-compat/plugins/apexrest-apex/.mcp.json +11 -0
- package/dist/codex-compat/plugins/apexrest-apex/LICENSE +202 -0
- package/dist/codex-compat/plugins/apexrest-apex/NOTICE +18 -0
- package/dist/codex-compat/plugins/apexrest-apex/assets/apexrest-icon.svg +27 -0
- package/dist/codex-compat/plugins/apexrest-apex/assets/apexrest-logo.svg +27 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/ords/OrdsBridge.java +323 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/LICENCE.txt +118 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/bulbasaur.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/charmander.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/mewtwo.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/pikachu.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/sources.json +36 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/assets/squirtle.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/index.html +68 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.css +805 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/panel/panel.js +951 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/auth.mjs +17 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/package-lock.json +57 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/playwright/package.json +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/references/ORACLE-LICENSE.txt +35 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/references/index.json +54432 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/references/oracle-snapshot.json +648 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/references/search.json +1 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/deploy-plan.schema.json +210 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/operations.schema.json +1721 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/policy.schema.json +63 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/project.schema.json +250 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/toolchain-lock.schema.json +118 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/vendor/mcp.schema.json +120 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/schemas/vendor/plugin.schema.json +65 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.md +5 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/README.uk.md +5 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/.apex/apexlang.json +3 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/application.apx +51 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/deployments/default.json +2 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/page-groups.apx +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/pages/p00000-global-page.apx +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/pages/p00001-home.apx +35 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/pages/p09999-login.apx +254 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/authentications.apx +5 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/authorizations.apx +11 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/breadcrumbs.apx +18 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/build-options.apx +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/component-settings.apx +92 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/lists.apx +81 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/lovs.apx +20 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-144-rounded.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-192.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-256-rounded.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-32.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-512.png +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/static-files.apx +25 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/shared-components/themes/universal-theme/theme.apx +57 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/supporting-objects/deinstall-script.sql +0 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/blank-app/application/supporting-objects/supporting-objects.apx +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.md +7 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/README.uk.md +7 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/apex-overlay/pages/p00010-customers.apx +164 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/apex-overlay/pages/p00020-dashboard.apx +54 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/apex-overlay/pages/p00080-customer.apx +332 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/src/database/migrations/0001__customers.sql +10 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/src/database/packages/0010__customer_api.sql +28 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/src/database/packages/0020__customer_validation_trigger.sql +10 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/tests/e2e/customer-crud.spec.mjs +25 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/customer-crm/project/tests/sql/test_customers.sql +49 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/database-control/install.sql +17 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.md +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/templates/existing-app/README.uk.md +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/testkit/apex.mjs +58 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@hono__node-server__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@isaacs__fs-minipass__LICENSE +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@modelcontextprotocol__sdk__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__LICENSE +202 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@playwright__test__NOTICE +5 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__node__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@types__yauzl__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +55 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +436 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__accepts__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ajv-formats__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ajv__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__body-parser__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__body-parser__node_modules__content-type__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__bytes__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__call-bind-apply-helpers__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__call-bound__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__chownr__LICENSE.md +63 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__content-disposition__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__content-type__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cookie-signature__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cookie__LICENSE +24 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cors__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__cross-spawn__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__debug__LICENSE +20 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__depd__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__dunder-proto__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ee-first__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__encodeurl__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__es-define-property__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__es-errors__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__es-object-atoms__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__esbuild__LICENSE.md +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__escape-html__LICENSE +24 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__etag__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__eventsource-parser__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__eventsource__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__express-rate-limit__license +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__express__LICENSE +24 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fast-deep-equal__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fast-uri__LICENSE +30 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fflate__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__finalhandler__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__forwarded__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__fresh__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__function-bind__LICENSE +20 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__get-intrinsic__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__get-proto__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__gopd__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__has-symbols__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__hasown__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__hono__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__http-errors__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__iconv-lite__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__inherits__LICENSE +16 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ip-address__LICENSE +19 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ipaddr.js__LICENSE +19 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__is-promise__LICENSE +19 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__isexe__LICENSE +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__jose__LICENSE.md +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__json-schema-traverse__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__json-schema-typed__LICENSE.md +57 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__marked__LICENSE +44 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__math-intrinsics__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__media-typer__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__merge-descriptors__license +11 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__mime-db__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__mime-types__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__minipass__LICENSE.md +55 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__minizlib__LICENSE +26 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__ms__license.md +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__negotiator__LICENSE +24 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__negotiator__node_modules__content-type__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__object-assign__license +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__object-inspect__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__on-finished__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__once__LICENSE +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__parseurl__LICENSE +24 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__path-key__license +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__path-to-regexp__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__pend__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__pkce-challenge__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__LICENSE +202 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright-core__NOTICE +5 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__LICENSE +202 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__playwright__NOTICE +5 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__prettier__LICENSE +7 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__proxy-addr__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__qs__LICENSE.md +29 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__range-parser__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__raw-body__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__require-from-string__license +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__router__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__safer-buffer__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__send__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__serve-static__LICENSE +25 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__setprototypeof__LICENSE +13 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__shebang-command__license +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__shebang-regex__license +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel-list__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel-map__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel-weakmap__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__side-channel__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__statuses__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__tar__LICENSE.md +55 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__toidentifier__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__type-is__LICENSE +23 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__type-is__node_modules__content-type__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__LICENSE +55 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__typescript__NOTICE.txt +436 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__undici-types__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__unpipe__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__vary__LICENSE +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__which__LICENSE +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__wrappy__LICENSE +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yallist__LICENSE.md +63 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__yauzl__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__zod-to-json-schema__LICENSE +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/third-party/node_modules__zod__LICENSE +21 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/toolchains/compatibility.json +50 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/toolchains/sources.lock.json +14 -0
- package/dist/codex-compat/plugins/apexrest-apex/resources/toolchains/toolchain.lock.json +204 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/apexrest.mjs +226 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2SZCZZ3J.mjs +37111 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-2VGE5Y5J.mjs +994 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-3GSS6SJH.mjs +1424 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-5GOWABKB.mjs +409 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ARMO5ZAQ.mjs +25 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ED2YPDPS.mjs +1123 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-FPOEB42H.mjs +100 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-GFRSRK3K.mjs +16 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ICWYSHJ7.mjs +19 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-IPU64TJI.mjs +291 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-JWX4UQAZ.mjs +14 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-K3KT6RZY.mjs +1064 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-QLRGI23I.mjs +1307 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-RF4XQO6I.mjs +13 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-VPCUV5QA.mjs +237 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-WMJTK7ZB.mjs +201 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-WROK6RQH.mjs +200 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-XDJEGHUX.mjs +1179 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-YK34QNHH.mjs +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-Z6Y72JVG.mjs +37 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/chunk-ZQFJ2BNZ.mjs +329 -0
- package/dist/codex-compat/plugins/apexrest-apex/runtime/mcp.mjs +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/SKILL.md +32 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/assets/p00020-filtered-components.apx +152 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/references/component-routes.md +35 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-apexlang/references/native-dashboard.md +11 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/SKILL.md +11 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-database/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/SKILL.md +11 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-debug/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/SKILL.md +19 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-deploy/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/SKILL.md +38 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-install-dependencies/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/SKILL.md +27 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-menu/references/cli-catalog.md +22 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/SKILL.md +20 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-panel/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/SKILL.md +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-project/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/SKILL.md +9 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-review/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/SKILL.md +15 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-setup/references/ords.md +3 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-team/SKILL.md +24 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-team/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/SKILL.md +27 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-test/agents/openai.yaml +4 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/SKILL.md +17 -0
- package/dist/codex-compat/plugins/apexrest-apex/skills/apexrest-work/agents/openai.yaml +7 -0
- package/dist/resources/ords/OrdsBridge.java +323 -0
- package/dist/resources/panel/assets/LICENCE.txt +118 -0
- package/dist/resources/panel/assets/bulbasaur.png +0 -0
- package/dist/resources/panel/assets/charmander.png +0 -0
- package/dist/resources/panel/assets/mewtwo.png +0 -0
- package/dist/resources/panel/assets/pikachu.png +0 -0
- package/dist/resources/panel/assets/sources.json +36 -0
- package/dist/resources/panel/assets/squirtle.png +0 -0
- package/dist/resources/panel/index.html +68 -0
- package/dist/resources/panel/panel.css +805 -0
- package/dist/resources/panel/panel.js +951 -0
- package/dist/resources/playwright/auth.mjs +17 -0
- package/dist/resources/playwright/package-lock.json +57 -0
- package/dist/resources/playwright/package.json +9 -0
- package/dist/resources/references/ORACLE-LICENSE.txt +35 -0
- package/dist/resources/references/index.json +54432 -0
- package/dist/resources/references/oracle-snapshot.json +648 -0
- package/dist/resources/references/search.json +1 -0
- package/dist/resources/schemas/deploy-plan.schema.json +210 -0
- package/dist/resources/schemas/operations.schema.json +1721 -0
- package/dist/resources/schemas/policy.schema.json +63 -0
- package/dist/resources/schemas/project.schema.json +250 -0
- package/dist/resources/schemas/toolchain-lock.schema.json +118 -0
- package/dist/resources/schemas/vendor/mcp.schema.json +120 -0
- package/dist/resources/schemas/vendor/plugin.schema.json +65 -0
- package/dist/resources/templates/blank-app/README.md +5 -0
- package/dist/resources/templates/blank-app/README.uk.md +5 -0
- package/dist/resources/templates/blank-app/application/.apex/apexlang.json +3 -0
- package/dist/resources/templates/blank-app/application/application.apx +51 -0
- package/dist/resources/templates/blank-app/application/deployments/default.json +2 -0
- package/dist/resources/templates/blank-app/application/page-groups.apx +4 -0
- package/dist/resources/templates/blank-app/application/pages/p00000-global-page.apx +4 -0
- package/dist/resources/templates/blank-app/application/pages/p00001-home.apx +35 -0
- package/dist/resources/templates/blank-app/application/pages/p09999-login.apx +254 -0
- package/dist/resources/templates/blank-app/application/shared-components/authentications.apx +5 -0
- package/dist/resources/templates/blank-app/application/shared-components/authorizations.apx +11 -0
- package/dist/resources/templates/blank-app/application/shared-components/breadcrumbs.apx +18 -0
- package/dist/resources/templates/blank-app/application/shared-components/build-options.apx +4 -0
- package/dist/resources/templates/blank-app/application/shared-components/component-settings.apx +92 -0
- package/dist/resources/templates/blank-app/application/shared-components/lists.apx +81 -0
- package/dist/resources/templates/blank-app/application/shared-components/lovs.apx +20 -0
- package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-144-rounded.png +0 -0
- package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-192.png +0 -0
- package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-256-rounded.png +0 -0
- package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-32.png +0 -0
- package/dist/resources/templates/blank-app/application/shared-components/static-files/icons/app-icon-512.png +0 -0
- package/dist/resources/templates/blank-app/application/shared-components/static-files.apx +25 -0
- package/dist/resources/templates/blank-app/application/shared-components/themes/universal-theme/theme.apx +57 -0
- package/dist/resources/templates/blank-app/application/supporting-objects/deinstall-script.sql +0 -0
- package/dist/resources/templates/blank-app/application/supporting-objects/supporting-objects.apx +9 -0
- package/dist/resources/templates/customer-crm/README.md +7 -0
- package/dist/resources/templates/customer-crm/README.uk.md +7 -0
- package/dist/resources/templates/customer-crm/apex-overlay/pages/p00010-customers.apx +164 -0
- package/dist/resources/templates/customer-crm/apex-overlay/pages/p00020-dashboard.apx +54 -0
- package/dist/resources/templates/customer-crm/apex-overlay/pages/p00080-customer.apx +332 -0
- package/dist/resources/templates/customer-crm/project/src/database/migrations/0001__customers.sql +10 -0
- package/dist/resources/templates/customer-crm/project/src/database/packages/0010__customer_api.sql +28 -0
- package/dist/resources/templates/customer-crm/project/src/database/packages/0020__customer_validation_trigger.sql +10 -0
- package/dist/resources/templates/customer-crm/project/tests/e2e/customer-crud.spec.mjs +25 -0
- package/dist/resources/templates/customer-crm/project/tests/sql/test_customers.sql +49 -0
- package/dist/resources/templates/database-control/install.sql +17 -0
- package/dist/resources/templates/existing-app/README.md +9 -0
- package/dist/resources/templates/existing-app/README.uk.md +9 -0
- package/dist/resources/testkit/apex.mjs +58 -0
- package/dist/resources/third-party/node_modules__@hono__node-server__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__@isaacs__fs-minipass__LICENSE +15 -0
- package/dist/resources/third-party/node_modules__@modelcontextprotocol__sdk__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__@playwright__test__LICENSE +202 -0
- package/dist/resources/third-party/node_modules__@playwright__test__NOTICE +5 -0
- package/dist/resources/third-party/node_modules__@types__node__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__@types__yauzl__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__LICENSE +55 -0
- package/dist/resources/third-party/node_modules__@typescript__typescript-darwin-arm64__NOTICE.txt +436 -0
- package/dist/resources/third-party/node_modules__accepts__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__ajv-formats__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__ajv__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__body-parser__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__body-parser__node_modules__content-type__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__bytes__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__call-bind-apply-helpers__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__call-bound__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__chownr__LICENSE.md +63 -0
- package/dist/resources/third-party/node_modules__content-disposition__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__content-type__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__cookie-signature__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__cookie__LICENSE +24 -0
- package/dist/resources/third-party/node_modules__cors__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__cross-spawn__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__debug__LICENSE +20 -0
- package/dist/resources/third-party/node_modules__depd__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__dunder-proto__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__ee-first__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__encodeurl__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__es-define-property__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__es-errors__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__es-object-atoms__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__esbuild__LICENSE.md +21 -0
- package/dist/resources/third-party/node_modules__escape-html__LICENSE +24 -0
- package/dist/resources/third-party/node_modules__etag__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__eventsource-parser__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__eventsource__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__express-rate-limit__license +21 -0
- package/dist/resources/third-party/node_modules__express__LICENSE +24 -0
- package/dist/resources/third-party/node_modules__fast-deep-equal__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__fast-uri__LICENSE +30 -0
- package/dist/resources/third-party/node_modules__fflate__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__finalhandler__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__forwarded__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__fresh__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__function-bind__LICENSE +20 -0
- package/dist/resources/third-party/node_modules__get-intrinsic__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__get-proto__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__gopd__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__has-symbols__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__hasown__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__hono__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__http-errors__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__iconv-lite__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__inherits__LICENSE +16 -0
- package/dist/resources/third-party/node_modules__ip-address__LICENSE +19 -0
- package/dist/resources/third-party/node_modules__ipaddr.js__LICENSE +19 -0
- package/dist/resources/third-party/node_modules__is-promise__LICENSE +19 -0
- package/dist/resources/third-party/node_modules__isexe__LICENSE +15 -0
- package/dist/resources/third-party/node_modules__jose__LICENSE.md +21 -0
- package/dist/resources/third-party/node_modules__json-schema-traverse__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__json-schema-typed__LICENSE.md +57 -0
- package/dist/resources/third-party/node_modules__marked__LICENSE +44 -0
- package/dist/resources/third-party/node_modules__math-intrinsics__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__media-typer__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__merge-descriptors__license +11 -0
- package/dist/resources/third-party/node_modules__mime-db__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__mime-types__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__minipass__LICENSE.md +55 -0
- package/dist/resources/third-party/node_modules__minizlib__LICENSE +26 -0
- package/dist/resources/third-party/node_modules__ms__license.md +21 -0
- package/dist/resources/third-party/node_modules__negotiator__LICENSE +24 -0
- package/dist/resources/third-party/node_modules__negotiator__node_modules__content-type__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__object-assign__license +21 -0
- package/dist/resources/third-party/node_modules__object-inspect__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__on-finished__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__once__LICENSE +15 -0
- package/dist/resources/third-party/node_modules__parseurl__LICENSE +24 -0
- package/dist/resources/third-party/node_modules__path-key__license +9 -0
- package/dist/resources/third-party/node_modules__path-to-regexp__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__pend__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__pkce-challenge__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__playwright-core__LICENSE +202 -0
- package/dist/resources/third-party/node_modules__playwright-core__NOTICE +5 -0
- package/dist/resources/third-party/node_modules__playwright__LICENSE +202 -0
- package/dist/resources/third-party/node_modules__playwright__NOTICE +5 -0
- package/dist/resources/third-party/node_modules__prettier__LICENSE +7 -0
- package/dist/resources/third-party/node_modules__proxy-addr__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__qs__LICENSE.md +29 -0
- package/dist/resources/third-party/node_modules__range-parser__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__raw-body__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__require-from-string__license +21 -0
- package/dist/resources/third-party/node_modules__router__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__safer-buffer__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__send__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__serve-static__LICENSE +25 -0
- package/dist/resources/third-party/node_modules__setprototypeof__LICENSE +13 -0
- package/dist/resources/third-party/node_modules__shebang-command__license +9 -0
- package/dist/resources/third-party/node_modules__shebang-regex__license +9 -0
- package/dist/resources/third-party/node_modules__side-channel-list__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__side-channel-map__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__side-channel-weakmap__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__side-channel__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__statuses__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__tar__LICENSE.md +55 -0
- package/dist/resources/third-party/node_modules__toidentifier__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__type-is__LICENSE +23 -0
- package/dist/resources/third-party/node_modules__type-is__node_modules__content-type__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__typescript__LICENSE +55 -0
- package/dist/resources/third-party/node_modules__typescript__NOTICE.txt +436 -0
- package/dist/resources/third-party/node_modules__undici-types__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__unpipe__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__vary__LICENSE +22 -0
- package/dist/resources/third-party/node_modules__which__LICENSE +15 -0
- package/dist/resources/third-party/node_modules__wrappy__LICENSE +15 -0
- package/dist/resources/third-party/node_modules__yallist__LICENSE.md +63 -0
- package/dist/resources/third-party/node_modules__yauzl__LICENSE +21 -0
- package/dist/resources/third-party/node_modules__zod-to-json-schema__LICENSE +15 -0
- package/dist/resources/third-party/node_modules__zod__LICENSE +21 -0
- package/dist/resources/toolchains/compatibility.json +50 -0
- package/dist/resources/toolchains/sources.lock.json +14 -0
- package/dist/resources/toolchains/toolchain.lock.json +204 -0
- package/dist/runtime/apexrest.mjs +226 -0
- package/dist/runtime/chunk-2SZCZZ3J.mjs +37111 -0
- package/dist/runtime/chunk-2VGE5Y5J.mjs +994 -0
- package/dist/runtime/chunk-3GSS6SJH.mjs +1424 -0
- package/dist/runtime/chunk-5GOWABKB.mjs +409 -0
- package/dist/runtime/chunk-ARMO5ZAQ.mjs +25 -0
- package/dist/runtime/chunk-ED2YPDPS.mjs +1123 -0
- package/dist/runtime/chunk-FPOEB42H.mjs +100 -0
- package/dist/runtime/chunk-GFRSRK3K.mjs +16 -0
- package/dist/runtime/chunk-ICWYSHJ7.mjs +19 -0
- package/dist/runtime/chunk-IPU64TJI.mjs +291 -0
- package/dist/runtime/chunk-JWX4UQAZ.mjs +14 -0
- package/dist/runtime/chunk-K3KT6RZY.mjs +1064 -0
- package/dist/runtime/chunk-QLRGI23I.mjs +1307 -0
- package/dist/runtime/chunk-RF4XQO6I.mjs +13 -0
- package/dist/runtime/chunk-VPCUV5QA.mjs +237 -0
- package/dist/runtime/chunk-WMJTK7ZB.mjs +201 -0
- package/dist/runtime/chunk-WROK6RQH.mjs +200 -0
- package/dist/runtime/chunk-XDJEGHUX.mjs +1179 -0
- package/dist/runtime/chunk-YK34QNHH.mjs +15 -0
- package/dist/runtime/chunk-Z6Y72JVG.mjs +37 -0
- package/dist/runtime/chunk-ZQFJ2BNZ.mjs +329 -0
- package/dist/runtime/mcp.mjs +15 -0
- package/package.json +70 -0
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
page 10 (
|
|
2
|
+
name: Customers
|
|
3
|
+
alias: CUSTOMERS
|
|
4
|
+
title: Customers
|
|
5
|
+
appearance {
|
|
6
|
+
pageTemplate: @/standard
|
|
7
|
+
templateOptions: #DEFAULT#
|
|
8
|
+
}
|
|
9
|
+
security {
|
|
10
|
+
pageAccessProtection: argumentsMustHaveChecksum
|
|
11
|
+
}
|
|
12
|
+
region application-marker (
|
|
13
|
+
name: Customer workspace
|
|
14
|
+
type: staticContent
|
|
15
|
+
source {
|
|
16
|
+
htmlCode: <div data-testid="apexrest-crm">Customer workspace</div>
|
|
17
|
+
}
|
|
18
|
+
layout {
|
|
19
|
+
sequence: 5
|
|
20
|
+
slot: BODY
|
|
21
|
+
}
|
|
22
|
+
appearance {
|
|
23
|
+
template: @/blank-with-attributes
|
|
24
|
+
templateOptions: #DEFAULT#
|
|
25
|
+
}
|
|
26
|
+
)
|
|
27
|
+
region customers (
|
|
28
|
+
name: Customers
|
|
29
|
+
type: interactiveReport
|
|
30
|
+
source {
|
|
31
|
+
location: localDatabase
|
|
32
|
+
type: sqlQuery
|
|
33
|
+
sqlQuery:
|
|
34
|
+
```sql
|
|
35
|
+
select id, name, email, status from apexrest_customers
|
|
36
|
+
```
|
|
37
|
+
}
|
|
38
|
+
layout {
|
|
39
|
+
sequence: 10
|
|
40
|
+
slot: BODY
|
|
41
|
+
}
|
|
42
|
+
appearance {
|
|
43
|
+
template: @/interactive-report
|
|
44
|
+
templateOptions: #DEFAULT#
|
|
45
|
+
}
|
|
46
|
+
advanced {
|
|
47
|
+
htmlDomId: customers_report
|
|
48
|
+
}
|
|
49
|
+
link {
|
|
50
|
+
linkColumn: customTarget
|
|
51
|
+
target: {
|
|
52
|
+
page: 80
|
|
53
|
+
items: {
|
|
54
|
+
P80_ID: #ID#
|
|
55
|
+
}
|
|
56
|
+
clearCache: 80
|
|
57
|
+
}
|
|
58
|
+
linkIcon: <span role="img" aria-label="Edit customer" class="fa fa-edit" title="Edit customer"></span>
|
|
59
|
+
}
|
|
60
|
+
column ID (
|
|
61
|
+
type: hidden
|
|
62
|
+
heading {
|
|
63
|
+
heading: ID
|
|
64
|
+
}
|
|
65
|
+
layout {
|
|
66
|
+
sequence: 10
|
|
67
|
+
}
|
|
68
|
+
source {
|
|
69
|
+
dataType: NUMBER
|
|
70
|
+
}
|
|
71
|
+
)
|
|
72
|
+
column NAME (
|
|
73
|
+
type: plainText
|
|
74
|
+
heading {
|
|
75
|
+
heading: Name
|
|
76
|
+
}
|
|
77
|
+
layout {
|
|
78
|
+
sequence: 20
|
|
79
|
+
}
|
|
80
|
+
source {
|
|
81
|
+
dataType: STRING
|
|
82
|
+
}
|
|
83
|
+
)
|
|
84
|
+
column EMAIL (
|
|
85
|
+
type: plainText
|
|
86
|
+
heading {
|
|
87
|
+
heading: Email
|
|
88
|
+
}
|
|
89
|
+
layout {
|
|
90
|
+
sequence: 30
|
|
91
|
+
}
|
|
92
|
+
source {
|
|
93
|
+
dataType: STRING
|
|
94
|
+
}
|
|
95
|
+
)
|
|
96
|
+
column STATUS (
|
|
97
|
+
type: plainText
|
|
98
|
+
heading {
|
|
99
|
+
heading: Status
|
|
100
|
+
}
|
|
101
|
+
layout {
|
|
102
|
+
sequence: 40
|
|
103
|
+
}
|
|
104
|
+
source {
|
|
105
|
+
dataType: STRING
|
|
106
|
+
}
|
|
107
|
+
)
|
|
108
|
+
savedReport 100010 (
|
|
109
|
+
visibility: primaryDefault
|
|
110
|
+
displayColumn NAME (
|
|
111
|
+
sequence: 1
|
|
112
|
+
)
|
|
113
|
+
displayColumn EMAIL (
|
|
114
|
+
sequence: 2
|
|
115
|
+
)
|
|
116
|
+
displayColumn STATUS (
|
|
117
|
+
sequence: 3
|
|
118
|
+
)
|
|
119
|
+
)
|
|
120
|
+
)
|
|
121
|
+
button create-customer (
|
|
122
|
+
buttonName: CREATE_CUSTOMER
|
|
123
|
+
label: Create Customer
|
|
124
|
+
layout {
|
|
125
|
+
sequence: 10
|
|
126
|
+
region: @customers
|
|
127
|
+
slot: RIGHT_OF_IR_SEARCH_BAR
|
|
128
|
+
}
|
|
129
|
+
appearance {
|
|
130
|
+
buttonTemplate: @/text
|
|
131
|
+
templateOptions: #DEFAULT#
|
|
132
|
+
hot: true
|
|
133
|
+
}
|
|
134
|
+
behavior {
|
|
135
|
+
action: redirectThisApp
|
|
136
|
+
target: {
|
|
137
|
+
page: 80
|
|
138
|
+
clearCache: 80
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
)
|
|
142
|
+
dynamicAction refresh-customers (
|
|
143
|
+
name: Refresh Customers
|
|
144
|
+
execution {
|
|
145
|
+
sequence: 10
|
|
146
|
+
}
|
|
147
|
+
when {
|
|
148
|
+
event: apexafterclosedialog
|
|
149
|
+
selectionType: region
|
|
150
|
+
region: @customers
|
|
151
|
+
}
|
|
152
|
+
action refresh-customers-report (
|
|
153
|
+
action: refresh
|
|
154
|
+
affectedElements {
|
|
155
|
+
selectionType: region
|
|
156
|
+
region: @customers
|
|
157
|
+
}
|
|
158
|
+
execution {
|
|
159
|
+
sequence: 10
|
|
160
|
+
fireOnInit: false
|
|
161
|
+
}
|
|
162
|
+
)
|
|
163
|
+
)
|
|
164
|
+
)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
page 20 (
|
|
2
|
+
name: Dashboard
|
|
3
|
+
alias: DASHBOARD
|
|
4
|
+
title: Customer Dashboard
|
|
5
|
+
appearance {
|
|
6
|
+
pageTemplate: @/standard
|
|
7
|
+
templateOptions: #DEFAULT#
|
|
8
|
+
}
|
|
9
|
+
security {
|
|
10
|
+
pageAccessProtection: argumentsMustHaveChecksum
|
|
11
|
+
}
|
|
12
|
+
region customers-by-status (
|
|
13
|
+
name: Customers by Status
|
|
14
|
+
type: chart
|
|
15
|
+
layout {
|
|
16
|
+
sequence: 10
|
|
17
|
+
slot: BODY
|
|
18
|
+
}
|
|
19
|
+
appearance {
|
|
20
|
+
template: @/standard
|
|
21
|
+
templateOptions: #DEFAULT#
|
|
22
|
+
}
|
|
23
|
+
chart {
|
|
24
|
+
type: pie
|
|
25
|
+
}
|
|
26
|
+
title {
|
|
27
|
+
title: Customers by Status
|
|
28
|
+
}
|
|
29
|
+
legend {
|
|
30
|
+
show: true
|
|
31
|
+
}
|
|
32
|
+
series customer-count (
|
|
33
|
+
name: Customers
|
|
34
|
+
execution {
|
|
35
|
+
sequence: 10
|
|
36
|
+
}
|
|
37
|
+
source {
|
|
38
|
+
type: sqlQuery
|
|
39
|
+
sqlQuery:
|
|
40
|
+
```sql
|
|
41
|
+
select status as label, count(*) as value
|
|
42
|
+
from apexrest_customers group by status
|
|
43
|
+
```
|
|
44
|
+
}
|
|
45
|
+
columnMapping {
|
|
46
|
+
label: LABEL
|
|
47
|
+
value: VALUE
|
|
48
|
+
}
|
|
49
|
+
label {
|
|
50
|
+
show: true
|
|
51
|
+
}
|
|
52
|
+
)
|
|
53
|
+
)
|
|
54
|
+
)
|
|
@@ -0,0 +1,332 @@
|
|
|
1
|
+
page 80 (
|
|
2
|
+
name: Customer
|
|
3
|
+
alias: CUSTOMER
|
|
4
|
+
title: Customer
|
|
5
|
+
appearance {
|
|
6
|
+
pageMode: modalDialog
|
|
7
|
+
dialogTemplate: @/drawer
|
|
8
|
+
templateOptions: #DEFAULT#
|
|
9
|
+
}
|
|
10
|
+
dialog {
|
|
11
|
+
chained: false
|
|
12
|
+
}
|
|
13
|
+
security {
|
|
14
|
+
pageAccessProtection: argumentsMustHaveChecksum
|
|
15
|
+
formAutoComplete: false
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
region buttons (
|
|
19
|
+
name: Buttons
|
|
20
|
+
type: staticContent
|
|
21
|
+
layout {
|
|
22
|
+
sequence: 20
|
|
23
|
+
slot: REGION_POSITION_03
|
|
24
|
+
}
|
|
25
|
+
appearance {
|
|
26
|
+
template: @/buttons-container
|
|
27
|
+
templateOptions: #DEFAULT#
|
|
28
|
+
}
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
region form (
|
|
32
|
+
name: Form
|
|
33
|
+
type: form
|
|
34
|
+
source {
|
|
35
|
+
location: localDatabase
|
|
36
|
+
tableName: APEXREST_CUSTOMERS
|
|
37
|
+
}
|
|
38
|
+
layout {
|
|
39
|
+
sequence: 10
|
|
40
|
+
slot: contentBody
|
|
41
|
+
}
|
|
42
|
+
appearance {
|
|
43
|
+
template: @/blank-with-attributes
|
|
44
|
+
templateOptions: #DEFAULT#
|
|
45
|
+
}
|
|
46
|
+
edit {
|
|
47
|
+
enabled: true
|
|
48
|
+
}
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
pageItem P80_ID (
|
|
52
|
+
type: hidden
|
|
53
|
+
layout {
|
|
54
|
+
sequence: 10
|
|
55
|
+
region: @form
|
|
56
|
+
slot: regionBody
|
|
57
|
+
}
|
|
58
|
+
source {
|
|
59
|
+
formRegion: @form
|
|
60
|
+
column: ID
|
|
61
|
+
dataType: number
|
|
62
|
+
queryOnly: true
|
|
63
|
+
primaryKey: true
|
|
64
|
+
}
|
|
65
|
+
security {
|
|
66
|
+
sessionStateProtection: checksumRequiredSessionLevel
|
|
67
|
+
}
|
|
68
|
+
)
|
|
69
|
+
|
|
70
|
+
pageItem P80_SUCCESS_MESSAGE (
|
|
71
|
+
type: hidden
|
|
72
|
+
layout {
|
|
73
|
+
sequence: 11
|
|
74
|
+
region: @form
|
|
75
|
+
slot: regionBody
|
|
76
|
+
}
|
|
77
|
+
)
|
|
78
|
+
|
|
79
|
+
button cancel (
|
|
80
|
+
buttonName: CANCEL
|
|
81
|
+
label: Cancel
|
|
82
|
+
layout {
|
|
83
|
+
sequence: 10
|
|
84
|
+
region: @buttons
|
|
85
|
+
slot: CLOSE
|
|
86
|
+
}
|
|
87
|
+
appearance {
|
|
88
|
+
buttonTemplate: @/text
|
|
89
|
+
templateOptions: #DEFAULT#
|
|
90
|
+
}
|
|
91
|
+
behavior {
|
|
92
|
+
action: definedByDynamicAction
|
|
93
|
+
}
|
|
94
|
+
)
|
|
95
|
+
|
|
96
|
+
button create (
|
|
97
|
+
buttonName: CREATE
|
|
98
|
+
label: Create
|
|
99
|
+
layout {
|
|
100
|
+
sequence: 40
|
|
101
|
+
region: @buttons
|
|
102
|
+
slot: NEXT
|
|
103
|
+
}
|
|
104
|
+
appearance {
|
|
105
|
+
buttonTemplate: @/text
|
|
106
|
+
hot: true
|
|
107
|
+
templateOptions: #DEFAULT#
|
|
108
|
+
}
|
|
109
|
+
behavior {
|
|
110
|
+
warnOnUnsavedChanges: doNotCheck
|
|
111
|
+
databaseAction: insert
|
|
112
|
+
}
|
|
113
|
+
serverSideCondition {
|
|
114
|
+
type: itemIsNull
|
|
115
|
+
item: P80_ID
|
|
116
|
+
}
|
|
117
|
+
)
|
|
118
|
+
|
|
119
|
+
button delete (
|
|
120
|
+
buttonName: DELETE
|
|
121
|
+
label: Delete
|
|
122
|
+
layout {
|
|
123
|
+
sequence: 20
|
|
124
|
+
region: @buttons
|
|
125
|
+
slot: DELETE
|
|
126
|
+
}
|
|
127
|
+
appearance {
|
|
128
|
+
buttonTemplate: @/text
|
|
129
|
+
templateOptions: #DEFAULT#
|
|
130
|
+
}
|
|
131
|
+
behavior {
|
|
132
|
+
executeValidations: false
|
|
133
|
+
warnOnUnsavedChanges: doNotCheck
|
|
134
|
+
databaseAction: delete
|
|
135
|
+
requiresConfirmation: true
|
|
136
|
+
}
|
|
137
|
+
confirmation {
|
|
138
|
+
message: Delete this customer?
|
|
139
|
+
style: danger
|
|
140
|
+
}
|
|
141
|
+
serverSideCondition {
|
|
142
|
+
type: itemIsNotNull
|
|
143
|
+
item: P80_ID
|
|
144
|
+
}
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
button apply-changes (
|
|
148
|
+
buttonName: APPLY-CHANGES
|
|
149
|
+
label: Apply Changes
|
|
150
|
+
layout {
|
|
151
|
+
sequence: 30
|
|
152
|
+
region: @buttons
|
|
153
|
+
slot: NEXT
|
|
154
|
+
}
|
|
155
|
+
appearance {
|
|
156
|
+
buttonTemplate: @/text
|
|
157
|
+
hot: true
|
|
158
|
+
templateOptions: #DEFAULT#
|
|
159
|
+
}
|
|
160
|
+
behavior {
|
|
161
|
+
warnOnUnsavedChanges: doNotCheck
|
|
162
|
+
databaseAction: update
|
|
163
|
+
}
|
|
164
|
+
serverSideCondition {
|
|
165
|
+
type: itemIsNotNull
|
|
166
|
+
item: P80_ID
|
|
167
|
+
}
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
dynamicAction cancel-dialog (
|
|
171
|
+
name: Cancel Dialog
|
|
172
|
+
execution {
|
|
173
|
+
sequence: 10
|
|
174
|
+
}
|
|
175
|
+
when {
|
|
176
|
+
event: click
|
|
177
|
+
selectionType: button
|
|
178
|
+
button: @cancel
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
action native-dialog-cancel (
|
|
182
|
+
action: cancelDialog
|
|
183
|
+
execution {
|
|
184
|
+
sequence: 10
|
|
185
|
+
fireOnInit: false
|
|
186
|
+
}
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
)
|
|
190
|
+
|
|
191
|
+
process close-dialog (
|
|
192
|
+
name: Close Dialog
|
|
193
|
+
type: closeDialog
|
|
194
|
+
execution {
|
|
195
|
+
sequence: 50
|
|
196
|
+
}
|
|
197
|
+
serverSideCondition {
|
|
198
|
+
type: requestIsContainedInValue
|
|
199
|
+
value: CREATE,APPLY-CHANGES,DELETE
|
|
200
|
+
}
|
|
201
|
+
)
|
|
202
|
+
|
|
203
|
+
process initialize-form-form (
|
|
204
|
+
name: Initialize form Form
|
|
205
|
+
type: formInitialization
|
|
206
|
+
formRegion: @form
|
|
207
|
+
execution {
|
|
208
|
+
sequence: 10
|
|
209
|
+
point: beforeHeader
|
|
210
|
+
}
|
|
211
|
+
)
|
|
212
|
+
|
|
213
|
+
process set-success-message-form (
|
|
214
|
+
name: Set Success Message
|
|
215
|
+
type: executeCode
|
|
216
|
+
source {
|
|
217
|
+
plsqlCode:
|
|
218
|
+
```plsql
|
|
219
|
+
:P80_SUCCESS_MESSAGE :=
|
|
220
|
+
case :REQUEST
|
|
221
|
+
when 'CREATE' then 'Customer created.'
|
|
222
|
+
when 'APPLY-CHANGES' then 'Customer updated.'
|
|
223
|
+
when 'DELETE' then 'Customer deleted.'
|
|
224
|
+
else null
|
|
225
|
+
end;
|
|
226
|
+
```
|
|
227
|
+
}
|
|
228
|
+
execution {
|
|
229
|
+
sequence: 5
|
|
230
|
+
}
|
|
231
|
+
serverSideCondition {
|
|
232
|
+
type: requestIsContainedInValue
|
|
233
|
+
value: CREATE,APPLY-CHANGES,DELETE
|
|
234
|
+
}
|
|
235
|
+
)
|
|
236
|
+
|
|
237
|
+
process process-form-form (
|
|
238
|
+
name: Process form Form
|
|
239
|
+
type: formAutoRowProcessing
|
|
240
|
+
formRegion: @form
|
|
241
|
+
execution {
|
|
242
|
+
sequence: 10
|
|
243
|
+
}
|
|
244
|
+
successMessage {
|
|
245
|
+
successMessage: &P80_SUCCESS_MESSAGE.
|
|
246
|
+
}
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
pageItem P80_NAME (
|
|
250
|
+
type: textField
|
|
251
|
+
label {
|
|
252
|
+
label: Name
|
|
253
|
+
alignment: left
|
|
254
|
+
}
|
|
255
|
+
layout {
|
|
256
|
+
sequence: 20
|
|
257
|
+
region: @form
|
|
258
|
+
slot: regionBody
|
|
259
|
+
alignment: left
|
|
260
|
+
}
|
|
261
|
+
appearance {
|
|
262
|
+
template: @/required-floating
|
|
263
|
+
templateOptions: #DEFAULT#
|
|
264
|
+
width: 32
|
|
265
|
+
}
|
|
266
|
+
validation {
|
|
267
|
+
maxLength: 200
|
|
268
|
+
valueRequired: true
|
|
269
|
+
}
|
|
270
|
+
source {
|
|
271
|
+
formRegion: @form
|
|
272
|
+
column: NAME
|
|
273
|
+
dataType: varchar2
|
|
274
|
+
}
|
|
275
|
+
)
|
|
276
|
+
|
|
277
|
+
pageItem P80_EMAIL (
|
|
278
|
+
type: textField
|
|
279
|
+
label {
|
|
280
|
+
label: Email
|
|
281
|
+
alignment: left
|
|
282
|
+
}
|
|
283
|
+
layout {
|
|
284
|
+
sequence: 30
|
|
285
|
+
region: @form
|
|
286
|
+
slot: regionBody
|
|
287
|
+
alignment: left
|
|
288
|
+
}
|
|
289
|
+
appearance {
|
|
290
|
+
template: @/required-floating
|
|
291
|
+
templateOptions: #DEFAULT#
|
|
292
|
+
width: 32
|
|
293
|
+
}
|
|
294
|
+
validation {
|
|
295
|
+
maxLength: 320
|
|
296
|
+
valueRequired: true
|
|
297
|
+
}
|
|
298
|
+
source {
|
|
299
|
+
formRegion: @form
|
|
300
|
+
column: EMAIL
|
|
301
|
+
dataType: varchar2
|
|
302
|
+
}
|
|
303
|
+
)
|
|
304
|
+
|
|
305
|
+
pageItem P80_STATUS (
|
|
306
|
+
type: selectList
|
|
307
|
+
label {
|
|
308
|
+
label: Status
|
|
309
|
+
alignment: left
|
|
310
|
+
}
|
|
311
|
+
lov {
|
|
312
|
+
type: staticValues
|
|
313
|
+
staticValues: STATIC:Active;ACTIVE,Inactive;INACTIVE
|
|
314
|
+
}
|
|
315
|
+
layout {
|
|
316
|
+
sequence: 70
|
|
317
|
+
region: @form
|
|
318
|
+
slot: regionBody
|
|
319
|
+
alignment: left
|
|
320
|
+
}
|
|
321
|
+
appearance {
|
|
322
|
+
template: @/optional-floating
|
|
323
|
+
templateOptions: #DEFAULT#
|
|
324
|
+
height: 1
|
|
325
|
+
}
|
|
326
|
+
source {
|
|
327
|
+
formRegion: @form
|
|
328
|
+
column: STATUS
|
|
329
|
+
dataType: varchar2
|
|
330
|
+
}
|
|
331
|
+
)
|
|
332
|
+
)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
create table apexrest_customers (
|
|
2
|
+
id number generated by default on null as identity primary key,
|
|
3
|
+
name varchar2(200) not null,
|
|
4
|
+
email varchar2(320) not null,
|
|
5
|
+
status varchar2(20) default 'ACTIVE' not null,
|
|
6
|
+
created_at timestamp default systimestamp not null,
|
|
7
|
+
updated_at timestamp default systimestamp not null,
|
|
8
|
+
constraint apexrest_customers_status_ck check (status in ('ACTIVE', 'INACTIVE')),
|
|
9
|
+
constraint apexrest_customers_email_uq unique (email)
|
|
10
|
+
);
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
create or replace package apexrest_customer_api authid definer as
|
|
2
|
+
procedure validate_customer(p_name varchar2, p_email varchar2, p_status varchar2);
|
|
3
|
+
function add_customer(p_name varchar2, p_email varchar2, p_status varchar2 default 'ACTIVE') return number;
|
|
4
|
+
end apexrest_customer_api;
|
|
5
|
+
/
|
|
6
|
+
create or replace package body apexrest_customer_api as
|
|
7
|
+
procedure validate_customer(p_name varchar2, p_email varchar2, p_status varchar2) is
|
|
8
|
+
begin
|
|
9
|
+
if trim(p_name) is null then
|
|
10
|
+
raise_application_error(-20010, 'Customer name is required.');
|
|
11
|
+
end if;
|
|
12
|
+
if p_email is null or not regexp_like(p_email, '^[^@[:space:]]+@[^@[:space:]]+[.][^@[:space:]]+$') then
|
|
13
|
+
raise_application_error(-20011, 'Enter a valid email address.');
|
|
14
|
+
end if;
|
|
15
|
+
if p_status is null or p_status not in ('ACTIVE', 'INACTIVE') then
|
|
16
|
+
raise_application_error(-20012, 'Choose a valid customer status.');
|
|
17
|
+
end if;
|
|
18
|
+
end;
|
|
19
|
+
function add_customer(p_name varchar2, p_email varchar2, p_status varchar2 default 'ACTIVE') return number is
|
|
20
|
+
l_id number;
|
|
21
|
+
begin
|
|
22
|
+
validate_customer(p_name, p_email, p_status);
|
|
23
|
+
insert into apexrest_customers(name,email,status)
|
|
24
|
+
values(trim(p_name),lower(trim(p_email)),p_status) returning id into l_id;
|
|
25
|
+
return l_id;
|
|
26
|
+
end;
|
|
27
|
+
end apexrest_customer_api;
|
|
28
|
+
/
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
create or replace trigger apexrest_customers_biu
|
|
2
|
+
before insert or update on apexrest_customers
|
|
3
|
+
for each row
|
|
4
|
+
begin
|
|
5
|
+
apexrest_customer_api.validate_customer(:new.name, :new.email, :new.status);
|
|
6
|
+
:new.email := lower(trim(:new.email));
|
|
7
|
+
:new.name := trim(:new.name);
|
|
8
|
+
:new.updated_at := systimestamp;
|
|
9
|
+
end;
|
|
10
|
+
/
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import {test,expect} from '../testkit/apex.mjs';
|
|
2
|
+
// The runner supplies this fixture in its isolated run directory.
|
|
3
|
+
// Runtime evidence is required before this fixture can be called verified.
|
|
4
|
+
test('authenticated customer CRUD and invalid email',async({page})=>{
|
|
5
|
+
const suffix=crypto.randomUUID().replaceAll('-','');const name=`APEXREST ${suffix}`,updated=`Updated ${suffix}`,email=`${suffix}@example.test`;
|
|
6
|
+
await page.goto('./customers');await expect(page.getByTestId('apexrest-crm')).toBeVisible();
|
|
7
|
+
await page.getByRole('button',{name:'Create Customer',exact:true}).click();
|
|
8
|
+
let form=page.frameLocator('iframe[title="Customer"]');
|
|
9
|
+
await form.getByLabel('Name',{exact:true}).fill(name);await form.getByLabel('Email',{exact:true}).fill('invalid');await form.getByLabel('Status',{exact:true}).selectOption('ACTIVE');
|
|
10
|
+
await form.getByRole('button',{name:'Create',exact:true}).click();await expect(form.getByText('Enter a valid email address.',{exact:false})).toBeVisible();
|
|
11
|
+
await form.getByLabel('Email',{exact:true}).fill(email);await form.getByRole('button',{name:'Create',exact:true}).click();await expect(page.locator('iframe[title="Customer"]')).toHaveCount(0);
|
|
12
|
+
try {
|
|
13
|
+
await page.locator('#customers_report_search_field').fill(name);await page.locator('#customers_report_search_field').press('Enter');await expect(page.getByRole('cell',{name,exact:true})).toBeVisible();
|
|
14
|
+
await page.getByRole('row').filter({has:page.getByRole('cell',{name,exact:true})}).getByRole('link',{name:'Edit customer'}).click();
|
|
15
|
+
form=page.frameLocator('iframe[title="Customer"]');await expect(form.getByLabel('Email',{exact:true})).toHaveValue(email);await form.getByLabel('Name',{exact:true}).fill(updated);await form.getByRole('button',{name:'Apply Changes',exact:true}).click();await expect(page.locator('iframe[title="Customer"]')).toHaveCount(0);
|
|
16
|
+
await page.locator('#customers_report_search_field').fill(updated);await page.locator('#customers_report_search_field').press('Enter');await expect(page.getByRole('cell',{name:updated,exact:true})).toBeVisible();
|
|
17
|
+
} finally {
|
|
18
|
+
await page.locator('#customers_report_search_field').fill(suffix);await page.locator('#customers_report_search_field').press('Enter');
|
|
19
|
+
const row=page.getByRole('row').filter({has:page.getByRole('cell',{name:email,exact:true})});
|
|
20
|
+
if(await row.count()){
|
|
21
|
+
await row.getByRole('link',{name:'Edit customer'}).click();form=page.frameLocator('iframe[title="Customer"]');await form.getByRole('button',{name:'Delete',exact:true}).click();
|
|
22
|
+
await form.getByRole('dialog').getByRole('button',{name:'Delete',exact:true}).click();await expect(page.locator('iframe[title="Customer"]')).toHaveCount(0);await expect(page.getByRole('cell',{name:email,exact:true})).toHaveCount(0);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
});
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
create or replace package test_apexrest_customers as
|
|
2
|
+
--%suite(Customer business rules)
|
|
3
|
+
--%test(Creates a customer with a generated identifier)
|
|
4
|
+
procedure creates_customer;
|
|
5
|
+
--%test(Rejects missing customer names)
|
|
6
|
+
--%throws(-20010)
|
|
7
|
+
procedure rejects_empty_name;
|
|
8
|
+
--%test(Rejects malformed email addresses)
|
|
9
|
+
--%throws(-20011)
|
|
10
|
+
procedure rejects_invalid_email;
|
|
11
|
+
--%test(Rejects unknown status)
|
|
12
|
+
--%throws(-20012)
|
|
13
|
+
procedure rejects_invalid_status;
|
|
14
|
+
--%test(Prevents duplicate emails)
|
|
15
|
+
--%throws(-1)
|
|
16
|
+
procedure rejects_duplicate_email;
|
|
17
|
+
end;
|
|
18
|
+
/
|
|
19
|
+
create or replace package body test_apexrest_customers as
|
|
20
|
+
procedure creates_customer is
|
|
21
|
+
l_id number;
|
|
22
|
+
l_name varchar2(200);
|
|
23
|
+
begin
|
|
24
|
+
l_id := apexrest_customer_api.add_customer('Synthetic customer', lower(rawtohex(sys_guid())) || '@example.test');
|
|
25
|
+
select name into l_name from apexrest_customers where id=l_id;
|
|
26
|
+
ut.expect(l_id).to_be_greater_than(0);
|
|
27
|
+
ut.expect(l_name).to_equal('Synthetic customer');
|
|
28
|
+
end;
|
|
29
|
+
procedure rejects_empty_name is
|
|
30
|
+
begin
|
|
31
|
+
apexrest_customer_api.validate_customer(null,'name@example.test','ACTIVE');
|
|
32
|
+
end;
|
|
33
|
+
procedure rejects_invalid_email is
|
|
34
|
+
begin
|
|
35
|
+
apexrest_customer_api.validate_customer('Synthetic','invalid','ACTIVE');
|
|
36
|
+
end;
|
|
37
|
+
procedure rejects_invalid_status is
|
|
38
|
+
begin
|
|
39
|
+
apexrest_customer_api.validate_customer('Synthetic','name@example.test','UNKNOWN');
|
|
40
|
+
end;
|
|
41
|
+
procedure rejects_duplicate_email is
|
|
42
|
+
l_id number;
|
|
43
|
+
l_email varchar2(320) := lower(rawtohex(sys_guid())) || '@example.test';
|
|
44
|
+
begin
|
|
45
|
+
l_id := apexrest_customer_api.add_customer('First synthetic',l_email);
|
|
46
|
+
l_id := apexrest_customer_api.add_customer('Second synthetic',l_email);
|
|
47
|
+
end;
|
|
48
|
+
end;
|
|
49
|
+
/
|
package/dist/codex-compat/plugins/apexrest-apex/resources/templates/database-control/install.sql
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
-- Optional deploymentControl=database mode only. Default local mode needs no service tables.
|
|
2
|
+
-- Review and run explicitly in the dedicated parsing/control schema.
|
|
3
|
+
-- Never executed automatically by setup, plan, doctor or test.
|
|
4
|
+
create table apexrest_deploy_locks (
|
|
5
|
+
target_key varchar2(64) primary key,
|
|
6
|
+
owner_id varchar2(36) not null,
|
|
7
|
+
lease_until timestamp with time zone not null,
|
|
8
|
+
phase varchar2(20) default 'preparing' not null check (phase in ('preparing','writing'))
|
|
9
|
+
);
|
|
10
|
+
create table apexrest_migrations (
|
|
11
|
+
version varchar2(255) primary key,
|
|
12
|
+
checksum varchar2(64) not null,
|
|
13
|
+
status varchar2(20) check (status in ('started','succeeded','failed','outcome_unknown')),
|
|
14
|
+
run_id varchar2(36) not null,
|
|
15
|
+
started_at timestamp with time zone default systimestamp not null,
|
|
16
|
+
finished_at timestamp with time zone
|
|
17
|
+
);
|