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,323 @@
|
|
|
1
|
+
import com.fasterxml.jackson.databind.JsonNode;
|
|
2
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
|
3
|
+
import com.fasterxml.jackson.databind.node.ObjectNode;
|
|
4
|
+
import java.io.*;
|
|
5
|
+
import java.net.URI;
|
|
6
|
+
import java.nio.charset.StandardCharsets;
|
|
7
|
+
import java.nio.file.*;
|
|
8
|
+
import java.sql.*;
|
|
9
|
+
import java.util.*;
|
|
10
|
+
import java.util.logging.*;
|
|
11
|
+
import java.util.regex.*;
|
|
12
|
+
import java.util.zip.*;
|
|
13
|
+
import javax.sql.rowset.serial.SerialClob;
|
|
14
|
+
import oracle.dbtools.extension.apex.core.apexlang.APEXLangTranspiler;
|
|
15
|
+
import oracle.dbtools.extension.apex.core.apexlang.APEXLangDeploymentFile;
|
|
16
|
+
import oracle.dbtools.extension.apex.core.apexlang.APEXSessionProperty;
|
|
17
|
+
import oracle.dbtools.extension.apex.utility.APEXLangUtils;
|
|
18
|
+
import oracle.apexlang.APEXLangCompiler;
|
|
19
|
+
import oracle.apexlang.core.DeploymentValue;
|
|
20
|
+
|
|
21
|
+
/** Runs against the Oracle compiler and OREST driver distributed with SQLcl 26.1+.
|
|
22
|
+
* Credentials arrive only on stdin. Jobs and reports must never contain passwords.
|
|
23
|
+
* This is an internal bridge, not a replacement APEXlang compiler.
|
|
24
|
+
*/
|
|
25
|
+
public class OrdsBridge {
|
|
26
|
+
static final ObjectMapper JSON = new ObjectMapper();
|
|
27
|
+
static final long MAX_BYTES = 512L * 1024 * 1024;
|
|
28
|
+
static final String IMPORT_BLOCK = """
|
|
29
|
+
begin
|
|
30
|
+
for b in (select ordinal, source from json_table(?, '$[*]'
|
|
31
|
+
columns (ordinal for ordinality, source clob path '$' error on error))
|
|
32
|
+
order by ordinal) loop
|
|
33
|
+
execute immediate b.source;
|
|
34
|
+
end loop;
|
|
35
|
+
end;
|
|
36
|
+
""";
|
|
37
|
+
static String password = "";
|
|
38
|
+
|
|
39
|
+
public static void main(String[] args) throws Exception {
|
|
40
|
+
ObjectNode result = JSON.createObjectNode();
|
|
41
|
+
Path report = null;
|
|
42
|
+
int exit = 0;
|
|
43
|
+
try {
|
|
44
|
+
if (args.length != 1) throw new IllegalArgumentException("Expected one job file path");
|
|
45
|
+
JsonNode job = JSON.readTree(Files.readString(Path.of(args[0])));
|
|
46
|
+
report = Path.of(required(job, "output")).toAbsolutePath().normalize();
|
|
47
|
+
String operation = required(job, "operation");
|
|
48
|
+
result.put("operation", operation);
|
|
49
|
+
if (operation.equals("compile")) {
|
|
50
|
+
List<String> blocks = compile(job, result);
|
|
51
|
+
result.put("statement", IMPORT_BLOCK);
|
|
52
|
+
result.set("blocks", JSON.valueToTree(blocks));
|
|
53
|
+
} else if (operation.equals("prepare-script")) {
|
|
54
|
+
result.put("script", script(job));
|
|
55
|
+
} else {
|
|
56
|
+
JsonNode credentials;
|
|
57
|
+
try { credentials = JSON.readTree(System.in); }
|
|
58
|
+
catch (IOException error) { throw new IllegalArgumentException("Invalid credentials JSON on stdin"); }
|
|
59
|
+
password = required(credentials, "password");
|
|
60
|
+
try (Connection connection = connect(credentials)) {
|
|
61
|
+
if (operation.equals("import")) {
|
|
62
|
+
List<String> blocks = compile(job, result);
|
|
63
|
+
if (!result.path("targetConfigured").asBoolean())
|
|
64
|
+
throw new IllegalArgumentException("Import requires workspace, parsingSchema and applicationId");
|
|
65
|
+
try (CallableStatement statement = connection.prepareCall(IMPORT_BLOCK)) {
|
|
66
|
+
statement.setClob(1, new SerialClob(JSON.writeValueAsString(blocks).toCharArray()));
|
|
67
|
+
result.put("writeStarted", true);
|
|
68
|
+
checkpoint(report, result);
|
|
69
|
+
statement.execute();
|
|
70
|
+
}
|
|
71
|
+
result.put("message", "Import successful");
|
|
72
|
+
} else if (operation.equals("export")) {
|
|
73
|
+
export(connection, job, result);
|
|
74
|
+
} else if (operation.equals("script")) {
|
|
75
|
+
String source = script(job);
|
|
76
|
+
result.put("writeStarted", true);
|
|
77
|
+
checkpoint(report, result);
|
|
78
|
+
executeScript(connection, source, result);
|
|
79
|
+
} else throw new IllegalArgumentException("Unsupported operation");
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
result.put("status", "succeeded");
|
|
83
|
+
} catch (Exception error) {
|
|
84
|
+
exit = 1;
|
|
85
|
+
result.put("status", "failed");
|
|
86
|
+
result.put("code", "ORDS_BRIDGE_FAILED");
|
|
87
|
+
String message = error.getMessage() == null ? error.getClass().getSimpleName() : error.getMessage();
|
|
88
|
+
result.put("message", password.isEmpty() ? message : message.replace(password, "[REDACTED]"));
|
|
89
|
+
}
|
|
90
|
+
if (report != null) {
|
|
91
|
+
Files.createDirectories(report.getParent());
|
|
92
|
+
Files.writeString(report, JSON.writerWithDefaultPrettyPrinter().writeValueAsString(result) + "\n");
|
|
93
|
+
}
|
|
94
|
+
// No source, query results, URL, or credential values are printed to the process log.
|
|
95
|
+
System.out.println(exit == 0 ? "APEXREST_ORDS_COMPLETE" : "APEXREST_ORDS_FAILED");
|
|
96
|
+
if (exit != 0) System.exit(exit);
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
static String required(JsonNode node, String key) {
|
|
100
|
+
if (node == null || !node.path(key).isTextual() || node.path(key).asText().isBlank())
|
|
101
|
+
throw new IllegalArgumentException("Missing " + key);
|
|
102
|
+
return node.path(key).asText();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
static void checkpoint(Path report, ObjectNode result) throws IOException {
|
|
106
|
+
ObjectNode pending = result.deepCopy();
|
|
107
|
+
pending.put("status", "failed");
|
|
108
|
+
pending.put("code", "ORDS_OUTCOME_UNKNOWN");
|
|
109
|
+
pending.put("message", "The ORDS write started but no final result was recorded");
|
|
110
|
+
Files.createDirectories(report.getParent());
|
|
111
|
+
Files.writeString(report, JSON.writeValueAsString(pending) + "\n");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
static Connection connect(JsonNode credentials) throws Exception {
|
|
115
|
+
URI uri = URI.create(required(credentials, "url"));
|
|
116
|
+
if (!("https".equals(uri.getScheme()) || "http".equals(uri.getScheme())) || uri.getHost() == null
|
|
117
|
+
|| uri.getUserInfo() != null || uri.getQuery() != null || uri.getFragment() != null)
|
|
118
|
+
throw new IllegalArgumentException("Invalid ORDS schema URL");
|
|
119
|
+
String url = uri.toString();
|
|
120
|
+
if (url.matches(".*/_/sql/?$")) throw new IllegalArgumentException("Use the ORDS schema URL, without /_/sql");
|
|
121
|
+
if (!url.endsWith("/")) url += "/";
|
|
122
|
+
Properties properties = new Properties();
|
|
123
|
+
properties.setProperty("user", required(credentials, "username"));
|
|
124
|
+
properties.setProperty("password", password);
|
|
125
|
+
Logger.getLogger("oracle.dbtools").setLevel(Level.WARNING);
|
|
126
|
+
Connection connection = new oracle.dbtools.jdbc.orest.Driver().connect("jdbc:oracle:orest:@" + url, properties);
|
|
127
|
+
if (connection == null) throw new SQLException("The SQLcl OREST driver rejected the URL");
|
|
128
|
+
return connection;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
static List<String> compile(JsonNode job, ObjectNode result) throws Exception {
|
|
132
|
+
Path input = Path.of(required(job, "input")).toRealPath();
|
|
133
|
+
Path deployment = Path.of(required(job, "deployment")).toRealPath();
|
|
134
|
+
if (!Files.isDirectory(input)) throw new IllegalArgumentException("The bridge requires a staged APEXlang directory");
|
|
135
|
+
Path metadata = input.resolve(".apex/apexlang.json");
|
|
136
|
+
String version = required(JSON.readTree(Files.readString(metadata)), "mmdVersion");
|
|
137
|
+
APEXLangTranspiler transpiler = new APEXLangTranspiler(version);
|
|
138
|
+
Map<String, DeploymentValue> values = new HashMap<>();
|
|
139
|
+
APEXLangUtils.populateDeploymentInfo(values, List.of("subscription.masterApps", "subscription.mode"),
|
|
140
|
+
APEXSessionProperty.getAPEXSessionProperties(APEXLangCompiler.getInstance(version).getDeploymentFileProperties()),
|
|
141
|
+
new APEXLangDeploymentFile(deployment), null, null, null);
|
|
142
|
+
var compilation = transpiler.transpile(input, values);
|
|
143
|
+
result.put("compilerMmdVersion", transpiler.getCompilerMmdVersion());
|
|
144
|
+
if (compilation.getWarnings() != null && compilation.getWarnings().length > 0)
|
|
145
|
+
result.put("warnings", transpiler.formatWarnings(compilation.getWarnings()));
|
|
146
|
+
if (compilation.getErrors().length > 0)
|
|
147
|
+
throw new IllegalArgumentException(transpiler.formatErrors(compilation.getErrors()));
|
|
148
|
+
List<String> blocks = new ArrayList<>();
|
|
149
|
+
JsonNode configuration = JSON.readTree(Files.readString(deployment));
|
|
150
|
+
long applicationId = job.path("applicationId").asLong(configuration.path("app").path("id").asLong(0));
|
|
151
|
+
String workspace = job.path("workspace").asText(configuration.path("workspace").path("name").asText(""));
|
|
152
|
+
String schema = job.path("parsingSchema").asText(configuration.path("app").path("databaseSession").path("parsingSchema").asText(""));
|
|
153
|
+
if (applicationId > 0 && !workspace.isBlank() && !schema.isBlank()) {
|
|
154
|
+
blocks.add("begin apex_application_install.clear_all; apex_application_install.set_workspace(" + literal(workspace)
|
|
155
|
+
+ "); apex_application_install.set_application_id(" + applicationId + "); apex_application_install.set_schema("
|
|
156
|
+
+ literal(schema) + "); end;");
|
|
157
|
+
result.put("targetConfigured", true);
|
|
158
|
+
}
|
|
159
|
+
compilation.processPlSqlOutput(blocks::add);
|
|
160
|
+
if (blocks.isEmpty()) throw new IllegalArgumentException("Oracle compiler produced no import blocks");
|
|
161
|
+
long size = blocks.stream().mapToLong(s -> s.getBytes(StandardCharsets.UTF_8).length).sum();
|
|
162
|
+
if (size > MAX_BYTES) throw new IllegalArgumentException("Compiled import exceeds the bridge payload limit");
|
|
163
|
+
result.put("blockCount", blocks.size());
|
|
164
|
+
result.put("compiledBytes", size);
|
|
165
|
+
result.put("databaseRequests", 1);
|
|
166
|
+
return blocks;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
static String literal(String value) { return "'" + value.replace("'", "''") + "'"; }
|
|
170
|
+
|
|
171
|
+
static void export(Connection connection, JsonNode job, ObjectNode result) throws Exception {
|
|
172
|
+
long applicationId = job.path("applicationId").asLong(0);
|
|
173
|
+
if (applicationId <= 0) throw new IllegalArgumentException("Invalid applicationId");
|
|
174
|
+
String format = required(job, "exportType");
|
|
175
|
+
if (format.equals("APPLICATION_SOURCE")) format = "SQL";
|
|
176
|
+
if (!Set.of("APEXLANG", "SQL").contains(format)) throw new IllegalArgumentException("Unsupported exportType");
|
|
177
|
+
String sql = """
|
|
178
|
+
declare
|
|
179
|
+
l_files apex_t_export_files;
|
|
180
|
+
l_zip blob;
|
|
181
|
+
begin
|
|
182
|
+
l_files := apex_export.get_application(
|
|
183
|
+
p_application_id => ?, p_type => ?, p_split => ? = 1,
|
|
184
|
+
p_with_date => false, p_with_original_ids => true,
|
|
185
|
+
p_with_comments => true, p_with_supporting_objects => 'Y');
|
|
186
|
+
l_zip := apex_export.zip(l_files);
|
|
187
|
+
? := apex_web_service.blob2clobbase64(l_zip, p_newlines => 'N', p_padding => 'Y');
|
|
188
|
+
end;
|
|
189
|
+
""";
|
|
190
|
+
String encoded;
|
|
191
|
+
try (CallableStatement statement = connection.prepareCall(sql)) {
|
|
192
|
+
statement.setLong(1, applicationId);
|
|
193
|
+
statement.setString(2, format);
|
|
194
|
+
statement.setInt(3, job.path("split").asBoolean(true) ? 1 : 0);
|
|
195
|
+
statement.registerOutParameter(4, Types.CLOB);
|
|
196
|
+
statement.execute();
|
|
197
|
+
Clob content = statement.getClob(4);
|
|
198
|
+
if (content == null || content.length() == 0 || content.length() > MAX_BYTES * 2)
|
|
199
|
+
throw new IOException("Missing or oversized export response");
|
|
200
|
+
encoded = content.getSubString(1, Math.toIntExact(content.length()));
|
|
201
|
+
}
|
|
202
|
+
// SQLcl 26.1's OREST getClob serializes the JSON scalar, including its quotes.
|
|
203
|
+
// Decode that scalar once; accept raw text if a later driver corrects this behavior.
|
|
204
|
+
if (encoded.startsWith("\"")) {
|
|
205
|
+
JsonNode scalar = JSON.readTree(encoded);
|
|
206
|
+
if (!scalar.isTextual()) throw new IOException("Invalid export CLOB response");
|
|
207
|
+
encoded = scalar.asText();
|
|
208
|
+
}
|
|
209
|
+
Path directory = Path.of(required(job, "outputDirectory")).toAbsolutePath().normalize();
|
|
210
|
+
List<String> files = extractZip(Base64.getDecoder().decode(encoded.replaceAll("\\s", "")), directory);
|
|
211
|
+
if (format.equals("APEXLANG") && files.stream().noneMatch(f -> f.endsWith(".apex/apexlang.json")))
|
|
212
|
+
throw new IOException("APEXlang export lacks Oracle .apex/apexlang.json metadata");
|
|
213
|
+
result.set("files", JSON.valueToTree(files));
|
|
214
|
+
result.put("outputDirectory", directory.toString());
|
|
215
|
+
result.put("message", "Export successful");
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
static List<String> extractZip(byte[] archive, Path directory) throws Exception {
|
|
219
|
+
if (Files.exists(directory)) {
|
|
220
|
+
if (Files.isSymbolicLink(directory)) throw new IOException("Export directory cannot be a symbolic link");
|
|
221
|
+
try (var entries = Files.list(directory)) {
|
|
222
|
+
if (entries.findAny().isPresent()) throw new IOException("Export directory must be empty");
|
|
223
|
+
}
|
|
224
|
+
} else Files.createDirectories(directory);
|
|
225
|
+
Path root = directory.toRealPath();
|
|
226
|
+
List<String> files = new ArrayList<>();
|
|
227
|
+
long total = 0;
|
|
228
|
+
try (ZipInputStream zip = new ZipInputStream(new ByteArrayInputStream(archive), StandardCharsets.UTF_8)) {
|
|
229
|
+
ZipEntry entry;
|
|
230
|
+
while ((entry = zip.getNextEntry()) != null) {
|
|
231
|
+
String name = entry.getName();
|
|
232
|
+
Path target = root.resolve(name).normalize();
|
|
233
|
+
if (name.contains("\\") || !target.startsWith(root) || target.equals(root) || name.startsWith("/"))
|
|
234
|
+
throw new IOException("Unsafe export archive path");
|
|
235
|
+
if (entry.isDirectory()) { Files.createDirectories(target); continue; }
|
|
236
|
+
Files.createDirectories(target.getParent());
|
|
237
|
+
try (OutputStream out = Files.newOutputStream(target, StandardOpenOption.CREATE_NEW)) {
|
|
238
|
+
byte[] buffer = new byte[65536];
|
|
239
|
+
int read;
|
|
240
|
+
while ((read = zip.read(buffer)) >= 0) {
|
|
241
|
+
total += read;
|
|
242
|
+
if (total > MAX_BYTES) throw new IOException("Export archive exceeds the bridge payload limit");
|
|
243
|
+
out.write(buffer, 0, read);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
files.add(name);
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
if (files.isEmpty()) throw new IOException("Empty export archive");
|
|
250
|
+
return files;
|
|
251
|
+
}
|
|
252
|
+
|
|
253
|
+
static String script(JsonNode job) throws Exception {
|
|
254
|
+
Path input = Path.of(required(job, "input")).toRealPath();
|
|
255
|
+
return expandScript(input, input.getParent(), new HashSet<>());
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
static String expandScript(Path input, Path root, Set<Path> active) throws Exception {
|
|
259
|
+
input = input.toRealPath();
|
|
260
|
+
if (!input.startsWith(root) || !active.add(input)) throw new IOException("Unsafe or cyclic SQL include");
|
|
261
|
+
StringBuilder output = new StringBuilder();
|
|
262
|
+
Pattern include = Pattern.compile("^\\s*@@?(?:\"([^\"]+)\"|'([^']+)'|([^\\s]+))\\s*$");
|
|
263
|
+
for (String line : Files.readAllLines(input, StandardCharsets.UTF_8)) {
|
|
264
|
+
Matcher match = include.matcher(line);
|
|
265
|
+
if (match.matches()) {
|
|
266
|
+
String name = match.group(1) != null ? match.group(1) : match.group(2) != null ? match.group(2) : match.group(3);
|
|
267
|
+
Path child = input.getParent().resolve(name);
|
|
268
|
+
if (!Files.exists(child) && !name.endsWith(".sql")) child = input.getParent().resolve(name + ".sql");
|
|
269
|
+
output.append(expandScript(child, root, active));
|
|
270
|
+
} else {
|
|
271
|
+
if (line.stripLeading().startsWith("@")) throw new IOException("Unsupported SQL include syntax");
|
|
272
|
+
output.append(line).append('\n');
|
|
273
|
+
}
|
|
274
|
+
if (output.length() > MAX_BYTES) throw new IOException("SQL script exceeds the bridge payload limit");
|
|
275
|
+
}
|
|
276
|
+
active.remove(input);
|
|
277
|
+
return output.toString();
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
static void executeScript(Connection connection, String sql, ObjectNode result) throws Exception {
|
|
281
|
+
if (!(connection instanceof oracle.dbtools.jdbc.Connection restConnection))
|
|
282
|
+
throw new SQLException("Expected the SQLcl REST connection implementation");
|
|
283
|
+
try (ScriptStatement rest = new ScriptStatement(restConnection)) {
|
|
284
|
+
try (var response = rest.orestExecuteInternal(sql)) {
|
|
285
|
+
if (response == null) throw new SQLException("ORDS script produced no HTTP response");
|
|
286
|
+
if (response.getCode() < 200 || response.getCode() >= 300)
|
|
287
|
+
throw new SQLException("ORDS script HTTP status " + response.getCode());
|
|
288
|
+
JsonNode body = JSON.readTree(response.getEntity().getContent());
|
|
289
|
+
if (!body.path("items").isArray() || body.path("items").isEmpty())
|
|
290
|
+
throw new SQLException("ORDS returned no script execution results");
|
|
291
|
+
int statements = 0;
|
|
292
|
+
for (JsonNode item : body.path("items")) {
|
|
293
|
+
statements++;
|
|
294
|
+
String messages = item.path("response").toString();
|
|
295
|
+
if (item.path("errorCode").asInt(0) != 0 || item.hasNonNull("errorDetails") || item.path("result").asInt(0) < 0
|
|
296
|
+
|| Pattern.compile("(?i)ORA-\\d+|PLS-\\d+|SP2-\\d+|unknown command|error at line").matcher(messages).find())
|
|
297
|
+
throw new SQLException("ORDS script failed at statement " + statements + ": " + messages);
|
|
298
|
+
}
|
|
299
|
+
result.put("statementCount", statements);
|
|
300
|
+
result.put("message", "Script execution successful");
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/** The driver's default emulate=jdbc payload is for individual JDBC statements.
|
|
306
|
+
* Full SQL*Plus scripts use ORDS's documented statementText script format instead.
|
|
307
|
+
*/
|
|
308
|
+
static class ScriptStatement extends oracle.dbtools.jdbc.Statement {
|
|
309
|
+
ScriptStatement(oracle.dbtools.jdbc.Connection connection) { super(connection); }
|
|
310
|
+
@Override protected AbstractMap.SimpleEntry<com.fasterxml.jackson.core.JsonGenerator, Writer>
|
|
311
|
+
generatePost(String sql, int offset) throws SQLException {
|
|
312
|
+
try {
|
|
313
|
+
Writer out = new StringWriter();
|
|
314
|
+
var generator = JSON.getFactory().createGenerator(out);
|
|
315
|
+
generator.writeStartObject();
|
|
316
|
+
generator.writeStringField("statementText", sql);
|
|
317
|
+
generator.writeEndObject();
|
|
318
|
+
generator.flush();
|
|
319
|
+
return new AbstractMap.SimpleEntry<>(generator, out);
|
|
320
|
+
} catch (IOException error) { throw new SQLException("Could not encode the ORDS script", error); }
|
|
321
|
+
}
|
|
322
|
+
}
|
|
323
|
+
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
All image contents within are Copyright The Pokémon Company.
|
|
2
|
+
|
|
3
|
+
This repository is distributed under CC0 1.0 Universal
|
|
4
|
+
|
|
5
|
+
Statement of Purpose
|
|
6
|
+
|
|
7
|
+
The laws of most jurisdictions throughout the world automatically confer
|
|
8
|
+
exclusive Copyright and Related Rights (defined below) upon the creator and
|
|
9
|
+
subsequent owner(s) (each and all, an "owner") of an original work of
|
|
10
|
+
authorship and/or a database (each, a "Work").
|
|
11
|
+
|
|
12
|
+
Certain owners wish to permanently relinquish those rights to a Work for the
|
|
13
|
+
purpose of contributing to a commons of creative, cultural and scientific
|
|
14
|
+
works ("Commons") that the public can reliably and without fear of later
|
|
15
|
+
claims of infringement build upon, modify, incorporate in other works, reuse
|
|
16
|
+
and redistribute as freely as possible in any form whatsoever and for any
|
|
17
|
+
purposes, including without limitation commercial purposes. These owners may
|
|
18
|
+
contribute to the Commons to promote the ideal of a free culture and the
|
|
19
|
+
further production of creative, cultural and scientific works, or to gain
|
|
20
|
+
reputation or greater distribution for their Work in part through the use and
|
|
21
|
+
efforts of others.
|
|
22
|
+
|
|
23
|
+
For these and/or other purposes and motivations, and without any expectation
|
|
24
|
+
of additional consideration or compensation, the person associating CC0 with a
|
|
25
|
+
Work (the "Affirmer"), to the extent that he or she is an owner of Copyright
|
|
26
|
+
and Related Rights in the Work, voluntarily elects to apply CC0 to the Work
|
|
27
|
+
and publicly distribute the Work under its terms, with knowledge of his or her
|
|
28
|
+
Copyright and Related Rights in the Work and the meaning and intended legal
|
|
29
|
+
effect of CC0 on those rights.
|
|
30
|
+
|
|
31
|
+
1. Copyright and Related Rights. A Work made available under CC0 may be
|
|
32
|
+
protected by copyright and related or neighboring rights ("Copyright and
|
|
33
|
+
Related Rights"). Copyright and Related Rights include, but are not limited
|
|
34
|
+
to, the following:
|
|
35
|
+
|
|
36
|
+
i. the right to reproduce, adapt, distribute, perform, display, communicate,
|
|
37
|
+
and translate a Work;
|
|
38
|
+
|
|
39
|
+
ii. moral rights retained by the original author(s) and/or performer(s);
|
|
40
|
+
|
|
41
|
+
iii. publicity and privacy rights pertaining to a person's image or likeness
|
|
42
|
+
depicted in a Work;
|
|
43
|
+
|
|
44
|
+
iv. rights protecting against unfair competition in regards to a Work,
|
|
45
|
+
subject to the limitations in paragraph 4(a), below;
|
|
46
|
+
|
|
47
|
+
v. rights protecting the extraction, dissemination, use and reuse of data in
|
|
48
|
+
a Work;
|
|
49
|
+
|
|
50
|
+
vi. database rights (such as those arising under Directive 96/9/EC of the
|
|
51
|
+
European Parliament and of the Council of 11 March 1996 on the legal
|
|
52
|
+
protection of databases, and under any national implementation thereof,
|
|
53
|
+
including any amended or successor version of such directive); and
|
|
54
|
+
|
|
55
|
+
vii. other similar, equivalent or corresponding rights throughout the world
|
|
56
|
+
based on applicable law or treaty, and any national implementations thereof.
|
|
57
|
+
|
|
58
|
+
2. Waiver. To the greatest extent permitted by, but not in contravention of,
|
|
59
|
+
applicable law, Affirmer hereby overtly, fully, permanently, irrevocably and
|
|
60
|
+
unconditionally waives, abandons, and surrenders all of Affirmer's Copyright
|
|
61
|
+
and Related Rights and associated claims and causes of action, whether now
|
|
62
|
+
known or unknown (including existing as well as future claims and causes of
|
|
63
|
+
action), in the Work (i) in all territories worldwide, (ii) for the maximum
|
|
64
|
+
duration provided by applicable law or treaty (including future time
|
|
65
|
+
extensions), (iii) in any current or future medium and for any number of
|
|
66
|
+
copies, and (iv) for any purpose whatsoever, including without limitation
|
|
67
|
+
commercial, advertising or promotional purposes (the "Waiver"). Affirmer makes
|
|
68
|
+
the Waiver for the benefit of each member of the public at large and to the
|
|
69
|
+
detriment of Affirmer's heirs and successors, fully intending that such Waiver
|
|
70
|
+
shall not be subject to revocation, rescission, cancellation, termination, or
|
|
71
|
+
any other legal or equitable action to disrupt the quiet enjoyment of the Work
|
|
72
|
+
by the public as contemplated by Affirmer's express Statement of Purpose.
|
|
73
|
+
|
|
74
|
+
3. Public License Fallback. Should any part of the Waiver for any reason be
|
|
75
|
+
judged legally invalid or ineffective under applicable law, then the Waiver
|
|
76
|
+
shall be preserved to the maximum extent permitted taking into account
|
|
77
|
+
Affirmer's express Statement of Purpose. In addition, to the extent the Waiver
|
|
78
|
+
is so judged Affirmer hereby grants to each affected person a royalty-free,
|
|
79
|
+
non transferable, non sublicensable, non exclusive, irrevocable and
|
|
80
|
+
unconditional license to exercise Affirmer's Copyright and Related Rights in
|
|
81
|
+
the Work (i) in all territories worldwide, (ii) for the maximum duration
|
|
82
|
+
provided by applicable law or treaty (including future time extensions), (iii)
|
|
83
|
+
in any current or future medium and for any number of copies, and (iv) for any
|
|
84
|
+
purpose whatsoever, including without limitation commercial, advertising or
|
|
85
|
+
promotional purposes (the "License"). The License shall be deemed effective as
|
|
86
|
+
of the date CC0 was applied by Affirmer to the Work. Should any part of the
|
|
87
|
+
License for any reason be judged legally invalid or ineffective under
|
|
88
|
+
applicable law, such partial invalidity or ineffectiveness shall not
|
|
89
|
+
invalidate the remainder of the License, and in such case Affirmer hereby
|
|
90
|
+
affirms that he or she will not (i) exercise any of his or her remaining
|
|
91
|
+
Copyright and Related Rights in the Work or (ii) assert any associated claims
|
|
92
|
+
and causes of action with respect to the Work, in either case contrary to
|
|
93
|
+
Affirmer's express Statement of Purpose.
|
|
94
|
+
|
|
95
|
+
4. Limitations and Disclaimers.
|
|
96
|
+
|
|
97
|
+
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
|
98
|
+
surrendered, licensed or otherwise affected by this document.
|
|
99
|
+
|
|
100
|
+
b. Affirmer offers the Work as-is and makes no representations or warranties
|
|
101
|
+
of any kind concerning the Work, express, implied, statutory or otherwise,
|
|
102
|
+
including without limitation warranties of title, merchantability, fitness
|
|
103
|
+
for a particular purpose, non infringement, or the absence of latent or
|
|
104
|
+
other defects, accuracy, or the present or absence of errors, whether or not
|
|
105
|
+
discoverable, all to the greatest extent permissible under applicable law.
|
|
106
|
+
|
|
107
|
+
c. Affirmer disclaims responsibility for clearing rights of other persons
|
|
108
|
+
that may apply to the Work or any use thereof, including without limitation
|
|
109
|
+
any person's Copyright and Related Rights in the Work. Further, Affirmer
|
|
110
|
+
disclaims responsibility for obtaining any necessary consents, permissions
|
|
111
|
+
or other rights required for any use of the Work.
|
|
112
|
+
|
|
113
|
+
d. Affirmer understands and acknowledges that Creative Commons is not a
|
|
114
|
+
party to this document and has no duty or obligation with respect to this
|
|
115
|
+
CC0 or use of the Work.
|
|
116
|
+
|
|
117
|
+
For more information, please see
|
|
118
|
+
<http://creativecommons.org/publicdomain/zero/1.0/>
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
{
|
|
2
|
+
"repository": "https://github.com/PokeAPI/sprites",
|
|
3
|
+
"revision": "1dce80ceb372675e9fc7e9f101b71845ef587de2",
|
|
4
|
+
"assets": [
|
|
5
|
+
{
|
|
6
|
+
"name": "mewtwo",
|
|
7
|
+
"id": 150,
|
|
8
|
+
"source": "https://raw.githubusercontent.com/PokeAPI/sprites/1dce80ceb372675e9fc7e9f101b71845ef587de2/sprites/pokemon/150.png",
|
|
9
|
+
"sha256": "31c5aebb134a3711864a92091cb1b5c35158e4e90ca5c88afddf56f0cf4bc129"
|
|
10
|
+
},
|
|
11
|
+
{
|
|
12
|
+
"name": "pikachu",
|
|
13
|
+
"id": 25,
|
|
14
|
+
"source": "https://raw.githubusercontent.com/PokeAPI/sprites/1dce80ceb372675e9fc7e9f101b71845ef587de2/sprites/pokemon/25.png",
|
|
15
|
+
"sha256": "80d30eb1b9f2a05eb4a216d53034e2a0bb16f2619ec43d281f36d601e5819c2c"
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
"name": "charmander",
|
|
19
|
+
"id": 4,
|
|
20
|
+
"source": "https://raw.githubusercontent.com/PokeAPI/sprites/1dce80ceb372675e9fc7e9f101b71845ef587de2/sprites/pokemon/4.png",
|
|
21
|
+
"sha256": "4e943ded73aff00aa8323800481412cf0912649d640f5ad5021e8e1e2b3e77c6"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"name": "bulbasaur",
|
|
25
|
+
"id": 1,
|
|
26
|
+
"source": "https://raw.githubusercontent.com/PokeAPI/sprites/1dce80ceb372675e9fc7e9f101b71845ef587de2/sprites/pokemon/1.png",
|
|
27
|
+
"sha256": "7307265558511ea080add119ab7e86b9f87aaab4cedef76df2a13290ca5ad8c9"
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
"name": "squirtle",
|
|
31
|
+
"id": 7,
|
|
32
|
+
"source": "https://raw.githubusercontent.com/PokeAPI/sprites/1dce80ceb372675e9fc7e9f101b71845ef587de2/sprites/pokemon/7.png",
|
|
33
|
+
"sha256": "1309dd0971ab7c5cd1699fa6ead8b00c9d8fa7f39e09313e697b3d31527f0517"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1">
|
|
5
|
+
<title>APEXREST · Development panel</title>
|
|
6
|
+
<link rel="stylesheet" href="/panel.css">
|
|
7
|
+
<script src="/panel.js" defer></script>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<aside class="sidebar">
|
|
11
|
+
<div class="brand"><span class="brand-mark" aria-hidden="true">⌘</span><div>APEXREST<small>CODEX WORKSPACE</small></div></div>
|
|
12
|
+
<div class="project-label">PROJECT</div><strong id="project-name">Connecting…</strong><div id="project-path" class="subtle path"></div>
|
|
13
|
+
<nav aria-label="Development views">
|
|
14
|
+
<button data-view="overview" aria-current="page"><span>◈</span> Overview</button>
|
|
15
|
+
<button data-view="team"><span>◎</span> Agents</button>
|
|
16
|
+
<button data-view="operations"><span>↗</span> APEX operations</button>
|
|
17
|
+
<button data-view="settings"><span>☷</span> Settings</button>
|
|
18
|
+
</nav>
|
|
19
|
+
<div class="sidebar-bottom"><span id="connection" class="badge">Connecting</span><p id="updated" class="subtle">Waiting for workspace data</p><button id="refresh" class="quiet">Refresh now</button></div>
|
|
20
|
+
</aside>
|
|
21
|
+
<main>
|
|
22
|
+
<header><div><p class="eyebrow">DEVELOPMENT CONTROL</p><h1 id="view-title">Workspace overview</h1><p id="view-subtitle" class="subtle">Your team, settings and APEX work in one place.</p></div><button id="new-task" class="primary">+ New task</button></header>
|
|
23
|
+
<div id="notice" role="status" class="notice" hidden></div>
|
|
24
|
+
<div id="connection-error" role="alert" class="notice error" hidden></div>
|
|
25
|
+
<section id="metrics" class="metrics" aria-label="Workspace summary"></section>
|
|
26
|
+
<section data-page="overview"><div id="overview-live"></div></section>
|
|
27
|
+
<section data-page="team" hidden>
|
|
28
|
+
<div class="section-heading"><h2>Development runs</h2><label class="inline-label">Run <select id="team-select" aria-label="Selected run"></select></label></div>
|
|
29
|
+
<div id="team-live"></div>
|
|
30
|
+
<form id="message-form" class="card"><h3>Send a task update</h3><label for="message">Clarify the task or pass new information to the active agent</label><textarea id="message" rows="3" maxlength="8000" required placeholder="Include the behavior or acceptance check you want changed…"></textarea><div class="form-footer"><p class="subtle">New input invalidates a completion based on the previous task.</p><button class="primary" type="submit">Send update</button><button id="cancel-team" type="button" class="danger">Stop run</button></div></form>
|
|
31
|
+
</section>
|
|
32
|
+
<section data-page="operations" hidden>
|
|
33
|
+
<div class="card"><div class="section-heading"><div><h2>Run a check</h2><p class="subtle">Use the selected project's existing toolchain and authorization.</p></div></div><div class="actions"><button id="validate">Compile APEX source</button><label>Environment<select id="environment"><option value="">Choose environment</option></select></label><label>Test suite<select id="suite"><option value="unit">Unit</option><option value="sql">SQL</option><option value="api">API</option><option value="e2e">Playwright E2E</option><option value="all">All configured</option></select></label><button id="run-tests">Run checks</button><button id="plan">Prepare deployment plan</button></div><p class="subtle">Application imports keep their existing plan, backup and approval gates. This panel does not grant deployment permission.</p></div>
|
|
34
|
+
<div id="operations-live"></div>
|
|
35
|
+
</section>
|
|
36
|
+
<section data-page="settings" hidden>
|
|
37
|
+
<div class="two-columns">
|
|
38
|
+
<form id="sqlcl-form" class="card"><p class="eyebrow">ORACLE CONNECTION</p><h2>Database connectivity</h2><p class="subtle">Saved at plugin level for new APEXREST operations across projects.</p><label>Database network transport<select id="sqlcl-transport"><option value="direct">Direct Oracle listener</option><option value="ords">ORDS HTTP(S)</option></select></label><p id="sqlcl-transport-note" class="subtle"></p><label>SQLcl execution<select id="sqlcl-mode"><option value="cli">SQLcl CLI</option><option value="mcp">Official SQLcl MCP</option></select></label><label>MCP restriction level<select id="sqlcl-level"><option value="4">Level 4 · restricted (default)</option><option value="1">Level 1 · allow SQLcl scripts</option></select></label><button type="submit">Save SQLcl settings</button></form>
|
|
39
|
+
<form id="preferences-form" class="card"><p class="eyebrow">WORKFLOW</p><h2>Defaults for new work</h2><label>Execution mode<select id="default-execution-mode"><option value="single">Single agent</option><option value="team">Agent team</option></select></label><label>Browser for APEX verification<select id="default-browser-mode"><option value="codex">Codex in-app browser</option><option value="external">External system browser</option></select></label><p class="subtle">The external browser uses your normal browser session for interactive login, including SSO. Automated Playwright suites use separate authentication. The dashboard stays in Codex.</p><label>Developers<select id="default-developers"><option>1</option><option>2</option><option>3</option></select></label><label>Developer permissions<select id="default-sandbox"><option value="workspace-write">Write inside this project</option><option value="read-only">Read only</option></select></label><label>Time limit (seconds)<input id="default-timeout" type="number" min="30" max="3600" required></label><p id="default-workflow-note" class="subtle"></p><button type="submit">Save work defaults</button></form>
|
|
40
|
+
</div>
|
|
41
|
+
<form id="connection-form" class="card" autocomplete="off">
|
|
42
|
+
<p class="eyebrow">PLUGIN CONNECTION SETTINGS</p><h2>Connection references</h2>
|
|
43
|
+
<p class="subtle">Choose a project's read or deploy connection reference. Its connection settings are shared across projects using that reference.</p>
|
|
44
|
+
<label>Connection reference<input id="connection-ref" list="connection-refs" maxlength="100" required placeholder="Your read or deploy connection reference"></label><datalist id="connection-refs"></datalist>
|
|
45
|
+
<p id="connection-mode-note" class="subtle"></p>
|
|
46
|
+
<fieldset id="connection-direct-group" class="connection-group">
|
|
47
|
+
<legend>Direct Oracle listener</legend>
|
|
48
|
+
<p class="subtle">Choose a connection from your local SQLcl connection store. SQLcl manages its database credentials.</p>
|
|
49
|
+
<div class="connection-picker"><label>Saved SQLcl connection<select id="connection-direct"><option value="">Choose a saved connection</option></select></label><button id="saved-connections-refresh" type="button" class="quiet">Load saved connections</button></div>
|
|
50
|
+
<p id="saved-connections-status" class="subtle" role="status" aria-live="polite" data-state="idle">Saved connections load when you open Direct connection settings.</p>
|
|
51
|
+
<details><summary>Manage saved connections</summary><p class="subtle">Save a direct database connection in SQLcl, then refresh this list. Selecting a name here maps it to the connection reference above.</p><pre>connmgr list -flat</pre></details>
|
|
52
|
+
</fieldset>
|
|
53
|
+
<fieldset id="connection-ords-group" class="connection-group" hidden disabled>
|
|
54
|
+
<legend>ORDS HTTP(S)</legend>
|
|
55
|
+
<p class="subtle">Use your existing Oracle database username and password through ORDS. No separate ORDS account is needed. The schema must be REST-enabled and permit REST-enabled SQL.</p>
|
|
56
|
+
<label>ORDS schema URL<input id="connection-ords-url" type="url" maxlength="2048" placeholder="https://example.com/ords/schema-alias/"></label><p class="subtle">Use the schema URL provided by your administrator. Its schema alias can differ from your database username.</p>
|
|
57
|
+
<div class="two-columns"><label>Database username<input id="connection-ords-user" maxlength="128" autocomplete="off" placeholder="Your Oracle database username"></label><label>Database password<input id="connection-ords-password" type="password" autocomplete="new-password"></label></div><p id="connection-password-note" class="subtle">Leave the password blank to keep it for the same URL and database username. A changed URL or username requires a password.</p>
|
|
58
|
+
<p class="subtle connection-storage-note">SQLcl cannot save ORDS connections. APEXREST stores these settings and the database password locally at plugin level.</p>
|
|
59
|
+
<details><summary>Configure ORDS from the CLI</summary><p class="subtle">Provide your database password through a local file:</p><pre>apexrest connection add --name REF --ords-url https://example.com/ords/schema-alias/ --ords-username DATABASE_USER --password-file PATH</pre><p class="subtle">Interactive SQLcl example:</p><pre>connect -orest DATABASE_USER@https://example.com/ords/schema-alias/</pre></details>
|
|
60
|
+
</fieldset>
|
|
61
|
+
<button id="connection-save" type="submit">Save direct connection</button>
|
|
62
|
+
</form><div id="settings-live"></div>
|
|
63
|
+
</section>
|
|
64
|
+
<footer>APEXREST for Codex <span id="version"></span><span>Local workspace · Updates every 2 seconds</span></footer>
|
|
65
|
+
</main>
|
|
66
|
+
<dialog id="task-dialog"><form id="task-form"><div class="section-heading"><div><p class="eyebrow">DEVELOPMENT TASK</p><h2>Start a task</h2></div><button type="button" id="close-task" class="quiet" aria-label="Close new task">✕</button></div><label for="task">Task and acceptance criteria</label><textarea id="task" rows="6" maxlength="16000" required placeholder="Describe the APEX change, target and checks. Include any existing authorization and constraints."></textarea><div class="actions"><label>Execution mode<select id="task-execution-mode"><option value="single">Single agent</option><option value="team">Agent team</option></select></label><label>Verification browser<select id="task-browser-mode"><option value="codex">Codex in-app browser</option><option value="external">External system browser</option></select></label><label>Developers<select id="task-developers"><option>1</option><option>2</option><option>3</option></select></label><label>Permissions<select id="task-sandbox"><option value="workspace-write">Project write</option><option value="read-only">Read only</option></select></label><label>Time limit (seconds)<input id="task-timeout" type="number" min="30" max="3600" required></label></div><p id="task-workflow-note" class="subtle"></p><button type="submit" class="primary">Start task</button></form></dialog>
|
|
67
|
+
</body>
|
|
68
|
+
</html>
|