@seshuk/payload-plugin-openapi 0.2.3 → 1.0.0-beta.2
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/README.md +72 -26
- package/dist/_tooling/telemetry.js +168 -0
- package/dist/_tooling/telemetry.js.map +1 -0
- package/dist/cli/generateSpec.d.ts +2 -0
- package/dist/cli/generateSpec.js +40 -0
- package/dist/cli/generateSpec.js.map +1 -0
- package/dist/index.d.ts +8 -9
- package/dist/index.js +76 -65
- package/dist/index.js.map +1 -0
- package/dist/{endpoints → server/endpoints}/interactiveAuth.d.ts +2 -2
- package/dist/server/endpoints/interactiveAuth.js +25 -0
- package/dist/server/endpoints/interactiveAuth.js.map +1 -0
- package/dist/server/endpoints/spec.d.ts +5 -0
- package/dist/server/endpoints/spec.js +39 -0
- package/dist/server/endpoints/spec.js.map +1 -0
- package/dist/server/options/resolveOptions.d.ts +4 -0
- package/dist/server/options/resolveOptions.js +65 -0
- package/dist/server/options/resolveOptions.js.map +1 -0
- package/dist/server/spec/build.d.ts +14 -0
- package/dist/server/spec/build.js +40 -0
- package/dist/server/spec/build.js.map +1 -0
- package/dist/server/spec/buildDocument.d.ts +16 -0
- package/dist/server/spec/buildDocument.js +340 -0
- package/dist/server/spec/buildDocument.js.map +1 -0
- package/dist/server/spec/components.d.ts +61 -0
- package/dist/server/spec/components.js +265 -0
- package/dist/server/spec/components.js.map +1 -0
- package/dist/{spec → server/spec}/downconvert.d.ts +2 -1
- package/dist/server/spec/downconvert.js +69 -0
- package/dist/server/spec/downconvert.js.map +1 -0
- package/dist/server/spec/entitySchemas.d.ts +15 -0
- package/dist/server/spec/entitySchemas.js +207 -0
- package/dist/server/spec/entitySchemas.js.map +1 -0
- package/dist/{spec → server/spec}/fields.d.ts +2 -1
- package/dist/server/spec/fields.js +47 -0
- package/dist/server/spec/fields.js.map +1 -0
- package/dist/server/spec/filters.d.ts +16 -0
- package/dist/server/spec/filters.js +102 -0
- package/dist/server/spec/filters.js.map +1 -0
- package/dist/server/spec/hierarchy.d.ts +11 -0
- package/dist/server/spec/hierarchy.js +43 -0
- package/dist/server/spec/hierarchy.js.map +1 -0
- package/dist/{spec → server/spec}/names.d.ts +2 -2
- package/dist/server/spec/names.js +43 -0
- package/dist/server/spec/names.js.map +1 -0
- package/dist/server/spec/params.d.ts +57 -0
- package/dist/server/spec/params.js +394 -0
- package/dist/server/spec/params.js.map +1 -0
- package/dist/server/spec/paths/auth.d.ts +10 -0
- package/dist/server/spec/paths/auth.js +190 -0
- package/dist/server/spec/paths/auth.js.map +1 -0
- package/dist/server/spec/paths/collections.d.ts +11 -0
- package/dist/server/spec/paths/collections.js +418 -0
- package/dist/server/spec/paths/collections.js.map +1 -0
- package/dist/server/spec/paths/custom.d.ts +12 -0
- package/dist/server/spec/paths/custom.js +42 -0
- package/dist/server/spec/paths/custom.js.map +1 -0
- package/dist/server/spec/paths/globals.d.ts +11 -0
- package/dist/server/spec/paths/globals.js +87 -0
- package/dist/server/spec/paths/globals.js.map +1 -0
- package/dist/server/spec/paths/jobs.d.ts +9 -0
- package/dist/server/spec/paths/jobs.js +98 -0
- package/dist/server/spec/paths/jobs.js.map +1 -0
- package/dist/server/spec/paths/system.d.ts +9 -0
- package/dist/server/spec/paths/system.js +203 -0
- package/dist/server/spec/paths/system.js.map +1 -0
- package/dist/server/spec/paths/versions.d.ts +22 -0
- package/dist/server/spec/paths/versions.js +185 -0
- package/dist/server/spec/paths/versions.js.map +1 -0
- package/dist/server/spec/plugins/ecommerce.d.ts +3 -0
- package/dist/server/spec/plugins/ecommerce.js +270 -0
- package/dist/server/spec/plugins/ecommerce.js.map +1 -0
- package/dist/server/spec/plugins/importExport.d.ts +3 -0
- package/dist/server/spec/plugins/importExport.js +202 -0
- package/dist/server/spec/plugins/importExport.js.map +1 -0
- package/dist/server/spec/plugins/index.d.ts +3 -0
- package/dist/server/spec/plugins/index.js +21 -0
- package/dist/server/spec/plugins/index.js.map +1 -0
- package/dist/server/spec/plugins/mcp.d.ts +3 -0
- package/dist/server/spec/plugins/mcp.js +118 -0
- package/dist/server/spec/plugins/mcp.js.map +1 -0
- package/dist/server/spec/plugins/multiTenant.d.ts +3 -0
- package/dist/server/spec/plugins/multiTenant.js +39 -0
- package/dist/server/spec/plugins/multiTenant.js.map +1 -0
- package/dist/server/spec/plugins/search.d.ts +3 -0
- package/dist/server/spec/plugins/search.js +43 -0
- package/dist/server/spec/plugins/search.js.map +1 -0
- package/dist/server/spec/plugins/seo.d.ts +3 -0
- package/dist/server/spec/plugins/seo.js +83 -0
- package/dist/server/spec/plugins/seo.js.map +1 -0
- package/dist/server/spec/plugins/shared.d.ts +35 -0
- package/dist/server/spec/plugins/shared.js +37 -0
- package/dist/server/spec/plugins/shared.js.map +1 -0
- package/dist/server/spec/plugins/storageR2.d.ts +3 -0
- package/dist/server/spec/plugins/storageR2.js +91 -0
- package/dist/server/spec/plugins/storageR2.js.map +1 -0
- package/dist/server/spec/plugins/stripe.d.ts +10 -0
- package/dist/server/spec/plugins/stripe.js +102 -0
- package/dist/server/spec/plugins/stripe.js.map +1 -0
- package/dist/server/spec/security.d.ts +34 -0
- package/dist/server/spec/security.js +100 -0
- package/dist/server/spec/security.js.map +1 -0
- package/dist/server/spec/tags.d.ts +37 -0
- package/dist/server/spec/tags.js +99 -0
- package/dist/server/spec/tags.js.map +1 -0
- package/dist/server/telemetry.d.ts +31 -0
- package/dist/server/telemetry.js +33 -0
- package/dist/server/telemetry.js.map +1 -0
- package/dist/server/ui/createUiPlugin.d.ts +16 -0
- package/dist/server/ui/createUiPlugin.js +33 -0
- package/dist/server/ui/createUiPlugin.js.map +1 -0
- package/dist/{ui → server/ui}/html.d.ts +5 -3
- package/dist/server/ui/html.js +11 -0
- package/dist/server/ui/html.js.map +1 -0
- package/dist/server/ui/scalar.d.ts +4 -0
- package/dist/server/ui/scalar.js +17 -0
- package/dist/server/ui/scalar.js.map +1 -0
- package/dist/server/ui/swagger.d.ts +4 -0
- package/dist/server/ui/swagger.js +18 -0
- package/dist/server/ui/swagger.js.map +1 -0
- package/dist/shared/constants.d.ts +4 -0
- package/dist/shared/constants.js +6 -0
- package/dist/shared/constants.js.map +1 -0
- package/dist/shared/translations/index.d.ts +5 -0
- package/dist/{translations → shared/translations}/index.js +49 -47
- package/dist/shared/translations/index.js.map +1 -0
- package/dist/shared/translations/locales/ar.d.ts +3 -0
- package/dist/shared/translations/locales/ar.js +173 -0
- package/dist/shared/translations/locales/ar.js.map +1 -0
- package/dist/shared/translations/locales/az.d.ts +3 -0
- package/dist/shared/translations/locales/az.js +173 -0
- package/dist/shared/translations/locales/az.js.map +1 -0
- package/dist/shared/translations/locales/bg.d.ts +3 -0
- package/dist/shared/translations/locales/bg.js +173 -0
- package/dist/shared/translations/locales/bg.js.map +1 -0
- package/dist/shared/translations/locales/bnBd.d.ts +3 -0
- package/dist/shared/translations/locales/bnBd.js +173 -0
- package/dist/shared/translations/locales/bnBd.js.map +1 -0
- package/dist/shared/translations/locales/bnIn.d.ts +3 -0
- package/dist/shared/translations/locales/bnIn.js +173 -0
- package/dist/shared/translations/locales/bnIn.js.map +1 -0
- package/dist/shared/translations/locales/ca.d.ts +3 -0
- package/dist/shared/translations/locales/ca.js +173 -0
- package/dist/shared/translations/locales/ca.js.map +1 -0
- package/dist/shared/translations/locales/cs.d.ts +3 -0
- package/dist/shared/translations/locales/cs.js +173 -0
- package/dist/shared/translations/locales/cs.js.map +1 -0
- package/dist/shared/translations/locales/da.d.ts +3 -0
- package/dist/shared/translations/locales/da.js +173 -0
- package/dist/shared/translations/locales/da.js.map +1 -0
- package/dist/shared/translations/locales/de.d.ts +3 -0
- package/dist/shared/translations/locales/de.js +173 -0
- package/dist/shared/translations/locales/de.js.map +1 -0
- package/dist/shared/translations/locales/en.d.ts +3 -0
- package/dist/shared/translations/locales/en.js +173 -0
- package/dist/shared/translations/locales/en.js.map +1 -0
- package/dist/shared/translations/locales/es.d.ts +3 -0
- package/dist/shared/translations/locales/es.js +173 -0
- package/dist/shared/translations/locales/es.js.map +1 -0
- package/dist/shared/translations/locales/et.d.ts +3 -0
- package/dist/shared/translations/locales/et.js +173 -0
- package/dist/shared/translations/locales/et.js.map +1 -0
- package/dist/shared/translations/locales/fa.d.ts +3 -0
- package/dist/shared/translations/locales/fa.js +173 -0
- package/dist/shared/translations/locales/fa.js.map +1 -0
- package/dist/shared/translations/locales/fr.d.ts +3 -0
- package/dist/shared/translations/locales/fr.js +173 -0
- package/dist/shared/translations/locales/fr.js.map +1 -0
- package/dist/shared/translations/locales/he.d.ts +3 -0
- package/dist/shared/translations/locales/he.js +173 -0
- package/dist/shared/translations/locales/he.js.map +1 -0
- package/dist/shared/translations/locales/hr.d.ts +3 -0
- package/dist/shared/translations/locales/hr.js +173 -0
- package/dist/shared/translations/locales/hr.js.map +1 -0
- package/dist/shared/translations/locales/hu.d.ts +3 -0
- package/dist/shared/translations/locales/hu.js +173 -0
- package/dist/shared/translations/locales/hu.js.map +1 -0
- package/dist/shared/translations/locales/hy.d.ts +3 -0
- package/dist/shared/translations/locales/hy.js +173 -0
- package/dist/shared/translations/locales/hy.js.map +1 -0
- package/dist/shared/translations/locales/id.d.ts +3 -0
- package/dist/shared/translations/locales/id.js +173 -0
- package/dist/shared/translations/locales/id.js.map +1 -0
- package/dist/shared/translations/locales/is.d.ts +3 -0
- package/dist/shared/translations/locales/is.js +173 -0
- package/dist/shared/translations/locales/is.js.map +1 -0
- package/dist/shared/translations/locales/it.d.ts +3 -0
- package/dist/shared/translations/locales/it.js +173 -0
- package/dist/shared/translations/locales/it.js.map +1 -0
- package/dist/shared/translations/locales/ja.d.ts +3 -0
- package/dist/shared/translations/locales/ja.js +173 -0
- package/dist/shared/translations/locales/ja.js.map +1 -0
- package/dist/shared/translations/locales/ko.d.ts +3 -0
- package/dist/shared/translations/locales/ko.js +173 -0
- package/dist/shared/translations/locales/ko.js.map +1 -0
- package/dist/shared/translations/locales/lt.d.ts +3 -0
- package/dist/shared/translations/locales/lt.js +173 -0
- package/dist/shared/translations/locales/lt.js.map +1 -0
- package/dist/shared/translations/locales/lv.d.ts +3 -0
- package/dist/shared/translations/locales/lv.js +173 -0
- package/dist/shared/translations/locales/lv.js.map +1 -0
- package/dist/shared/translations/locales/my.d.ts +3 -0
- package/dist/shared/translations/locales/my.js +173 -0
- package/dist/shared/translations/locales/my.js.map +1 -0
- package/dist/shared/translations/locales/nb.d.ts +3 -0
- package/dist/shared/translations/locales/nb.js +173 -0
- package/dist/shared/translations/locales/nb.js.map +1 -0
- package/dist/shared/translations/locales/nl.d.ts +3 -0
- package/dist/shared/translations/locales/nl.js +173 -0
- package/dist/shared/translations/locales/nl.js.map +1 -0
- package/dist/shared/translations/locales/pl.d.ts +3 -0
- package/dist/shared/translations/locales/pl.js +173 -0
- package/dist/shared/translations/locales/pl.js.map +1 -0
- package/dist/shared/translations/locales/pt.d.ts +3 -0
- package/dist/shared/translations/locales/pt.js +173 -0
- package/dist/shared/translations/locales/pt.js.map +1 -0
- package/dist/shared/translations/locales/ro.d.ts +3 -0
- package/dist/shared/translations/locales/ro.js +173 -0
- package/dist/shared/translations/locales/ro.js.map +1 -0
- package/dist/shared/translations/locales/rs.d.ts +3 -0
- package/dist/shared/translations/locales/rs.js +173 -0
- package/dist/shared/translations/locales/rs.js.map +1 -0
- package/dist/shared/translations/locales/rsLatin.d.ts +3 -0
- package/dist/shared/translations/locales/rsLatin.js +173 -0
- package/dist/shared/translations/locales/rsLatin.js.map +1 -0
- package/dist/shared/translations/locales/ru.d.ts +3 -0
- package/dist/shared/translations/locales/ru.js +173 -0
- package/dist/shared/translations/locales/ru.js.map +1 -0
- package/dist/shared/translations/locales/sk.d.ts +3 -0
- package/dist/shared/translations/locales/sk.js +173 -0
- package/dist/shared/translations/locales/sk.js.map +1 -0
- package/dist/shared/translations/locales/sl.d.ts +3 -0
- package/dist/shared/translations/locales/sl.js +173 -0
- package/dist/shared/translations/locales/sl.js.map +1 -0
- package/dist/shared/translations/locales/sv.d.ts +3 -0
- package/dist/shared/translations/locales/sv.js +173 -0
- package/dist/shared/translations/locales/sv.js.map +1 -0
- package/dist/shared/translations/locales/ta.d.ts +3 -0
- package/dist/shared/translations/locales/ta.js +173 -0
- package/dist/shared/translations/locales/ta.js.map +1 -0
- package/dist/shared/translations/locales/th.d.ts +3 -0
- package/dist/shared/translations/locales/th.js +173 -0
- package/dist/shared/translations/locales/th.js.map +1 -0
- package/dist/shared/translations/locales/tr.d.ts +3 -0
- package/dist/shared/translations/locales/tr.js +173 -0
- package/dist/shared/translations/locales/tr.js.map +1 -0
- package/dist/shared/translations/locales/uk.d.ts +3 -0
- package/dist/shared/translations/locales/uk.js +173 -0
- package/dist/shared/translations/locales/uk.js.map +1 -0
- package/dist/shared/translations/locales/vi.d.ts +3 -0
- package/dist/shared/translations/locales/vi.js +173 -0
- package/dist/shared/translations/locales/vi.js.map +1 -0
- package/dist/shared/translations/locales/zh.d.ts +3 -0
- package/dist/shared/translations/locales/zh.js +173 -0
- package/dist/shared/translations/locales/zh.js.map +1 -0
- package/dist/shared/translations/locales/zhTw.d.ts +3 -0
- package/dist/shared/translations/locales/zhTw.js +173 -0
- package/dist/shared/translations/locales/zhTw.js.map +1 -0
- package/dist/shared/translations/types.d.ts +180 -0
- package/dist/shared/translations/types.js +1 -0
- package/dist/shared/types/index.d.ts +412 -0
- package/dist/shared/types/index.js +1 -0
- package/dist/{utils.d.ts → shared/utils.d.ts} +1 -0
- package/dist/shared/utils.js +13 -0
- package/dist/shared/utils.js.map +1 -0
- package/package.json +70 -39
- package/dist/bin/generateSpec.d.ts +0 -25
- package/dist/bin/generateSpec.js +0 -61
- package/dist/constants.d.ts +0 -1
- package/dist/constants.js +0 -2
- package/dist/endpoints/interactiveAuth.js +0 -27
- package/dist/endpoints/spec.d.ts +0 -5
- package/dist/endpoints/spec.js +0 -39
- package/dist/options.d.ts +0 -2
- package/dist/options.js +0 -45
- package/dist/spec/build.d.ts +0 -14
- package/dist/spec/build.js +0 -36
- package/dist/spec/buildDocument.d.ts +0 -15
- package/dist/spec/buildDocument.js +0 -268
- package/dist/spec/components.d.ts +0 -44
- package/dist/spec/components.js +0 -265
- package/dist/spec/downconvert.js +0 -74
- package/dist/spec/entitySchemas.d.ts +0 -15
- package/dist/spec/entitySchemas.js +0 -250
- package/dist/spec/fields.js +0 -44
- package/dist/spec/filters.d.ts +0 -11
- package/dist/spec/filters.js +0 -83
- package/dist/spec/names.js +0 -37
- package/dist/spec/params.d.ts +0 -55
- package/dist/spec/params.js +0 -436
- package/dist/spec/paths/auth.d.ts +0 -9
- package/dist/spec/paths/auth.js +0 -274
- package/dist/spec/paths/collections.d.ts +0 -9
- package/dist/spec/paths/collections.js +0 -278
- package/dist/spec/paths/custom.d.ts +0 -9
- package/dist/spec/paths/custom.js +0 -41
- package/dist/spec/paths/globals.d.ts +0 -9
- package/dist/spec/paths/globals.js +0 -78
- package/dist/spec/paths/jobs.d.ts +0 -7
- package/dist/spec/paths/jobs.js +0 -130
- package/dist/spec/paths/versions.d.ts +0 -19
- package/dist/spec/paths/versions.js +0 -252
- package/dist/spec/security.d.ts +0 -19
- package/dist/spec/security.js +0 -96
- package/dist/spec/tags.d.ts +0 -27
- package/dist/spec/tags.js +0 -79
- package/dist/translations/index.d.ts +0 -6
- package/dist/translations/locales/ar.d.ts +0 -2
- package/dist/translations/locales/ar.js +0 -81
- package/dist/translations/locales/az.d.ts +0 -2
- package/dist/translations/locales/az.js +0 -81
- package/dist/translations/locales/bg.d.ts +0 -2
- package/dist/translations/locales/bg.js +0 -81
- package/dist/translations/locales/bnBd.d.ts +0 -2
- package/dist/translations/locales/bnBd.js +0 -81
- package/dist/translations/locales/bnIn.d.ts +0 -2
- package/dist/translations/locales/bnIn.js +0 -81
- package/dist/translations/locales/ca.d.ts +0 -2
- package/dist/translations/locales/ca.js +0 -81
- package/dist/translations/locales/cs.d.ts +0 -2
- package/dist/translations/locales/cs.js +0 -81
- package/dist/translations/locales/da.d.ts +0 -2
- package/dist/translations/locales/da.js +0 -81
- package/dist/translations/locales/de.d.ts +0 -2
- package/dist/translations/locales/de.js +0 -81
- package/dist/translations/locales/en.d.ts +0 -2
- package/dist/translations/locales/en.js +0 -81
- package/dist/translations/locales/es.d.ts +0 -2
- package/dist/translations/locales/es.js +0 -81
- package/dist/translations/locales/et.d.ts +0 -2
- package/dist/translations/locales/et.js +0 -81
- package/dist/translations/locales/fa.d.ts +0 -2
- package/dist/translations/locales/fa.js +0 -81
- package/dist/translations/locales/fr.d.ts +0 -2
- package/dist/translations/locales/fr.js +0 -81
- package/dist/translations/locales/he.d.ts +0 -2
- package/dist/translations/locales/he.js +0 -81
- package/dist/translations/locales/hr.d.ts +0 -2
- package/dist/translations/locales/hr.js +0 -81
- package/dist/translations/locales/hu.d.ts +0 -2
- package/dist/translations/locales/hu.js +0 -81
- package/dist/translations/locales/hy.d.ts +0 -2
- package/dist/translations/locales/hy.js +0 -81
- package/dist/translations/locales/id.d.ts +0 -2
- package/dist/translations/locales/id.js +0 -81
- package/dist/translations/locales/is.d.ts +0 -2
- package/dist/translations/locales/is.js +0 -81
- package/dist/translations/locales/it.d.ts +0 -2
- package/dist/translations/locales/it.js +0 -81
- package/dist/translations/locales/ja.d.ts +0 -2
- package/dist/translations/locales/ja.js +0 -81
- package/dist/translations/locales/ko.d.ts +0 -2
- package/dist/translations/locales/ko.js +0 -81
- package/dist/translations/locales/lt.d.ts +0 -2
- package/dist/translations/locales/lt.js +0 -81
- package/dist/translations/locales/lv.d.ts +0 -2
- package/dist/translations/locales/lv.js +0 -81
- package/dist/translations/locales/my.d.ts +0 -2
- package/dist/translations/locales/my.js +0 -81
- package/dist/translations/locales/nb.d.ts +0 -2
- package/dist/translations/locales/nb.js +0 -81
- package/dist/translations/locales/nl.d.ts +0 -2
- package/dist/translations/locales/nl.js +0 -81
- package/dist/translations/locales/pl.d.ts +0 -2
- package/dist/translations/locales/pl.js +0 -81
- package/dist/translations/locales/pt.d.ts +0 -2
- package/dist/translations/locales/pt.js +0 -81
- package/dist/translations/locales/ro.d.ts +0 -2
- package/dist/translations/locales/ro.js +0 -81
- package/dist/translations/locales/rs.d.ts +0 -2
- package/dist/translations/locales/rs.js +0 -81
- package/dist/translations/locales/rsLatin.d.ts +0 -2
- package/dist/translations/locales/rsLatin.js +0 -81
- package/dist/translations/locales/ru.d.ts +0 -2
- package/dist/translations/locales/ru.js +0 -81
- package/dist/translations/locales/sk.d.ts +0 -2
- package/dist/translations/locales/sk.js +0 -81
- package/dist/translations/locales/sl.d.ts +0 -2
- package/dist/translations/locales/sl.js +0 -81
- package/dist/translations/locales/sv.d.ts +0 -2
- package/dist/translations/locales/sv.js +0 -81
- package/dist/translations/locales/ta.d.ts +0 -2
- package/dist/translations/locales/ta.js +0 -81
- package/dist/translations/locales/th.d.ts +0 -2
- package/dist/translations/locales/th.js +0 -81
- package/dist/translations/locales/tr.d.ts +0 -2
- package/dist/translations/locales/tr.js +0 -81
- package/dist/translations/locales/uk.d.ts +0 -2
- package/dist/translations/locales/uk.js +0 -81
- package/dist/translations/locales/vi.d.ts +0 -2
- package/dist/translations/locales/vi.js +0 -81
- package/dist/translations/locales/zh.d.ts +0 -2
- package/dist/translations/locales/zh.js +0 -81
- package/dist/translations/locales/zhTw.d.ts +0 -2
- package/dist/translations/locales/zhTw.js +0 -81
- package/dist/translations/types.d.ts +0 -87
- package/dist/translations/types.js +0 -1
- package/dist/types.d.ts +0 -192
- package/dist/types.js +0 -1
- package/dist/ui/createUiPlugin.d.ts +0 -14
- package/dist/ui/createUiPlugin.js +0 -28
- package/dist/ui/html.js +0 -8
- package/dist/ui/scalar.d.ts +0 -1
- package/dist/ui/scalar.js +0 -12
- package/dist/ui/swagger.d.ts +0 -1
- package/dist/ui/swagger.js +0 -12
- package/dist/utils.js +0 -13
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entitySchemas.js","names":[],"sources":["../../../src/server/spec/entitySchemas.ts"],"sourcesContent":["import { getTranslation } from '@payloadcms/translations'\nimport { entityToJSONSchema } from 'payload'\nimport type { Block, Field, SanitizedConfig, SchemaVariant } from 'payload'\n\nimport { makeT } from '@/shared/translations/index.js'\nimport type { BuildContext, Entity, IDType, Schema } from '@/shared/types/index.js'\nimport { deepMerge, isPlainObject } from '@/shared/utils.js'\n\nimport { AUTH_FIELDS, flattenFields } from './fields.js'\nimport { rewriteRefs } from './names.js'\n\nconst READ_HIDDEN_FIELDS = new Set<string>([...AUTH_FIELDS, 'collection'])\n\nconst stripInterfaceName = <T>(entity: T): T => {\n const { interfaceName: _omit, ...rest } = entity as T & { interfaceName?: string }\n return rest as T\n}\n\nconst toComponentSchema = ({\n config,\n source,\n idType,\n defs = new Map(),\n variant,\n}: {\n config: SanitizedConfig\n source: Entity | Block\n idType: IDType\n defs?: Map<string, unknown>\n variant?: SchemaVariant\n}): Schema => {\n const jsonSchema = entityToJSONSchema(\n config,\n source as never,\n defs as never,\n idType,\n new Set(),\n undefined,\n undefined,\n undefined,\n variant,\n )\n const blockSlugs = new Set((config.blocks ?? []).map((b) => b.slug))\n const schema = rewriteRefs(jsonSchema as never, blockSlugs, defs) as unknown as Schema\n delete schema.title\n return schema\n}\n\nconst fieldOpenapi = (field: Field): Record<string, unknown> | undefined => {\n const meta = (field as { custom?: { openapi?: unknown } }).custom?.openapi\n return isPlainObject(meta) ? meta : undefined\n}\n\nconst isLocaleKeyed = (value: unknown, ctx: BuildContext): value is Record<string, string> => {\n if (!isPlainObject(value)) return false\n const keys = Object.keys(value)\n return (\n keys.length > 0 &&\n keys.every((k) => ctx.locales.includes(k)) &&\n Object.values(value).every((v) => typeof v === 'string')\n )\n}\n\nconst LOCALIZABLE_KEYS = new Set(['description', 'title', 'summary'])\n\nconst resolveTextValue = (value: unknown, ctx: BuildContext): string | undefined => {\n if (typeof value === 'function') {\n try {\n const result = (value as (args: { t: unknown; i18n: unknown }) => unknown)({ t: ctx.i18n.t, i18n: ctx.i18n })\n return typeof result === 'string' && result.length > 0 ? result : undefined\n } catch {\n return undefined\n }\n }\n if (isLocaleKeyed(value, ctx)) return getTranslation(value, ctx.i18n)\n return undefined\n}\n\nexport const resolveLocalizedStrings = (value: unknown, ctx: BuildContext): unknown => {\n if (!isPlainObject(value)) return value\n const out: Record<string, unknown> = {}\n for (const [k, v] of Object.entries(value)) {\n if (LOCALIZABLE_KEYS.has(k)) {\n const resolved = resolveTextValue(v, ctx)\n if (resolved !== undefined) out[k] = resolved\n else if (typeof v !== 'function') out[k] = resolveLocalizedStrings(v, ctx)\n continue\n }\n out[k] = resolveLocalizedStrings(v, ctx)\n }\n return out\n}\n\nconst applyFieldOverrides = ({ schema, fields, ctx }: { schema: Schema; fields: Field[]; ctx: BuildContext }): void => {\n if (!schema.properties) return\n for (const field of flattenFields(fields)) {\n const name = 'name' in field ? field.name : undefined\n const override = fieldOpenapi(field)\n if (!name || !override) continue\n const current = schema.properties[name]\n if (isPlainObject(current)) {\n const resolved = resolveLocalizedStrings(override, ctx) as Record<string, unknown>\n schema.properties[name] = deepMerge(current, resolved) as Schema\n }\n }\n}\n\nconst isRef = (value: unknown): value is { $ref: string } => isPlainObject(value) && typeof value.$ref === 'string'\n\nconst isBlockBranch = (branch: unknown): boolean => {\n if (isRef(branch)) return branch.$ref.startsWith('#/components/schemas/Block')\n return isPlainObject(branch) && isPlainObject(branch.properties) && 'blockType' in branch.properties\n}\n\nconst addBlockDiscriminators = (node: unknown): void => {\n if (Array.isArray(node)) {\n for (const item of node) addBlockDiscriminators(item)\n return\n }\n if (!isPlainObject(node)) return\n const oneOf = node.oneOf\n if (Array.isArray(oneOf) && oneOf.length > 0 && oneOf.every(isBlockBranch)) {\n ;(node as Schema).discriminator = { propertyName: 'blockType' }\n }\n for (const value of Object.values(node)) addBlockDiscriminators(value)\n}\n\nconst fixPolymorphicJoinRequired = (node: unknown): void => {\n if (Array.isArray(node)) {\n for (const item of node) fixPolymorphicJoinRequired(item)\n return\n }\n if (!isPlainObject(node)) return\n const { properties, required } = node as Schema\n if (isPlainObject(properties) && 'relationTo' in properties && Array.isArray(required)) {\n ;(node as Schema).required = required.map((r: string) => (r === 'collectionSlug' ? 'relationTo' : r))\n }\n for (const value of Object.values(node)) fixPolymorphicJoinRequired(value)\n}\n\nconst markLocalizedFields = ({ schema, fields, ctx }: { schema: Schema; fields: Field[]; ctx: BuildContext }): void => {\n if (!schema.properties || ctx.locales.length === 0) return\n for (const field of flattenFields(fields)) {\n if (!('localized' in field) || !field.localized) continue\n const name = 'name' in field ? field.name : undefined\n if (!name || !(name in schema.properties)) continue\n const single = schema.properties[name] as Schema\n schema.properties[name] = {\n oneOf: [\n single,\n {\n type: 'object',\n description: makeT(ctx.i18n)('schemaPerLocale'),\n properties: Object.fromEntries(ctx.locales.map((l) => [l, single])),\n },\n ],\n }\n }\n}\n\nconst removeProps = (schema: Schema, names: Iterable<string>): void => {\n if (!schema.properties) return\n for (const name of names) delete schema.properties[name]\n if (Array.isArray(schema.required)) {\n const drop = new Set(names)\n schema.required = schema.required.filter((r: string) => !drop.has(r))\n }\n}\n\nconst isConstantDeny = (access: unknown): boolean => {\n if (typeof access !== 'function' || access.length > 0) return false\n try {\n return access() === false\n } catch {\n return false\n }\n}\n\nconst deniedWrites = (fields: Field[], operation: 'create' | 'update'): string[] =>\n flattenFields(fields)\n .filter((field) => 'name' in field && 'access' in field && isConstantDeny(field.access?.[operation]))\n .map((field) => (field as { name: string }).name)\n\nconst cloneSchema = (schema: Schema): Schema => ({\n ...schema,\n properties: { ...schema.properties },\n required: Array.isArray(schema.required) ? [...schema.required] : schema.required,\n})\n\nexport interface EntitySchemas {\n read: Schema\n create: Schema\n update: Schema\n}\n\nexport const buildEntitySchemas = async ({\n entity,\n config,\n ctx,\n}: {\n entity: Entity\n config: SanitizedConfig\n ctx: BuildContext\n}): Promise<EntitySchemas> => {\n const source = stripInterfaceName(entity)\n const defs = new Map<string, unknown>()\n const idType = ctx.defaultIDType\n const read = toComponentSchema({ config, source, idType, defs })\n const write = toComponentSchema({ config, source, idType, defs, variant: 'input' })\n const isAuth = 'auth' in entity && Boolean(entity.auth)\n\n for (const schema of [read, write]) {\n if (isAuth) removeProps(schema, READ_HIDDEN_FIELDS)\n applyFieldOverrides({ schema, fields: entity.fields, ctx })\n addBlockDiscriminators(schema)\n }\n fixPolymorphicJoinRequired(read)\n\n const create = cloneSchema(write)\n if (isAuth && create.properties) {\n create.properties.password = { type: 'string' }\n create.required = [...new Set([...(create.required ?? []), 'password'])]\n }\n\n removeProps(create, deniedWrites(entity.fields, 'create'))\n\n const update = cloneSchema(write)\n removeProps(update, deniedWrites(entity.fields, 'update'))\n delete update.required\n if (update.properties) delete update.properties.id\n if (isAuth && update.properties) {\n update.properties.password = { type: 'string' }\n }\n\n markLocalizedFields({ schema: read, fields: entity.fields, ctx })\n\n return { read, create, update }\n}\n\nexport const buildBlockSchema = (block: Block, config: SanitizedConfig): Schema => {\n const schema = toComponentSchema({ config, source: stripInterfaceName(block), idType: 'text' })\n const blockType: Schema = { type: 'string', enum: [block.slug] }\n const properties = { ...schema.properties, blockType }\n const required = [...new Set(['blockType', ...(schema.required ?? [])])]\n return { ...schema, type: 'object', properties, required }\n}\n"],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { Field } from "payload";
|
|
2
2
|
export declare const isHiddenField: (field: Field) => boolean;
|
|
3
3
|
export declare const AUTH_FIELDS: Set<string>;
|
|
4
4
|
export declare const flattenFields: (fields: Field[]) => Field[];
|
|
5
5
|
export declare const exposableFields: (fields: Field[]) => Field[];
|
|
6
|
+
//# sourceMappingURL=fields.d.ts.map
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const isHiddenField = (field) => "hidden" in field && field.hidden === true;
|
|
2
|
+
const AUTH_FIELDS = /* @__PURE__ */ new Set([
|
|
3
|
+
"salt",
|
|
4
|
+
"hash",
|
|
5
|
+
"password",
|
|
6
|
+
"resetPasswordToken",
|
|
7
|
+
"resetPasswordExpiration",
|
|
8
|
+
"loginAttempts",
|
|
9
|
+
"lockUntil",
|
|
10
|
+
"sessions"
|
|
11
|
+
]);
|
|
12
|
+
const hasName = (field) => "name" in field && typeof field.name === "string";
|
|
13
|
+
const flattenFields = (fields) => {
|
|
14
|
+
const out = [];
|
|
15
|
+
for (const field of fields) {
|
|
16
|
+
if (field.type === "ui") continue;
|
|
17
|
+
if (field.type === "row" || field.type === "collapsible") {
|
|
18
|
+
out.push(...flattenFields(field.fields));
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
if (field.type === "tabs") {
|
|
22
|
+
for (const tab of field.tabs) {
|
|
23
|
+
const tabName = hasName(tab) ? tab.name : void 0;
|
|
24
|
+
if (tabName) out.push({
|
|
25
|
+
type: "group",
|
|
26
|
+
name: tabName,
|
|
27
|
+
fields: tab.fields
|
|
28
|
+
});
|
|
29
|
+
else out.push(...flattenFields(tab.fields));
|
|
30
|
+
}
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (field.type === "group" && !hasName(field)) {
|
|
34
|
+
out.push(...flattenFields(field.fields));
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
out.push(field);
|
|
38
|
+
}
|
|
39
|
+
return out;
|
|
40
|
+
};
|
|
41
|
+
const exposableFields = (fields) => flattenFields(fields).filter((field) => {
|
|
42
|
+
const name = "name" in field ? field.name : void 0;
|
|
43
|
+
return Boolean(name) && !isHiddenField(field) && !AUTH_FIELDS.has(name);
|
|
44
|
+
});
|
|
45
|
+
export { AUTH_FIELDS, exposableFields, flattenFields, isHiddenField };
|
|
46
|
+
|
|
47
|
+
//# sourceMappingURL=fields.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fields.js","names":[],"sources":["../../../src/server/spec/fields.ts"],"sourcesContent":["import type { Field, NamedTab } from 'payload'\n\nexport const isHiddenField = (field: Field): boolean => 'hidden' in field && field.hidden === true\n\nexport const AUTH_FIELDS = new Set([\n 'salt',\n 'hash',\n 'password',\n 'resetPasswordToken',\n 'resetPasswordExpiration',\n 'loginAttempts',\n 'lockUntil',\n 'sessions',\n])\n\nconst hasName = (field: object): boolean => 'name' in field && typeof (field as { name?: unknown }).name === 'string'\n\nexport const flattenFields = (fields: Field[]): Field[] => {\n const out: Field[] = []\n for (const field of fields) {\n if (field.type === 'ui') continue\n\n if (field.type === 'row' || field.type === 'collapsible') {\n out.push(...flattenFields(field.fields))\n continue\n }\n\n if (field.type === 'tabs') {\n for (const tab of field.tabs) {\n const tabName = hasName(tab) ? (tab as NamedTab).name : undefined\n if (tabName) {\n out.push({ type: 'group', name: tabName, fields: tab.fields } as unknown as Field)\n } else {\n out.push(...flattenFields(tab.fields))\n }\n }\n continue\n }\n\n if (field.type === 'group' && !hasName(field)) {\n out.push(...flattenFields(field.fields))\n continue\n }\n\n out.push(field)\n }\n return out\n}\n\nexport const exposableFields = (fields: Field[]): Field[] =>\n flattenFields(fields).filter((field) => {\n const name = 'name' in field ? (field as { name?: string }).name : undefined\n return Boolean(name) && !isHiddenField(field) && !AUTH_FIELDS.has(name as string)\n })\n"],"mappings":"AAEA,MAAa,iBAAiB,UAA0B,YAAY,SAAS,MAAM,WAAW;AAE9F,MAAa,8BAAc,IAAI,IAAI;CACjC;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AAED,MAAM,WAAW,UAA2B,UAAU,SAAS,OAAQ,MAA6B,SAAS;AAE7G,MAAa,iBAAiB,WAA6B;CACzD,MAAM,MAAe,CAAC;CACtB,KAAK,MAAM,SAAS,QAAQ;EAC1B,IAAI,MAAM,SAAS,MAAM;EAEzB,IAAI,MAAM,SAAS,SAAS,MAAM,SAAS,eAAe;GACxD,IAAI,KAAK,GAAG,cAAc,MAAM,MAAM,CAAC;GACvC;EACF;EAEA,IAAI,MAAM,SAAS,QAAQ;GACzB,KAAK,MAAM,OAAO,MAAM,MAAM;IAC5B,MAAM,UAAU,QAAQ,GAAG,IAAK,IAAiB,OAAO,KAAA;IACxD,IAAI,SACF,IAAI,KAAK;KAAE,MAAM;KAAS,MAAM;KAAS,QAAQ,IAAI;IAAO,CAAqB;SAEjF,IAAI,KAAK,GAAG,cAAc,IAAI,MAAM,CAAC;GAEzC;GACA;EACF;EAEA,IAAI,MAAM,SAAS,WAAW,CAAC,QAAQ,KAAK,GAAG;GAC7C,IAAI,KAAK,GAAG,cAAc,MAAM,MAAM,CAAC;GACvC;EACF;EAEA,IAAI,KAAK,KAAK;CAChB;CACA,OAAO;AACT;AAEA,MAAa,mBAAmB,WAC9B,cAAc,MAAM,CAAC,CAAC,QAAQ,UAAU;CACtC,MAAM,OAAO,UAAU,QAAS,MAA4B,OAAO,KAAA;CACnE,OAAO,QAAQ,IAAI,KAAK,CAAC,cAAc,KAAK,KAAK,CAAC,YAAY,IAAI,IAAc;AAClF,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { OperationKind, ResolvedFilters } from "../../shared/types/index.js";
|
|
2
|
+
import { SanitizedCollectionConfig, SanitizedGlobalConfig } from "payload";
|
|
3
|
+
import { PathsObject } from "@scalar/openapi-types/3.2";
|
|
4
|
+
export declare const shouldIncludeCollection: (collection: SanitizedCollectionConfig, filters: ResolvedFilters) => boolean;
|
|
5
|
+
export declare const shouldIncludeGlobal: (global: SanitizedGlobalConfig, filters: ResolvedFilters) => boolean;
|
|
6
|
+
export declare const PLUGIN_KEY = "x-payload-plugin";
|
|
7
|
+
export declare const operationPlugin: (operation: unknown, plugin: string | undefined) => string | undefined;
|
|
8
|
+
export declare const stripPluginKeys: (paths: PathsObject) => PathsObject;
|
|
9
|
+
export declare const filterOperations: ({ paths, slug, kind, plugin, filters }: {
|
|
10
|
+
paths: PathsObject;
|
|
11
|
+
slug?: string;
|
|
12
|
+
kind: OperationKind;
|
|
13
|
+
plugin?: string;
|
|
14
|
+
filters: ResolvedFilters;
|
|
15
|
+
}) => Promise<PathsObject>;
|
|
16
|
+
//# sourceMappingURL=filters.d.ts.map
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
const SYSTEM_COLLECTIONS = /* @__PURE__ */ new Set([
|
|
2
|
+
"payload-jobs",
|
|
3
|
+
"payload-locked-documents",
|
|
4
|
+
"payload-preferences",
|
|
5
|
+
"payload-migrations",
|
|
6
|
+
"payload-kv",
|
|
7
|
+
"payload-llm-instructions",
|
|
8
|
+
"payload-query-presets"
|
|
9
|
+
]);
|
|
10
|
+
const SYSTEM_GLOBALS = /* @__PURE__ */ new Set(["payload-jobs-stats"]);
|
|
11
|
+
const HTTP_METHODS = [
|
|
12
|
+
"get",
|
|
13
|
+
"post",
|
|
14
|
+
"patch",
|
|
15
|
+
"put",
|
|
16
|
+
"delete"
|
|
17
|
+
];
|
|
18
|
+
const matchesEntity = (matcher, { slug, kind }) => {
|
|
19
|
+
if (typeof matcher === "string") return matcher === slug;
|
|
20
|
+
if (matcher instanceof RegExp) return matcher.test(slug);
|
|
21
|
+
return matcher.kind === kind && matcher.slug === slug;
|
|
22
|
+
};
|
|
23
|
+
const anyMatch = (matchers, entity) => matchers.some((m) => matchesEntity(m, entity));
|
|
24
|
+
const isHiddenCollection = (collection) => {
|
|
25
|
+
if (collection.hidden === true) return true;
|
|
26
|
+
const hidden = collection.admin?.hidden;
|
|
27
|
+
if (typeof hidden === "function") try {
|
|
28
|
+
return hidden({ user: null }) === true;
|
|
29
|
+
} catch {
|
|
30
|
+
return false;
|
|
31
|
+
}
|
|
32
|
+
return hidden === true;
|
|
33
|
+
};
|
|
34
|
+
const passesIncludeExclude = (entity, filters) => {
|
|
35
|
+
if (filters.include.length > 0 && !anyMatch(filters.include, entity)) return false;
|
|
36
|
+
if (anyMatch(filters.exclude, entity)) return false;
|
|
37
|
+
return true;
|
|
38
|
+
};
|
|
39
|
+
const shouldIncludeCollection = (collection, filters) => {
|
|
40
|
+
const { slug } = collection;
|
|
41
|
+
if (SYSTEM_COLLECTIONS.has(slug) && !filters.includeSystem) return false;
|
|
42
|
+
if (!filters.includeHidden && isHiddenCollection(collection)) return false;
|
|
43
|
+
return passesIncludeExclude({
|
|
44
|
+
slug,
|
|
45
|
+
kind: "collection"
|
|
46
|
+
}, filters);
|
|
47
|
+
};
|
|
48
|
+
const shouldIncludeGlobal = (global, filters) => {
|
|
49
|
+
if (SYSTEM_GLOBALS.has(global.slug) && !filters.includeSystem) return false;
|
|
50
|
+
return passesIncludeExclude({
|
|
51
|
+
slug: global.slug,
|
|
52
|
+
kind: "global"
|
|
53
|
+
}, filters);
|
|
54
|
+
};
|
|
55
|
+
const ruleMatchesMethod = (rule, method) => {
|
|
56
|
+
if (rule.method === void 0) return true;
|
|
57
|
+
return Array.isArray(rule.method) ? rule.method.includes(method) : rule.method === method;
|
|
58
|
+
};
|
|
59
|
+
const matchesOptional = (matcher, value) => {
|
|
60
|
+
if (matcher === void 0) return true;
|
|
61
|
+
if (value === void 0) return false;
|
|
62
|
+
return matcher instanceof RegExp ? matcher.test(value) : matcher === value;
|
|
63
|
+
};
|
|
64
|
+
const ruleMatches = (rule, { method, slug, kind, path, plugin }) => ruleMatchesMethod(rule, method) && matchesOptional(rule.slug, slug) && matchesOptional(rule.plugin, plugin) && (rule.kind === void 0 || rule.kind === kind) && (rule.path === void 0 || rule.path.test(path));
|
|
65
|
+
const PLUGIN_KEY = "x-payload-plugin";
|
|
66
|
+
const operationPlugin = (operation, plugin) => {
|
|
67
|
+
const marked = operation?.[PLUGIN_KEY];
|
|
68
|
+
return plugin ?? (typeof marked === "string" ? marked : void 0);
|
|
69
|
+
};
|
|
70
|
+
const stripPluginKeys = (paths) => {
|
|
71
|
+
for (const item of Object.values(paths)) for (const method of HTTP_METHODS) delete item[method]?.[PLUGIN_KEY];
|
|
72
|
+
return paths;
|
|
73
|
+
};
|
|
74
|
+
const isOperationExcluded = async (filters, op) => {
|
|
75
|
+
for (const rule of filters.excludeOperations) if (typeof rule === "function" ? await rule(op) === true : ruleMatches(rule, op)) return true;
|
|
76
|
+
return false;
|
|
77
|
+
};
|
|
78
|
+
const filterOperations = async ({ paths, slug, kind, plugin, filters }) => {
|
|
79
|
+
if (filters.excludeOperations.length === 0) return paths;
|
|
80
|
+
for (const [path, item] of Object.entries(paths)) {
|
|
81
|
+
if (!item) continue;
|
|
82
|
+
let remaining = 0;
|
|
83
|
+
const ops = item;
|
|
84
|
+
for (const method of HTTP_METHODS) {
|
|
85
|
+
if (!ops[method]) continue;
|
|
86
|
+
const op = {
|
|
87
|
+
method,
|
|
88
|
+
path,
|
|
89
|
+
slug,
|
|
90
|
+
kind,
|
|
91
|
+
plugin: operationPlugin(ops[method], plugin)
|
|
92
|
+
};
|
|
93
|
+
if (await isOperationExcluded(filters, op)) delete ops[method];
|
|
94
|
+
else remaining += 1;
|
|
95
|
+
}
|
|
96
|
+
if (remaining === 0) delete paths[path];
|
|
97
|
+
}
|
|
98
|
+
return paths;
|
|
99
|
+
};
|
|
100
|
+
export { PLUGIN_KEY, filterOperations, operationPlugin, shouldIncludeCollection, shouldIncludeGlobal, stripPluginKeys };
|
|
101
|
+
|
|
102
|
+
//# sourceMappingURL=filters.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filters.js","names":[],"sources":["../../../src/server/spec/filters.ts"],"sourcesContent":["import type { PathsObject } from '@scalar/openapi-types/3.2'\nimport type { SanitizedCollectionConfig, SanitizedGlobalConfig } from 'payload'\n\nimport type {\n EntityKind,\n EntityMatcher,\n HttpMethod,\n OperationContext,\n OperationKind,\n OperationRule,\n ResolvedFilters,\n} from '@/shared/types/index.js'\n\nconst SYSTEM_COLLECTIONS = new Set([\n 'payload-jobs',\n 'payload-locked-documents',\n 'payload-preferences',\n 'payload-migrations',\n 'payload-kv',\n 'payload-llm-instructions',\n 'payload-query-presets',\n])\n\nconst SYSTEM_GLOBALS = new Set(['payload-jobs-stats'])\n\nconst HTTP_METHODS: HttpMethod[] = ['get', 'post', 'patch', 'put', 'delete']\n\ninterface EntityRef {\n slug: string\n kind: EntityKind\n}\n\nconst matchesEntity = (matcher: EntityMatcher, { slug, kind }: EntityRef): boolean => {\n if (typeof matcher === 'string') return matcher === slug\n if (matcher instanceof RegExp) return matcher.test(slug)\n return matcher.kind === kind && matcher.slug === slug\n}\n\nconst anyMatch = (matchers: EntityMatcher[], entity: EntityRef): boolean =>\n matchers.some((m) => matchesEntity(m, entity))\n\nconst isHiddenCollection = (collection: SanitizedCollectionConfig): boolean => {\n if ((collection as { hidden?: unknown }).hidden === true) return true\n const hidden = collection.admin?.hidden\n if (typeof hidden === 'function') {\n try {\n return hidden({ user: null } as never) === true\n } catch {\n return false\n }\n }\n return hidden === true\n}\n\nconst passesIncludeExclude = (entity: EntityRef, filters: ResolvedFilters): boolean => {\n if (filters.include.length > 0 && !anyMatch(filters.include, entity)) return false\n if (anyMatch(filters.exclude, entity)) return false\n return true\n}\n\nexport const shouldIncludeCollection = (collection: SanitizedCollectionConfig, filters: ResolvedFilters): boolean => {\n const { slug } = collection\n if (SYSTEM_COLLECTIONS.has(slug) && !filters.includeSystem) return false\n if (!filters.includeHidden && isHiddenCollection(collection)) return false\n return passesIncludeExclude({ slug, kind: 'collection' }, filters)\n}\n\nexport const shouldIncludeGlobal = (global: SanitizedGlobalConfig, filters: ResolvedFilters): boolean => {\n if (SYSTEM_GLOBALS.has(global.slug) && !filters.includeSystem) return false\n return passesIncludeExclude({ slug: global.slug, kind: 'global' }, filters)\n}\n\nconst ruleMatchesMethod = (rule: OperationRule, method: HttpMethod): boolean => {\n if (rule.method === undefined) return true\n return Array.isArray(rule.method) ? rule.method.includes(method) : rule.method === method\n}\n\nconst matchesOptional = (matcher: string | RegExp | undefined, value: string | undefined): boolean => {\n if (matcher === undefined) return true\n if (value === undefined) return false\n return matcher instanceof RegExp ? matcher.test(value) : matcher === value\n}\n\nconst ruleMatches = (rule: OperationRule, { method, slug, kind, path, plugin }: OperationContext): boolean =>\n ruleMatchesMethod(rule, method) &&\n matchesOptional(rule.slug, slug) &&\n matchesOptional(rule.plugin, plugin) &&\n (rule.kind === undefined || rule.kind === kind) &&\n (rule.path === undefined || rule.path.test(path))\n\nexport const PLUGIN_KEY = 'x-payload-plugin'\n\nexport const operationPlugin = (operation: unknown, plugin: string | undefined): string | undefined => {\n const marked = (operation as Record<string, unknown> | undefined)?.[PLUGIN_KEY]\n return plugin ?? (typeof marked === 'string' ? marked : undefined)\n}\n\nexport const stripPluginKeys = (paths: PathsObject): PathsObject => {\n for (const item of Object.values(paths)) {\n for (const method of HTTP_METHODS)\n delete (item as Record<HttpMethod, Record<string, unknown> | undefined>)[method]?.[PLUGIN_KEY]\n }\n return paths\n}\n\nconst isOperationExcluded = async (filters: ResolvedFilters, op: OperationContext): Promise<boolean> => {\n for (const rule of filters.excludeOperations) {\n if (typeof rule === 'function' ? (await rule(op)) === true : ruleMatches(rule, op)) return true\n }\n return false\n}\n\nexport const filterOperations = async ({\n paths,\n slug,\n kind,\n plugin,\n filters,\n}: {\n paths: PathsObject\n slug?: string\n kind: OperationKind\n plugin?: string\n filters: ResolvedFilters\n}): Promise<PathsObject> => {\n if (filters.excludeOperations.length === 0) return paths\n\n for (const [path, item] of Object.entries(paths)) {\n if (!item) continue\n let remaining = 0\n const ops = item as Record<HttpMethod, unknown>\n for (const method of HTTP_METHODS) {\n if (!ops[method]) continue\n const op = { method, path, slug, kind, plugin: operationPlugin(ops[method], plugin) }\n if (await isOperationExcluded(filters, op)) {\n delete ops[method]\n } else {\n remaining += 1\n }\n }\n if (remaining === 0) delete paths[path]\n }\n return paths\n}\n"],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { BuildContext } from "../../shared/types/index.js";
|
|
2
|
+
import { SanitizedCollectionConfig } from "payload";
|
|
3
|
+
import { PathsObject, SchemaObject } from "@scalar/openapi-types/3.2";
|
|
4
|
+
export declare const applyHierarchy: ({ collection, base, paths, schemas, ctx }: {
|
|
5
|
+
collection: SanitizedCollectionConfig;
|
|
6
|
+
base: string;
|
|
7
|
+
paths: PathsObject;
|
|
8
|
+
schemas: Record<string, SchemaObject>;
|
|
9
|
+
ctx: BuildContext;
|
|
10
|
+
}) => void;
|
|
11
|
+
//# sourceMappingURL=hierarchy.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createSchemaName, querySchemaName, updateSchemaName } from "./names.js";
|
|
2
|
+
import { makeT } from "../../shared/translations/index.js";
|
|
3
|
+
const applyHierarchy = ({ collection, base, paths, schemas, ctx }) => {
|
|
4
|
+
const { hierarchy } = collection;
|
|
5
|
+
if (!hierarchy) return;
|
|
6
|
+
const t = makeT(ctx.i18n);
|
|
7
|
+
const pathFields = {
|
|
8
|
+
[hierarchy.slugPathFieldName]: t("schemaHierarchySlugPath"),
|
|
9
|
+
[hierarchy.titlePathFieldName]: t("schemaHierarchyTitlePath")
|
|
10
|
+
};
|
|
11
|
+
const propertiesOf = (name) => {
|
|
12
|
+
const schema = schemas[name];
|
|
13
|
+
return typeof schema === "object" ? schema.properties : void 0;
|
|
14
|
+
};
|
|
15
|
+
const read = propertiesOf(base);
|
|
16
|
+
for (const [name, description] of Object.entries(pathFields)) {
|
|
17
|
+
const current = read?.[name];
|
|
18
|
+
if (read && typeof current === "object") read[name] = {
|
|
19
|
+
...current,
|
|
20
|
+
readOnly: true,
|
|
21
|
+
description
|
|
22
|
+
};
|
|
23
|
+
for (const other of [
|
|
24
|
+
createSchemaName(base),
|
|
25
|
+
updateSchemaName(base),
|
|
26
|
+
querySchemaName(base)
|
|
27
|
+
]) delete propertiesOf(other)?.[name];
|
|
28
|
+
}
|
|
29
|
+
const param = {
|
|
30
|
+
name: "computeHierarchyPaths",
|
|
31
|
+
in: "query",
|
|
32
|
+
description: t("paramComputeHierarchyPaths", {
|
|
33
|
+
slugPath: hierarchy.slugPathFieldName,
|
|
34
|
+
titlePath: hierarchy.titlePathFieldName
|
|
35
|
+
}),
|
|
36
|
+
schema: { type: "boolean" }
|
|
37
|
+
};
|
|
38
|
+
const route = `${ctx.apiRoute}/${collection.slug}`;
|
|
39
|
+
for (const op of [paths[route]?.get, paths[`${route}/{id}`]?.get]) op?.parameters?.push(param);
|
|
40
|
+
};
|
|
41
|
+
export { applyHierarchy };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=hierarchy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hierarchy.js","names":[],"sources":["../../../src/server/spec/hierarchy.ts"],"sourcesContent":["import type { OperationObject, ParameterObject, PathsObject, SchemaObject } from '@scalar/openapi-types/3.2'\nimport type { SanitizedCollectionConfig } from 'payload'\n\nimport { createSchemaName, querySchemaName, updateSchemaName } from '@/server/spec/names.js'\nimport { makeT } from '@/shared/translations/index.js'\nimport type { BuildContext } from '@/shared/types/index.js'\n\nexport const applyHierarchy = ({\n collection,\n base,\n paths,\n schemas,\n ctx,\n}: {\n collection: SanitizedCollectionConfig\n base: string\n paths: PathsObject\n schemas: Record<string, SchemaObject>\n ctx: BuildContext\n}): void => {\n const { hierarchy } = collection\n if (!hierarchy) return\n const t = makeT(ctx.i18n)\n const pathFields = {\n [hierarchy.slugPathFieldName]: t('schemaHierarchySlugPath'),\n [hierarchy.titlePathFieldName]: t('schemaHierarchyTitlePath'),\n }\n\n const propertiesOf = (name: string) => {\n const schema = schemas[name]\n return typeof schema === 'object' ? schema.properties : undefined\n }\n const read = propertiesOf(base)\n for (const [name, description] of Object.entries(pathFields)) {\n const current = read?.[name]\n if (read && typeof current === 'object') read[name] = { ...current, readOnly: true, description }\n for (const other of [createSchemaName(base), updateSchemaName(base), querySchemaName(base)]) {\n delete propertiesOf(other)?.[name]\n }\n }\n\n const param: ParameterObject = {\n name: 'computeHierarchyPaths',\n in: 'query',\n description: t('paramComputeHierarchyPaths', {\n slugPath: hierarchy.slugPathFieldName,\n titlePath: hierarchy.titlePathFieldName,\n }),\n schema: { type: 'boolean' },\n }\n const route = `${ctx.apiRoute}/${collection.slug}`\n for (const op of [paths[route]?.get, paths[`${route}/{id}`]?.get] as (OperationObject | undefined)[]) {\n op?.parameters?.push(param)\n }\n}\n"],"mappings":";;AAOA,MAAa,kBAAkB,EAC7B,YACA,MACA,OACA,SACA,UAOU;CACV,MAAM,EAAE,cAAc;CACtB,IAAI,CAAC,WAAW;CAChB,MAAM,IAAI,MAAM,IAAI,IAAI;CACxB,MAAM,aAAa;GAChB,UAAU,oBAAoB,EAAE,yBAAyB;GACzD,UAAU,qBAAqB,EAAE,0BAA0B;CAC9D;CAEA,MAAM,gBAAgB,SAAiB;EACrC,MAAM,SAAS,QAAQ;EACvB,OAAO,OAAO,WAAW,WAAW,OAAO,aAAa,KAAA;CAC1D;CACA,MAAM,OAAO,aAAa,IAAI;CAC9B,KAAK,MAAM,CAAC,MAAM,gBAAgB,OAAO,QAAQ,UAAU,GAAG;EAC5D,MAAM,UAAU,OAAO;EACvB,IAAI,QAAQ,OAAO,YAAY,UAAU,KAAK,QAAQ;GAAE,GAAG;GAAS,UAAU;GAAM;EAAY;EAChG,KAAK,MAAM,SAAS;GAAC,iBAAiB,IAAI;GAAG,iBAAiB,IAAI;GAAG,gBAAgB,IAAI;EAAC,GACxF,OAAO,aAAa,KAAK,CAAC,GAAG;CAEjC;CAEA,MAAM,QAAyB;EAC7B,MAAM;EACN,IAAI;EACJ,aAAa,EAAE,8BAA8B;GAC3C,UAAU,UAAU;GACpB,WAAW,UAAU;EACvB,CAAC;EACD,QAAQ,EAAE,MAAM,UAAU;CAC5B;CACA,MAAM,QAAQ,GAAG,IAAI,SAAS,GAAG,WAAW;CAC5C,KAAK,MAAM,MAAM,CAAC,MAAM,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,OAAO,EAAE,GAAG,GAC9D,IAAI,YAAY,KAAK,KAAK;AAE9B"}
|
|
@@ -10,5 +10,5 @@ export declare const populateSchemaName: (base: string) => string;
|
|
|
10
10
|
export declare const joinsSchemaName: (base: string) => string;
|
|
11
11
|
export declare const refTo: (name: string) => string;
|
|
12
12
|
type JsonValue = Record<string, unknown> | unknown[] | string | number | boolean | null;
|
|
13
|
-
export declare const rewriteRefs: (node: JsonValue, blockSlugs?: Set<string>) => JsonValue;
|
|
14
|
-
|
|
13
|
+
export declare const rewriteRefs: (node: JsonValue, blockSlugs?: Set<string>, defs?: Map<string, unknown>) => JsonValue;
|
|
14
|
+
//# sourceMappingURL=names.d.ts.map
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { upperFirst } from "../../shared/utils.js";
|
|
2
|
+
const schemaName = (slug) => upperFirst(slug.replace(/-([a-z])/g, (_, c) => c.toUpperCase()));
|
|
3
|
+
const blockSchemaName = (slug) => {
|
|
4
|
+
const stripped = slug.replace(/^block[-_]?/i, "").replace(/[-_]?block$/i, "");
|
|
5
|
+
return `Block${schemaName(stripped || slug)}`;
|
|
6
|
+
};
|
|
7
|
+
const globalSchemaName = (slug) => `Global${schemaName(slug)}`;
|
|
8
|
+
const listSchemaName = (base) => `${base}List`;
|
|
9
|
+
const createSchemaName = (base) => `${base}Create`;
|
|
10
|
+
const updateSchemaName = (base) => `${base}Update`;
|
|
11
|
+
const querySchemaName = (base) => `${base}QueryOperations`;
|
|
12
|
+
const selectSchemaName = (base) => `${base}Select`;
|
|
13
|
+
const populateSchemaName = (base) => `${base}Populate`;
|
|
14
|
+
const joinsSchemaName = (base) => `${base}Joins`;
|
|
15
|
+
const refTo = (name) => `#/components/schemas/${name}`;
|
|
16
|
+
const REF = /^#\/(?:definitions|\$defs|components\/schemas)\/(.+)$/;
|
|
17
|
+
const findBlockSlug = (name, blockSlugs) => [...blockSlugs].find((s) => s === name || schemaName(s) === schemaName(name));
|
|
18
|
+
const normalizeRef = (ref, blockSlugs) => {
|
|
19
|
+
const match = REF.exec(ref);
|
|
20
|
+
if (!match) return ref;
|
|
21
|
+
const captured = match[1];
|
|
22
|
+
const blockSlug = findBlockSlug(captured, blockSlugs);
|
|
23
|
+
if (blockSlug) return `#/components/schemas/${blockSchemaName(blockSlug)}`;
|
|
24
|
+
return `#/components/schemas/${schemaName(captured)}`;
|
|
25
|
+
};
|
|
26
|
+
const rewriteRefs = (node, blockSlugs = /* @__PURE__ */ new Set(), defs = /* @__PURE__ */ new Map()) => {
|
|
27
|
+
if (Array.isArray(node)) return node.map((item) => rewriteRefs(item, blockSlugs, defs));
|
|
28
|
+
if (node && typeof node === "object") {
|
|
29
|
+
const { $ref, ...rest } = node;
|
|
30
|
+
const name = typeof $ref === "string" ? REF.exec($ref)?.[1] : void 0;
|
|
31
|
+
if (name && defs.has(name) && !findBlockSlug(name, blockSlugs)) return rewriteRefs({
|
|
32
|
+
...defs.get(name),
|
|
33
|
+
...rest
|
|
34
|
+
}, blockSlugs, defs);
|
|
35
|
+
const out = {};
|
|
36
|
+
for (const [key, value] of Object.entries(node)) out[key] = key === "$ref" && typeof value === "string" ? normalizeRef(value, blockSlugs) : rewriteRefs(value, blockSlugs, defs);
|
|
37
|
+
return out;
|
|
38
|
+
}
|
|
39
|
+
return node;
|
|
40
|
+
};
|
|
41
|
+
export { blockSchemaName, createSchemaName, globalSchemaName, joinsSchemaName, listSchemaName, populateSchemaName, querySchemaName, refTo, rewriteRefs, schemaName, selectSchemaName, updateSchemaName };
|
|
42
|
+
|
|
43
|
+
//# sourceMappingURL=names.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"names.js","names":[],"sources":["../../../src/server/spec/names.ts"],"sourcesContent":["import { upperFirst } from '@/shared/utils.js'\n\nexport const schemaName = (slug: string): string =>\n upperFirst(slug.replace(/-([a-z])/g, (_, c: string) => c.toUpperCase()))\n\nexport const blockSchemaName = (slug: string): string => {\n const stripped = slug.replace(/^block[-_]?/i, '').replace(/[-_]?block$/i, '')\n return `Block${schemaName(stripped || slug)}`\n}\n\nexport const globalSchemaName = (slug: string): string => `Global${schemaName(slug)}`\n\nexport const listSchemaName = (base: string): string => `${base}List`\nexport const createSchemaName = (base: string): string => `${base}Create`\nexport const updateSchemaName = (base: string): string => `${base}Update`\nexport const querySchemaName = (base: string): string => `${base}QueryOperations`\nexport const selectSchemaName = (base: string): string => `${base}Select`\nexport const populateSchemaName = (base: string): string => `${base}Populate`\nexport const joinsSchemaName = (base: string): string => `${base}Joins`\n\nexport const refTo = (name: string): string => `#/components/schemas/${name}`\n\ntype JsonValue = Record<string, unknown> | unknown[] | string | number | boolean | null\n\nconst REF = /^#\\/(?:definitions|\\$defs|components\\/schemas)\\/(.+)$/\n\nconst findBlockSlug = (name: string, blockSlugs: Set<string>): string | undefined =>\n [...blockSlugs].find((s) => s === name || schemaName(s) === schemaName(name))\n\nconst normalizeRef = (ref: string, blockSlugs: Set<string>): string => {\n const match = REF.exec(ref)\n if (!match) return ref\n const captured = match[1]!\n const blockSlug = findBlockSlug(captured, blockSlugs)\n if (blockSlug) return `#/components/schemas/${blockSchemaName(blockSlug)}`\n return `#/components/schemas/${schemaName(captured)}`\n}\n\nexport const rewriteRefs = (\n node: JsonValue,\n blockSlugs: Set<string> = new Set(),\n defs: Map<string, unknown> = new Map(),\n): JsonValue => {\n if (Array.isArray(node)) return node.map((item) => rewriteRefs(item as JsonValue, blockSlugs, defs))\n if (node && typeof node === 'object') {\n const { $ref, ...rest } = node\n const name = typeof $ref === 'string' ? REF.exec($ref)?.[1] : undefined\n if (name && defs.has(name) && !findBlockSlug(name, blockSlugs)) {\n return rewriteRefs({ ...(defs.get(name) as Record<string, unknown>), ...rest }, blockSlugs, defs)\n }\n const out: Record<string, unknown> = {}\n for (const [key, value] of Object.entries(node)) {\n out[key] =\n key === '$ref' && typeof value === 'string'\n ? normalizeRef(value, blockSlugs)\n : rewriteRefs(value as JsonValue, blockSlugs, defs)\n }\n return out\n }\n return node\n}\n"],"mappings":";AAEA,MAAa,cAAc,SACzB,WAAW,KAAK,QAAQ,cAAc,GAAG,MAAc,EAAE,YAAY,CAAC,CAAC;AAEzE,MAAa,mBAAmB,SAAyB;CACvD,MAAM,WAAW,KAAK,QAAQ,gBAAgB,EAAE,CAAC,CAAC,QAAQ,gBAAgB,EAAE;CAC5E,OAAO,QAAQ,WAAW,YAAY,IAAI;AAC5C;AAEA,MAAa,oBAAoB,SAAyB,SAAS,WAAW,IAAI;AAElF,MAAa,kBAAkB,SAAyB,GAAG,KAAK;AAChE,MAAa,oBAAoB,SAAyB,GAAG,KAAK;AAClE,MAAa,oBAAoB,SAAyB,GAAG,KAAK;AAClE,MAAa,mBAAmB,SAAyB,GAAG,KAAK;AACjE,MAAa,oBAAoB,SAAyB,GAAG,KAAK;AAClE,MAAa,sBAAsB,SAAyB,GAAG,KAAK;AACpE,MAAa,mBAAmB,SAAyB,GAAG,KAAK;AAEjE,MAAa,SAAS,SAAyB,wBAAwB;AAIvE,MAAM,MAAM;AAEZ,MAAM,iBAAiB,MAAc,eACnC,CAAC,GAAG,UAAU,CAAC,CAAC,MAAM,MAAM,MAAM,QAAQ,WAAW,CAAC,MAAM,WAAW,IAAI,CAAC;AAE9E,MAAM,gBAAgB,KAAa,eAAoC;CACrE,MAAM,QAAQ,IAAI,KAAK,GAAG;CAC1B,IAAI,CAAC,OAAO,OAAO;CACnB,MAAM,WAAW,MAAM;CACvB,MAAM,YAAY,cAAc,UAAU,UAAU;CACpD,IAAI,WAAW,OAAO,wBAAwB,gBAAgB,SAAS;CACvE,OAAO,wBAAwB,WAAW,QAAQ;AACpD;AAEA,MAAa,eACX,MACA,6BAA0B,IAAI,IAAI,GAClC,uBAA6B,IAAI,IAAI,MACvB;CACd,IAAI,MAAM,QAAQ,IAAI,GAAG,OAAO,KAAK,KAAK,SAAS,YAAY,MAAmB,YAAY,IAAI,CAAC;CACnG,IAAI,QAAQ,OAAO,SAAS,UAAU;EACpC,MAAM,EAAE,MAAM,GAAG,SAAS;EAC1B,MAAM,OAAO,OAAO,SAAS,WAAW,IAAI,KAAK,IAAI,CAAC,GAAG,KAAK,KAAA;EAC9D,IAAI,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,cAAc,MAAM,UAAU,GAC3D,OAAO,YAAY;GAAE,GAAI,KAAK,IAAI,IAAI;GAA+B,GAAG;EAAK,GAAG,YAAY,IAAI;EAElG,MAAM,MAA+B,CAAC;EACtC,KAAK,MAAM,CAAC,KAAK,UAAU,OAAO,QAAQ,IAAI,GAC5C,IAAI,OACF,QAAQ,UAAU,OAAO,UAAU,WAC/B,aAAa,OAAO,UAAU,IAC9B,YAAY,OAAoB,YAAY,IAAI;EAExD,OAAO;CACT;CACA,OAAO;AACT"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BuildContext, Entity } from "../../shared/types/index.js";
|
|
2
|
+
import { Field } from "payload";
|
|
3
|
+
import { ParameterObject, SchemaObject } from "@scalar/openapi-types/3.2";
|
|
4
|
+
export declare const buildSelectSchema: ({ fields, ctx }: {
|
|
5
|
+
fields: Field[];
|
|
6
|
+
ctx: BuildContext;
|
|
7
|
+
}) => SchemaObject;
|
|
8
|
+
export declare const buildPopulateSchema: ({ fields, ctx }: {
|
|
9
|
+
fields: Field[];
|
|
10
|
+
ctx: BuildContext;
|
|
11
|
+
}) => SchemaObject | undefined;
|
|
12
|
+
export declare const buildJoinsSchema: ({ fields, ctx }: {
|
|
13
|
+
fields: Field[];
|
|
14
|
+
ctx: BuildContext;
|
|
15
|
+
}) => SchemaObject | undefined;
|
|
16
|
+
export interface ParamSchemas {
|
|
17
|
+
select: SchemaObject;
|
|
18
|
+
populate?: SchemaObject;
|
|
19
|
+
joins?: SchemaObject;
|
|
20
|
+
}
|
|
21
|
+
export declare const buildParamSchemas: ({ fields, ctx }: {
|
|
22
|
+
fields: Field[];
|
|
23
|
+
ctx: BuildContext;
|
|
24
|
+
}) => ParamSchemas;
|
|
25
|
+
export declare const collectionHasFilters: (fields: Field[]) => boolean;
|
|
26
|
+
export declare const buildQueryOperationsSchema: ({ base, fields, ctx }: {
|
|
27
|
+
base: string;
|
|
28
|
+
fields: Field[];
|
|
29
|
+
ctx: BuildContext;
|
|
30
|
+
}) => SchemaObject;
|
|
31
|
+
export interface ReadParamRefs {
|
|
32
|
+
select: boolean;
|
|
33
|
+
populate: boolean;
|
|
34
|
+
joins: boolean;
|
|
35
|
+
}
|
|
36
|
+
export declare const commonReadParams: ({ base, ctx, refs }: {
|
|
37
|
+
base: string;
|
|
38
|
+
ctx: BuildContext;
|
|
39
|
+
refs: ReadParamRefs;
|
|
40
|
+
}) => ParameterObject[];
|
|
41
|
+
export type WriteOperation = 'create' | 'update' | 'updateByID' | 'delete' | 'duplicate' | 'globalUpdate';
|
|
42
|
+
export declare const writeParams: ({ base, entity, ctx, refs, operation }: {
|
|
43
|
+
base: string;
|
|
44
|
+
entity: Entity;
|
|
45
|
+
ctx: BuildContext;
|
|
46
|
+
refs: ReadParamRefs;
|
|
47
|
+
operation: WriteOperation;
|
|
48
|
+
}) => ParameterObject[];
|
|
49
|
+
export declare const validateParams: (ctx: BuildContext) => ParameterObject[];
|
|
50
|
+
export declare const whereParam: (base: string) => ParameterObject;
|
|
51
|
+
export declare const buildListParams: ({ base, fields, ctx, refs }: {
|
|
52
|
+
base: string;
|
|
53
|
+
fields: Field[];
|
|
54
|
+
ctx: BuildContext;
|
|
55
|
+
refs: ReadParamRefs;
|
|
56
|
+
}) => ParameterObject[];
|
|
57
|
+
//# sourceMappingURL=params.d.ts.map
|