@strapi/utils 5.12.0 → 5.12.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/dist/async.js +28 -0
- package/dist/async.js.map +1 -0
- package/dist/async.mjs +24 -0
- package/dist/async.mjs.map +1 -0
- package/dist/content-types.js +201 -0
- package/dist/content-types.js.map +1 -0
- package/dist/content-types.mjs +167 -0
- package/dist/content-types.mjs.map +1 -0
- package/dist/convert-query-params.js +512 -0
- package/dist/convert-query-params.js.map +1 -0
- package/dist/convert-query-params.mjs +510 -0
- package/dist/convert-query-params.mjs.map +1 -0
- package/dist/env-helper.js +81 -0
- package/dist/env-helper.js.map +1 -0
- package/dist/env-helper.mjs +79 -0
- package/dist/env-helper.mjs.map +1 -0
- package/dist/errors.js +104 -0
- package/dist/errors.js.map +1 -0
- package/dist/errors.mjs +88 -0
- package/dist/errors.mjs.map +1 -0
- package/dist/file.js +57 -0
- package/dist/file.js.map +1 -0
- package/dist/file.mjs +50 -0
- package/dist/file.mjs.map +1 -0
- package/dist/format-yup-error.js +19 -0
- package/dist/format-yup-error.js.map +1 -0
- package/dist/format-yup-error.mjs +17 -0
- package/dist/format-yup-error.mjs.map +1 -0
- package/dist/hooks.js +86 -0
- package/dist/hooks.js.map +1 -0
- package/dist/hooks.mjs +80 -0
- package/dist/hooks.mjs.map +1 -0
- package/dist/import-default.js +9 -0
- package/dist/import-default.js.map +1 -0
- package/dist/import-default.mjs +7 -0
- package/dist/import-default.mjs.map +1 -0
- package/dist/index.js +54 -4358
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +48 -4317
- package/dist/index.mjs.map +1 -1
- package/dist/machine-id.js +17 -0
- package/dist/machine-id.js.map +1 -0
- package/dist/machine-id.mjs +15 -0
- package/dist/machine-id.mjs.map +1 -0
- package/dist/operators.js +79 -0
- package/dist/operators.js.map +1 -0
- package/dist/operators.mjs +76 -0
- package/dist/operators.mjs.map +1 -0
- package/dist/package-manager.js +36 -0
- package/dist/package-manager.js.map +1 -0
- package/dist/package-manager.mjs +33 -0
- package/dist/package-manager.mjs.map +1 -0
- package/dist/pagination.js +163 -0
- package/dist/pagination.js.map +1 -0
- package/dist/pagination.mjs +159 -0
- package/dist/pagination.mjs.map +1 -0
- package/dist/parse-type.js +140 -0
- package/dist/parse-type.js.map +1 -0
- package/dist/parse-type.mjs +118 -0
- package/dist/parse-type.mjs.map +1 -0
- package/dist/policy.js +33 -0
- package/dist/policy.js.map +1 -0
- package/dist/policy.mjs +30 -0
- package/dist/policy.mjs.map +1 -0
- package/dist/primitives/arrays.js +7 -0
- package/dist/primitives/arrays.js.map +1 -0
- package/dist/primitives/arrays.mjs +5 -0
- package/dist/primitives/arrays.mjs.map +1 -0
- package/dist/primitives/dates.js +11 -0
- package/dist/primitives/dates.js.map +1 -0
- package/dist/primitives/dates.mjs +9 -0
- package/dist/primitives/dates.mjs.map +1 -0
- package/dist/primitives/objects.js +13 -0
- package/dist/primitives/objects.js.map +1 -0
- package/dist/primitives/objects.mjs +11 -0
- package/dist/primitives/objects.mjs.map +1 -0
- package/dist/primitives/strings.js +49 -0
- package/dist/primitives/strings.js.map +1 -0
- package/dist/primitives/strings.mjs +38 -0
- package/dist/primitives/strings.mjs.map +1 -0
- package/dist/print-value.js +42 -0
- package/dist/print-value.js.map +1 -0
- package/dist/print-value.mjs +40 -0
- package/dist/print-value.mjs.map +1 -0
- package/dist/provider-factory.js +82 -0
- package/dist/provider-factory.js.map +1 -0
- package/dist/provider-factory.mjs +80 -0
- package/dist/provider-factory.mjs.map +1 -0
- package/dist/relations.js +54 -0
- package/dist/relations.js.map +1 -0
- package/dist/relations.mjs +45 -0
- package/dist/relations.mjs.map +1 -0
- package/dist/sanitize/index.js +195 -0
- package/dist/sanitize/index.js.map +1 -0
- package/dist/sanitize/index.mjs +194 -0
- package/dist/sanitize/index.mjs.map +1 -0
- package/dist/sanitize/sanitizers.js +173 -0
- package/dist/sanitize/sanitizers.js.map +1 -0
- package/dist/sanitize/sanitizers.mjs +166 -0
- package/dist/sanitize/sanitizers.mjs.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js +20 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.js.map +1 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs +18 -0
- package/dist/sanitize/visitors/expand-wildcard-populate.mjs.map +1 -0
- package/dist/sanitize/visitors/index.js +22 -0
- package/dist/sanitize/visitors/index.js.map +1 -0
- package/dist/sanitize/visitors/index.mjs +9 -0
- package/dist/sanitize/visitors/index.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js +87 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs +85 -0
- package/dist/sanitize/visitors/remove-disallowed-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js +12 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.js.map +1 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs +10 -0
- package/dist/sanitize/visitors/remove-dynamic-zones.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js +12 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs +10 -0
- package/dist/sanitize/visitors/remove-morph-to-relations.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-password.js +10 -0
- package/dist/sanitize/visitors/remove-password.js.map +1 -0
- package/dist/sanitize/visitors/remove-password.mjs +8 -0
- package/dist/sanitize/visitors/remove-password.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-private.js +16 -0
- package/dist/sanitize/visitors/remove-private.js.map +1 -0
- package/dist/sanitize/visitors/remove-private.mjs +14 -0
- package/dist/sanitize/visitors/remove-private.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js +28 -0
- package/dist/sanitize/visitors/remove-restricted-fields.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs +26 -0
- package/dist/sanitize/visitors/remove-restricted-fields.mjs.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js +116 -0
- package/dist/sanitize/visitors/remove-restricted-relations.js.map +1 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs +114 -0
- package/dist/sanitize/visitors/remove-restricted-relations.mjs.map +1 -0
- package/dist/set-creator-fields.js +18 -0
- package/dist/set-creator-fields.js.map +1 -0
- package/dist/set-creator-fields.mjs +16 -0
- package/dist/set-creator-fields.mjs.map +1 -0
- package/dist/template.js +18 -0
- package/dist/template.js.map +1 -0
- package/dist/template.mjs +15 -0
- package/dist/template.mjs.map +1 -0
- package/dist/traverse/factory.js +158 -0
- package/dist/traverse/factory.js.map +1 -0
- package/dist/traverse/factory.mjs +156 -0
- package/dist/traverse/factory.mjs.map +1 -0
- package/dist/traverse/index.js +14 -0
- package/dist/traverse/index.js.map +1 -0
- package/dist/traverse/index.mjs +5 -0
- package/dist/traverse/index.mjs.map +1 -0
- package/dist/traverse/query-fields.js +41 -0
- package/dist/traverse/query-fields.js.map +1 -0
- package/dist/traverse/query-fields.mjs +39 -0
- package/dist/traverse/query-fields.mjs.map +1 -0
- package/dist/traverse/query-filters.js +114 -0
- package/dist/traverse/query-filters.js.map +1 -0
- package/dist/traverse/query-filters.mjs +112 -0
- package/dist/traverse/query-filters.mjs.map +1 -0
- package/dist/traverse/query-populate.js +280 -0
- package/dist/traverse/query-populate.js.map +1 -0
- package/dist/traverse/query-populate.mjs +278 -0
- package/dist/traverse/query-populate.mjs.map +1 -0
- package/dist/traverse/query-sort.js +144 -0
- package/dist/traverse/query-sort.js.map +1 -0
- package/dist/traverse/query-sort.mjs +142 -0
- package/dist/traverse/query-sort.mjs.map +1 -0
- package/dist/traverse-entity.js +170 -0
- package/dist/traverse-entity.js.map +1 -0
- package/dist/traverse-entity.mjs +168 -0
- package/dist/traverse-entity.mjs.map +1 -0
- package/dist/validate/index.js +218 -0
- package/dist/validate/index.js.map +1 -0
- package/dist/validate/index.mjs +217 -0
- package/dist/validate/index.mjs.map +1 -0
- package/dist/validate/utils.js +27 -0
- package/dist/validate/utils.js.map +1 -0
- package/dist/validate/utils.mjs +24 -0
- package/dist/validate/utils.mjs.map +1 -0
- package/dist/validate/validators.js +369 -0
- package/dist/validate/validators.js.map +1 -0
- package/dist/validate/validators.mjs +356 -0
- package/dist/validate/validators.mjs.map +1 -0
- package/dist/validate/visitors/index.js +22 -0
- package/dist/validate/visitors/index.js.map +1 -0
- package/dist/validate/visitors/index.mjs +9 -0
- package/dist/validate/visitors/index.mjs.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.js +91 -0
- package/dist/validate/visitors/throw-disallowed-fields.js.map +1 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs +89 -0
- package/dist/validate/visitors/throw-disallowed-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.js +16 -0
- package/dist/validate/visitors/throw-dynamic-zones.js.map +1 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs +14 -0
- package/dist/validate/visitors/throw-dynamic-zones.mjs.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.js +16 -0
- package/dist/validate/visitors/throw-morph-to-relations.js.map +1 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs +14 -0
- package/dist/validate/visitors/throw-morph-to-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-password.js +15 -0
- package/dist/validate/visitors/throw-password.js.map +1 -0
- package/dist/validate/visitors/throw-password.mjs +13 -0
- package/dist/validate/visitors/throw-password.mjs.map +1 -0
- package/dist/validate/visitors/throw-private.js +20 -0
- package/dist/validate/visitors/throw-private.js.map +1 -0
- package/dist/validate/visitors/throw-private.mjs +18 -0
- package/dist/validate/visitors/throw-private.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.js +36 -0
- package/dist/validate/visitors/throw-restricted-fields.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs +34 -0
- package/dist/validate/visitors/throw-restricted-fields.mjs.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.js +125 -0
- package/dist/validate/visitors/throw-restricted-relations.js.map +1 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs +123 -0
- package/dist/validate/visitors/throw-restricted-relations.mjs.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js +66 -0
- package/dist/validate/visitors/throw-unrecognized-fields.js.map +1 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs +64 -0
- package/dist/validate/visitors/throw-unrecognized-fields.mjs.map +1 -0
- package/dist/validators.js +60 -0
- package/dist/validators.js.map +1 -0
- package/dist/validators.mjs +37 -0
- package/dist/validators.mjs.map +1 -0
- package/dist/yup.js +101 -0
- package/dist/yup.js.map +1 -0
- package/dist/yup.mjs +74 -0
- package/dist/yup.mjs.map +1 -0
- package/dist/zod.js +31 -0
- package/dist/zod.js.map +1 -0
- package/dist/zod.mjs +29 -0
- package/dist/zod.mjs.map +1 -0
- package/package.json +3 -3
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pagination.mjs","sources":["../src/pagination.ts"],"sourcesContent":["import { merge, pipe, omit, isNil } from 'lodash/fp';\nimport { PaginationError } from './errors';\n\ninterface PaginationArgs {\n page: number;\n pageSize: number;\n start: number;\n limit: number;\n}\n\nexport interface Pagination {\n start: number;\n limit: number;\n}\n\nexport interface PagePatinationInformation {\n page: number;\n pageSize: number;\n pageCount: number;\n total: number;\n}\n\nexport interface OffsetPaginationInformation {\n start: number;\n limit: number;\n total: number;\n}\n\nconst STRAPI_DEFAULTS = {\n offset: {\n start: 0,\n limit: 10,\n },\n page: {\n page: 1,\n pageSize: 10,\n },\n};\n\nconst paginationAttributes = ['start', 'limit', 'page', 'pageSize'];\n\nconst withMaxLimit = (limit: number, maxLimit = -1) => {\n if (maxLimit === -1 || limit < maxLimit) {\n return limit;\n }\n\n return maxLimit;\n};\n\n// Ensure minimum page & pageSize values (page >= 1, pageSize >= 0, start >= 0, limit >= 0)\nconst ensureMinValues = ({ start, limit }: Pagination) => ({\n start: Math.max(start, 0),\n limit: limit === -1 ? limit : Math.max(limit, 1),\n});\n\nconst ensureMaxValues =\n (maxLimit = -1) =>\n ({ start, limit }: { start: number; limit: number }) => ({\n start,\n limit: withMaxLimit(limit, maxLimit),\n });\n\n// Apply maxLimit as the limit when limit is -1\nconst withNoLimit = (pagination: Pagination, maxLimit = -1) => ({\n ...pagination,\n limit: pagination.limit === -1 ? maxLimit : pagination.limit,\n});\n\nconst withDefaultPagination = <T extends Partial<PaginationArgs>>(\n args: T,\n { defaults = {}, maxLimit = -1 } = {}\n) => {\n const defaultValues = merge(STRAPI_DEFAULTS, defaults);\n\n const usePagePagination = !isNil(args.page) || !isNil(args.pageSize);\n const useOffsetPagination = !isNil(args.start) || !isNil(args.limit);\n\n const ensureValidValues = pipe(ensureMinValues, ensureMaxValues(maxLimit));\n\n // If there is no pagination attribute, don't modify the payload\n if (!usePagePagination && !useOffsetPagination) {\n return merge(args, ensureValidValues(defaultValues.offset));\n }\n\n // If there is page & offset pagination attributes, throw an error\n if (usePagePagination && useOffsetPagination) {\n throw new PaginationError('Cannot use both page & offset pagination in the same query');\n }\n\n const pagination: Pagination = {\n start: 0,\n limit: 0,\n };\n\n // Start / Limit\n if (useOffsetPagination) {\n const { start, limit } = merge(defaultValues.offset, args);\n\n Object.assign(pagination, { start, limit });\n }\n\n // Page / PageSize\n if (usePagePagination) {\n const { page, pageSize } = merge(defaultValues.page, {\n ...args,\n pageSize: Math.max(1, args.pageSize ?? 0),\n });\n\n Object.assign(pagination, {\n start: (page - 1) * pageSize,\n limit: pageSize,\n });\n }\n\n // Handle -1 limit\n Object.assign(pagination, withNoLimit(pagination, maxLimit));\n\n const replacePaginationAttributes = pipe(\n // Remove pagination attributes\n omit(paginationAttributes),\n // Merge the object with the new pagination + ensure minimum & maximum values\n merge(ensureValidValues(pagination))\n );\n\n return replacePaginationAttributes(args);\n};\n\n/**\n * Transform pagination information into a paginated response:\n * {\n * page: number,\n * pageSize: number,\n * pageCount: number,\n * total: number\n * }\n */\nconst transformPagedPaginationInfo = (\n paginationInfo: Partial<PaginationArgs>,\n total: number\n): PagePatinationInformation => {\n if (!isNil(paginationInfo.page)) {\n const page = paginationInfo.page;\n const pageSize = paginationInfo.pageSize ?? total;\n\n return {\n page,\n pageSize,\n pageCount: pageSize > 0 ? Math.ceil(total / pageSize) : 0,\n total,\n };\n }\n\n if (!isNil(paginationInfo.start)) {\n const start = paginationInfo.start;\n const limit = paginationInfo.limit ?? total;\n\n // Start limit to page page size\n return {\n page: Math.floor(start / limit) + 1,\n pageSize: limit,\n pageCount: limit > 0 ? Math.ceil(total / limit) : 0,\n total,\n };\n }\n\n // Default pagination\n return {\n ...paginationInfo,\n page: 1,\n pageSize: 10,\n pageCount: 1,\n total,\n };\n};\n\n/**\n * Transform pagination information into a offset response:\n * {\n * start: number,\n * limit: number,\n * total: number\n * }\n */\nconst transformOffsetPaginationInfo = (\n paginationInfo: Partial<PaginationArgs>,\n total: number\n): OffsetPaginationInformation => {\n if (!isNil(paginationInfo.page)) {\n const limit = paginationInfo.pageSize ?? total;\n const start = (paginationInfo.page - 1) * limit;\n\n return { start, limit, total };\n }\n\n if (!isNil(paginationInfo.start)) {\n const start = paginationInfo.start;\n const limit = paginationInfo.limit ?? total;\n\n // Start limit to page page size\n return { start, limit, total };\n }\n\n // Default pagination\n return {\n ...paginationInfo,\n start: 0,\n limit: 10,\n total,\n };\n};\n\nexport { withDefaultPagination, transformPagedPaginationInfo, transformOffsetPaginationInfo };\n"],"names":["STRAPI_DEFAULTS","offset","start","limit","page","pageSize","paginationAttributes","withMaxLimit","maxLimit","ensureMinValues","Math","max","ensureMaxValues","withNoLimit","pagination","withDefaultPagination","args","defaults","defaultValues","merge","usePagePagination","isNil","useOffsetPagination","ensureValidValues","pipe","PaginationError","Object","assign","replacePaginationAttributes","omit","transformPagedPaginationInfo","paginationInfo","total","pageCount","ceil","floor","transformOffsetPaginationInfo"],"mappings":";;;AA4BA,MAAMA,eAAkB,GAAA;IACtBC,MAAQ,EAAA;QACNC,KAAO,EAAA,CAAA;QACPC,KAAO,EAAA;AACT,KAAA;IACAC,IAAM,EAAA;QACJA,IAAM,EAAA,CAAA;QACNC,QAAU,EAAA;AACZ;AACF,CAAA;AAEA,MAAMC,oBAAuB,GAAA;AAAC,IAAA,OAAA;AAAS,IAAA,OAAA;AAAS,IAAA,MAAA;AAAQ,IAAA;AAAW,CAAA;AAEnE,MAAMC,YAAe,GAAA,CAACJ,KAAeK,EAAAA,QAAAA,GAAW,CAAC,CAAC,GAAA;AAChD,IAAA,IAAIA,QAAa,KAAA,CAAC,CAAKL,IAAAA,KAAAA,GAAQK,QAAU,EAAA;QACvC,OAAOL,KAAAA;AACT;IAEA,OAAOK,QAAAA;AACT,CAAA;AAEA;AACA,MAAMC,eAAAA,GAAkB,CAAC,EAAEP,KAAK,EAAEC,KAAK,EAAc,IAAM;QACzDD,KAAOQ,EAAAA,IAAAA,CAAKC,GAAG,CAACT,KAAO,EAAA,CAAA,CAAA;AACvBC,QAAAA,KAAAA,EAAOA,UAAU,CAAC,CAAA,GAAIA,QAAQO,IAAKC,CAAAA,GAAG,CAACR,KAAO,EAAA,CAAA;KAChD,CAAA;AAEA,MAAMS,eACJ,GAAA,CAACJ,QAAW,GAAA,CAAC,CAAC,GACd,CAAC,EAAEN,KAAK,EAAEC,KAAK,EAAoC,IAAM;AACvDD,YAAAA,KAAAA;AACAC,YAAAA,KAAAA,EAAOI,aAAaJ,KAAOK,EAAAA,QAAAA;SAC7B,CAAA;AAEF;AACA,MAAMK,cAAc,CAACC,UAAAA,EAAwBN,WAAW,CAAC,CAAC,IAAM;AAC9D,QAAA,GAAGM,UAAU;AACbX,QAAAA,KAAAA,EAAOW,WAAWX,KAAK,KAAK,CAAC,CAAIK,GAAAA,QAAAA,GAAWM,WAAWX;KACzD,CAAA;AAEA,MAAMY,qBAAwB,GAAA,CAC5BC,IACA,EAAA,EAAEC,WAAW,EAAE,EAAET,QAAAA,GAAW,CAAC,CAAC,EAAE,GAAG,EAAE,GAAA;IAErC,MAAMU,aAAAA,GAAgBC,MAAMnB,eAAiBiB,EAAAA,QAAAA,CAAAA;IAE7C,MAAMG,iBAAAA,GAAoB,CAACC,KAAML,CAAAA,IAAAA,CAAKZ,IAAI,CAAK,IAAA,CAACiB,KAAML,CAAAA,IAAAA,CAAKX,QAAQ,CAAA;IACnE,MAAMiB,mBAAAA,GAAsB,CAACD,KAAML,CAAAA,IAAAA,CAAKd,KAAK,CAAK,IAAA,CAACmB,KAAML,CAAAA,IAAAA,CAAKb,KAAK,CAAA;IAEnE,MAAMoB,iBAAAA,GAAoBC,IAAKf,CAAAA,eAAAA,EAAiBG,eAAgBJ,CAAAA,QAAAA,CAAAA,CAAAA;;IAGhE,IAAI,CAACY,iBAAqB,IAAA,CAACE,mBAAqB,EAAA;AAC9C,QAAA,OAAOH,KAAMH,CAAAA,IAAAA,EAAMO,iBAAkBL,CAAAA,aAAAA,CAAcjB,MAAM,CAAA,CAAA;AAC3D;;AAGA,IAAA,IAAImB,qBAAqBE,mBAAqB,EAAA;AAC5C,QAAA,MAAM,IAAIG,eAAgB,CAAA,4DAAA,CAAA;AAC5B;AAEA,IAAA,MAAMX,UAAyB,GAAA;QAC7BZ,KAAO,EAAA,CAAA;QACPC,KAAO,EAAA;AACT,KAAA;;AAGA,IAAA,IAAImB,mBAAqB,EAAA;QACvB,MAAM,EAAEpB,KAAK,EAAEC,KAAK,EAAE,GAAGgB,KAAAA,CAAMD,aAAcjB,CAAAA,MAAM,EAAEe,IAAAA,CAAAA;QAErDU,MAAOC,CAAAA,MAAM,CAACb,UAAY,EAAA;AAAEZ,YAAAA,KAAAA;AAAOC,YAAAA;AAAM,SAAA,CAAA;AAC3C;;AAGA,IAAA,IAAIiB,iBAAmB,EAAA;QACrB,MAAM,EAAEhB,IAAI,EAAEC,QAAQ,EAAE,GAAGc,KAAAA,CAAMD,aAAcd,CAAAA,IAAI,EAAE;AACnD,YAAA,GAAGY,IAAI;AACPX,YAAAA,QAAAA,EAAUK,KAAKC,GAAG,CAAC,CAAGK,EAAAA,IAAAA,CAAKX,QAAQ,IAAI,CAAA;AACzC,SAAA,CAAA;QAEAqB,MAAOC,CAAAA,MAAM,CAACb,UAAY,EAAA;AACxBZ,YAAAA,KAAAA,EAAO,CAACE,IAAO,GAAA,CAAA,IAAKC,QAAAA;YACpBF,KAAOE,EAAAA;AACT,SAAA,CAAA;AACF;;AAGAqB,IAAAA,MAAAA,CAAOC,MAAM,CAACb,UAAYD,EAAAA,WAAAA,CAAYC,UAAYN,EAAAA,QAAAA,CAAAA,CAAAA;IAElD,MAAMoB,2BAAAA,GAA8BJ;AAElCK,IAAAA,IAAAA,CAAKvB;AAELa,IAAAA,KAAAA,CAAMI,iBAAkBT,CAAAA,UAAAA,CAAAA,CAAAA,CAAAA;AAG1B,IAAA,OAAOc,2BAA4BZ,CAAAA,IAAAA,CAAAA;AACrC;AAEA;;;;;;;;IASA,MAAMc,4BAA+B,GAAA,CACnCC,cACAC,EAAAA,KAAAA,GAAAA;AAEA,IAAA,IAAI,CAACX,KAAAA,CAAMU,cAAe3B,CAAAA,IAAI,CAAG,EAAA;QAC/B,MAAMA,IAAAA,GAAO2B,eAAe3B,IAAI;QAChC,MAAMC,QAAAA,GAAW0B,cAAe1B,CAAAA,QAAQ,IAAI2B,KAAAA;QAE5C,OAAO;AACL5B,YAAAA,IAAAA;AACAC,YAAAA,QAAAA;AACA4B,YAAAA,SAAAA,EAAW5B,WAAW,CAAIK,GAAAA,IAAAA,CAAKwB,IAAI,CAACF,QAAQ3B,QAAY,CAAA,GAAA,CAAA;AACxD2B,YAAAA;AACF,SAAA;AACF;AAEA,IAAA,IAAI,CAACX,KAAAA,CAAMU,cAAe7B,CAAAA,KAAK,CAAG,EAAA;QAChC,MAAMA,KAAAA,GAAQ6B,eAAe7B,KAAK;QAClC,MAAMC,KAAAA,GAAQ4B,cAAe5B,CAAAA,KAAK,IAAI6B,KAAAA;;QAGtC,OAAO;AACL5B,YAAAA,IAAAA,EAAMM,IAAKyB,CAAAA,KAAK,CAACjC,KAAAA,GAAQC,KAAS,CAAA,GAAA,CAAA;YAClCE,QAAUF,EAAAA,KAAAA;AACV8B,YAAAA,SAAAA,EAAW9B,QAAQ,CAAIO,GAAAA,IAAAA,CAAKwB,IAAI,CAACF,QAAQ7B,KAAS,CAAA,GAAA,CAAA;AAClD6B,YAAAA;AACF,SAAA;AACF;;IAGA,OAAO;AACL,QAAA,GAAGD,cAAc;QACjB3B,IAAM,EAAA,CAAA;QACNC,QAAU,EAAA,EAAA;QACV4B,SAAW,EAAA,CAAA;AACXD,QAAAA;AACF,KAAA;AACF;AAEA;;;;;;;IAQA,MAAMI,6BAAgC,GAAA,CACpCL,cACAC,EAAAA,KAAAA,GAAAA;AAEA,IAAA,IAAI,CAACX,KAAAA,CAAMU,cAAe3B,CAAAA,IAAI,CAAG,EAAA;QAC/B,MAAMD,KAAAA,GAAQ4B,cAAe1B,CAAAA,QAAQ,IAAI2B,KAAAA;AACzC,QAAA,MAAM9B,QAAQ,CAAC6B,eAAe3B,IAAI,GAAG,CAAA,IAAKD,KAAAA;QAE1C,OAAO;AAAED,YAAAA,KAAAA;AAAOC,YAAAA,KAAAA;AAAO6B,YAAAA;AAAM,SAAA;AAC/B;AAEA,IAAA,IAAI,CAACX,KAAAA,CAAMU,cAAe7B,CAAAA,KAAK,CAAG,EAAA;QAChC,MAAMA,KAAAA,GAAQ6B,eAAe7B,KAAK;QAClC,MAAMC,KAAAA,GAAQ4B,cAAe5B,CAAAA,KAAK,IAAI6B,KAAAA;;QAGtC,OAAO;AAAE9B,YAAAA,KAAAA;AAAOC,YAAAA,KAAAA;AAAO6B,YAAAA;AAAM,SAAA;AAC/B;;IAGA,OAAO;AACL,QAAA,GAAGD,cAAc;QACjB7B,KAAO,EAAA,CAAA;QACPC,KAAO,EAAA,EAAA;AACP6B,QAAAA;AACF,KAAA;AACF;;;;"}
|
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash');
|
|
4
|
+
var dates = require('date-fns');
|
|
5
|
+
|
|
6
|
+
function _interopNamespaceDefault(e) {
|
|
7
|
+
var n = Object.create(null);
|
|
8
|
+
if (e) {
|
|
9
|
+
Object.keys(e).forEach(function (k) {
|
|
10
|
+
if (k !== 'default') {
|
|
11
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
12
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
get: function () { return e[k]; }
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
n.default = e;
|
|
20
|
+
return Object.freeze(n);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
var ___namespace = /*#__PURE__*/_interopNamespaceDefault(_);
|
|
24
|
+
var dates__namespace = /*#__PURE__*/_interopNamespaceDefault(dates);
|
|
25
|
+
|
|
26
|
+
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$/;
|
|
27
|
+
const isDate = (v)=>{
|
|
28
|
+
return dates__namespace.isDate(v);
|
|
29
|
+
};
|
|
30
|
+
const parseTime = (value)=>{
|
|
31
|
+
if (isDate(value)) {
|
|
32
|
+
return dates__namespace.format(value, 'HH:mm:ss.SSS');
|
|
33
|
+
}
|
|
34
|
+
if (typeof value !== 'string') {
|
|
35
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
36
|
+
}
|
|
37
|
+
const result = value.match(timeRegex);
|
|
38
|
+
if (result === null) {
|
|
39
|
+
throw new Error('Invalid time format, expected HH:mm:ss.SSS');
|
|
40
|
+
}
|
|
41
|
+
const [, hours, minutes, seconds, fraction = '.000'] = result;
|
|
42
|
+
const fractionPart = ___namespace.padEnd(fraction.slice(1), 3, '0');
|
|
43
|
+
return `${hours}:${minutes}:${seconds}.${fractionPart}`;
|
|
44
|
+
};
|
|
45
|
+
const parseDate = (value)=>{
|
|
46
|
+
if (isDate(value)) {
|
|
47
|
+
return dates__namespace.format(value, 'yyyy-MM-dd');
|
|
48
|
+
}
|
|
49
|
+
if (typeof value !== 'string') {
|
|
50
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
51
|
+
}
|
|
52
|
+
try {
|
|
53
|
+
const date = dates__namespace.parseISO(value);
|
|
54
|
+
if (dates__namespace.isValid(date)) return dates__namespace.format(date, 'yyyy-MM-dd');
|
|
55
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
56
|
+
} catch (error) {
|
|
57
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
const parseDateTimeOrTimestamp = (value)=>{
|
|
61
|
+
if (isDate(value)) {
|
|
62
|
+
return value;
|
|
63
|
+
}
|
|
64
|
+
if (typeof value !== 'string') {
|
|
65
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const date = dates__namespace.parseISO(value);
|
|
69
|
+
if (dates__namespace.isValid(date)) return date;
|
|
70
|
+
const milliUnixDate = dates__namespace.parse(value, 'T', new Date());
|
|
71
|
+
if (dates__namespace.isValid(milliUnixDate)) return milliUnixDate;
|
|
72
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
73
|
+
} catch (error) {
|
|
74
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
75
|
+
}
|
|
76
|
+
};
|
|
77
|
+
const parseBoolean = (value, options)=>{
|
|
78
|
+
const { forceCast = false } = options;
|
|
79
|
+
if (typeof value === 'boolean') {
|
|
80
|
+
return value;
|
|
81
|
+
}
|
|
82
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
83
|
+
if ([
|
|
84
|
+
'true',
|
|
85
|
+
't',
|
|
86
|
+
'1',
|
|
87
|
+
1
|
|
88
|
+
].includes(value)) {
|
|
89
|
+
return true;
|
|
90
|
+
}
|
|
91
|
+
if ([
|
|
92
|
+
'false',
|
|
93
|
+
'f',
|
|
94
|
+
'0',
|
|
95
|
+
0
|
|
96
|
+
].includes(value)) {
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (forceCast) {
|
|
101
|
+
return Boolean(value);
|
|
102
|
+
}
|
|
103
|
+
throw new Error('Invalid boolean input. Expected "t","1","true","false","0","f"');
|
|
104
|
+
};
|
|
105
|
+
/**
|
|
106
|
+
* Cast basic values based on attribute type
|
|
107
|
+
*/ const parseType = (options)=>{
|
|
108
|
+
const { type, value, forceCast } = options;
|
|
109
|
+
switch(type){
|
|
110
|
+
case 'boolean':
|
|
111
|
+
return parseBoolean(value, {
|
|
112
|
+
forceCast
|
|
113
|
+
});
|
|
114
|
+
case 'integer':
|
|
115
|
+
case 'biginteger':
|
|
116
|
+
case 'float':
|
|
117
|
+
case 'decimal':
|
|
118
|
+
{
|
|
119
|
+
return ___namespace.toNumber(value);
|
|
120
|
+
}
|
|
121
|
+
case 'time':
|
|
122
|
+
{
|
|
123
|
+
return parseTime(value);
|
|
124
|
+
}
|
|
125
|
+
case 'date':
|
|
126
|
+
{
|
|
127
|
+
return parseDate(value);
|
|
128
|
+
}
|
|
129
|
+
case 'timestamp':
|
|
130
|
+
case 'datetime':
|
|
131
|
+
{
|
|
132
|
+
return parseDateTimeOrTimestamp(value);
|
|
133
|
+
}
|
|
134
|
+
default:
|
|
135
|
+
return value;
|
|
136
|
+
}
|
|
137
|
+
};
|
|
138
|
+
|
|
139
|
+
module.exports = parseType;
|
|
140
|
+
//# sourceMappingURL=parse-type.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-type.js","sources":["../src/parse-type.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport * as dates from 'date-fns';\n\nconst timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$/;\n\nconst isDate = (v: unknown): v is Date => {\n return dates.isDate(v);\n};\n\nconst parseTime = (value: unknown): string => {\n if (isDate(value)) {\n return dates.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n const result = value.match(timeRegex);\n\n if (result === null) {\n throw new Error('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = _.padEnd(fraction.slice(1), 3, '0');\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n\nconst parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dates.format(value, 'yyyy-MM-dd');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n\n if (dates.isValid(date)) return dates.format(date, 'yyyy-MM-dd');\n\n throw new Error(`Invalid format, expected an ISO compatible date`);\n } catch (error) {\n throw new Error(`Invalid format, expected an ISO compatible date`);\n }\n};\n\nconst parseDateTimeOrTimestamp = (value: unknown) => {\n if (isDate(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n if (dates.isValid(date)) return date;\n\n const milliUnixDate = dates.parse(value, 'T', new Date());\n if (dates.isValid(milliUnixDate)) return milliUnixDate;\n\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n } catch (error) {\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\ntype TypeMap = {\n boolean: boolean;\n integer: number;\n biginteger: number;\n float: number;\n decimal: number;\n time: string;\n date: string;\n timestamp: Date;\n datetime: Date;\n};\n\nexport interface ParseTypeOptions<T extends keyof TypeMap> {\n type: T;\n value: unknown;\n forceCast?: boolean;\n}\n\nconst parseBoolean = (value: unknown, options: { forceCast?: boolean }): boolean => {\n const { forceCast = false } = options;\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n if (['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n }\n\n if (forceCast) {\n return Boolean(value);\n }\n\n throw new Error('Invalid boolean input. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"');\n};\n\n/**\n * Cast basic values based on attribute type\n */\nconst parseType = <Type extends keyof TypeMap>(options: ParseTypeOptions<Type>): TypeMap[Type] => {\n const { type, value, forceCast } = options;\n\n switch (type) {\n case 'boolean':\n return parseBoolean(value, { forceCast }) as TypeMap[Type];\n case 'integer':\n case 'biginteger':\n case 'float':\n case 'decimal': {\n return _.toNumber(value) as TypeMap[Type];\n }\n case 'time': {\n return parseTime(value) as TypeMap[Type];\n }\n case 'date': {\n return parseDate(value) as TypeMap[Type];\n }\n case 'timestamp':\n case 'datetime': {\n return parseDateTimeOrTimestamp(value) as TypeMap[Type];\n }\n default:\n return value as TypeMap[Type];\n }\n};\n\nexport default parseType;\n"],"names":["timeRegex","isDate","v","dates","parseTime","value","format","Error","result","match","hours","minutes","seconds","fraction","fractionPart","_","padEnd","slice","parseDate","date","parseISO","isValid","error","parseDateTimeOrTimestamp","milliUnixDate","parse","Date","parseBoolean","options","forceCast","includes","Boolean","parseType","type","toNumber"],"mappings":"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"}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import * as _ from 'lodash';
|
|
2
|
+
import * as dates from 'date-fns';
|
|
3
|
+
|
|
4
|
+
const timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$/;
|
|
5
|
+
const isDate = (v)=>{
|
|
6
|
+
return dates.isDate(v);
|
|
7
|
+
};
|
|
8
|
+
const parseTime = (value)=>{
|
|
9
|
+
if (isDate(value)) {
|
|
10
|
+
return dates.format(value, 'HH:mm:ss.SSS');
|
|
11
|
+
}
|
|
12
|
+
if (typeof value !== 'string') {
|
|
13
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
14
|
+
}
|
|
15
|
+
const result = value.match(timeRegex);
|
|
16
|
+
if (result === null) {
|
|
17
|
+
throw new Error('Invalid time format, expected HH:mm:ss.SSS');
|
|
18
|
+
}
|
|
19
|
+
const [, hours, minutes, seconds, fraction = '.000'] = result;
|
|
20
|
+
const fractionPart = _.padEnd(fraction.slice(1), 3, '0');
|
|
21
|
+
return `${hours}:${minutes}:${seconds}.${fractionPart}`;
|
|
22
|
+
};
|
|
23
|
+
const parseDate = (value)=>{
|
|
24
|
+
if (isDate(value)) {
|
|
25
|
+
return dates.format(value, 'yyyy-MM-dd');
|
|
26
|
+
}
|
|
27
|
+
if (typeof value !== 'string') {
|
|
28
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
29
|
+
}
|
|
30
|
+
try {
|
|
31
|
+
const date = dates.parseISO(value);
|
|
32
|
+
if (dates.isValid(date)) return dates.format(date, 'yyyy-MM-dd');
|
|
33
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
34
|
+
} catch (error) {
|
|
35
|
+
throw new Error(`Invalid format, expected an ISO compatible date`);
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
const parseDateTimeOrTimestamp = (value)=>{
|
|
39
|
+
if (isDate(value)) {
|
|
40
|
+
return value;
|
|
41
|
+
}
|
|
42
|
+
if (typeof value !== 'string') {
|
|
43
|
+
throw new Error(`Expected a string, got a ${typeof value}`);
|
|
44
|
+
}
|
|
45
|
+
try {
|
|
46
|
+
const date = dates.parseISO(value);
|
|
47
|
+
if (dates.isValid(date)) return date;
|
|
48
|
+
const milliUnixDate = dates.parse(value, 'T', new Date());
|
|
49
|
+
if (dates.isValid(milliUnixDate)) return milliUnixDate;
|
|
50
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
51
|
+
} catch (error) {
|
|
52
|
+
throw new Error(`Invalid format, expected a timestamp or an ISO date`);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
const parseBoolean = (value, options)=>{
|
|
56
|
+
const { forceCast = false } = options;
|
|
57
|
+
if (typeof value === 'boolean') {
|
|
58
|
+
return value;
|
|
59
|
+
}
|
|
60
|
+
if (typeof value === 'string' || typeof value === 'number') {
|
|
61
|
+
if ([
|
|
62
|
+
'true',
|
|
63
|
+
't',
|
|
64
|
+
'1',
|
|
65
|
+
1
|
|
66
|
+
].includes(value)) {
|
|
67
|
+
return true;
|
|
68
|
+
}
|
|
69
|
+
if ([
|
|
70
|
+
'false',
|
|
71
|
+
'f',
|
|
72
|
+
'0',
|
|
73
|
+
0
|
|
74
|
+
].includes(value)) {
|
|
75
|
+
return false;
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (forceCast) {
|
|
79
|
+
return Boolean(value);
|
|
80
|
+
}
|
|
81
|
+
throw new Error('Invalid boolean input. Expected "t","1","true","false","0","f"');
|
|
82
|
+
};
|
|
83
|
+
/**
|
|
84
|
+
* Cast basic values based on attribute type
|
|
85
|
+
*/ const parseType = (options)=>{
|
|
86
|
+
const { type, value, forceCast } = options;
|
|
87
|
+
switch(type){
|
|
88
|
+
case 'boolean':
|
|
89
|
+
return parseBoolean(value, {
|
|
90
|
+
forceCast
|
|
91
|
+
});
|
|
92
|
+
case 'integer':
|
|
93
|
+
case 'biginteger':
|
|
94
|
+
case 'float':
|
|
95
|
+
case 'decimal':
|
|
96
|
+
{
|
|
97
|
+
return _.toNumber(value);
|
|
98
|
+
}
|
|
99
|
+
case 'time':
|
|
100
|
+
{
|
|
101
|
+
return parseTime(value);
|
|
102
|
+
}
|
|
103
|
+
case 'date':
|
|
104
|
+
{
|
|
105
|
+
return parseDate(value);
|
|
106
|
+
}
|
|
107
|
+
case 'timestamp':
|
|
108
|
+
case 'datetime':
|
|
109
|
+
{
|
|
110
|
+
return parseDateTimeOrTimestamp(value);
|
|
111
|
+
}
|
|
112
|
+
default:
|
|
113
|
+
return value;
|
|
114
|
+
}
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export { parseType as default };
|
|
118
|
+
//# sourceMappingURL=parse-type.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse-type.mjs","sources":["../src/parse-type.ts"],"sourcesContent":["import * as _ from 'lodash';\nimport * as dates from 'date-fns';\n\nconst timeRegex = /^(2[0-3]|[01][0-9]):([0-5][0-9]):([0-5][0-9])(.[0-9]{1,3})?$/;\n\nconst isDate = (v: unknown): v is Date => {\n return dates.isDate(v);\n};\n\nconst parseTime = (value: unknown): string => {\n if (isDate(value)) {\n return dates.format(value, 'HH:mm:ss.SSS');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n const result = value.match(timeRegex);\n\n if (result === null) {\n throw new Error('Invalid time format, expected HH:mm:ss.SSS');\n }\n\n const [, hours, minutes, seconds, fraction = '.000'] = result;\n const fractionPart = _.padEnd(fraction.slice(1), 3, '0');\n\n return `${hours}:${minutes}:${seconds}.${fractionPart}`;\n};\n\nconst parseDate = (value: unknown) => {\n if (isDate(value)) {\n return dates.format(value, 'yyyy-MM-dd');\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n\n if (dates.isValid(date)) return dates.format(date, 'yyyy-MM-dd');\n\n throw new Error(`Invalid format, expected an ISO compatible date`);\n } catch (error) {\n throw new Error(`Invalid format, expected an ISO compatible date`);\n }\n};\n\nconst parseDateTimeOrTimestamp = (value: unknown) => {\n if (isDate(value)) {\n return value;\n }\n\n if (typeof value !== 'string') {\n throw new Error(`Expected a string, got a ${typeof value}`);\n }\n\n try {\n const date = dates.parseISO(value);\n if (dates.isValid(date)) return date;\n\n const milliUnixDate = dates.parse(value, 'T', new Date());\n if (dates.isValid(milliUnixDate)) return milliUnixDate;\n\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n } catch (error) {\n throw new Error(`Invalid format, expected a timestamp or an ISO date`);\n }\n};\n\ntype TypeMap = {\n boolean: boolean;\n integer: number;\n biginteger: number;\n float: number;\n decimal: number;\n time: string;\n date: string;\n timestamp: Date;\n datetime: Date;\n};\n\nexport interface ParseTypeOptions<T extends keyof TypeMap> {\n type: T;\n value: unknown;\n forceCast?: boolean;\n}\n\nconst parseBoolean = (value: unknown, options: { forceCast?: boolean }): boolean => {\n const { forceCast = false } = options;\n\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (typeof value === 'string' || typeof value === 'number') {\n if (['true', 't', '1', 1].includes(value)) {\n return true;\n }\n\n if (['false', 'f', '0', 0].includes(value)) {\n return false;\n }\n }\n\n if (forceCast) {\n return Boolean(value);\n }\n\n throw new Error('Invalid boolean input. Expected \"t\",\"1\",\"true\",\"false\",\"0\",\"f\"');\n};\n\n/**\n * Cast basic values based on attribute type\n */\nconst parseType = <Type extends keyof TypeMap>(options: ParseTypeOptions<Type>): TypeMap[Type] => {\n const { type, value, forceCast } = options;\n\n switch (type) {\n case 'boolean':\n return parseBoolean(value, { forceCast }) as TypeMap[Type];\n case 'integer':\n case 'biginteger':\n case 'float':\n case 'decimal': {\n return _.toNumber(value) as TypeMap[Type];\n }\n case 'time': {\n return parseTime(value) as TypeMap[Type];\n }\n case 'date': {\n return parseDate(value) as TypeMap[Type];\n }\n case 'timestamp':\n case 'datetime': {\n return parseDateTimeOrTimestamp(value) as TypeMap[Type];\n }\n default:\n return value as TypeMap[Type];\n }\n};\n\nexport default parseType;\n"],"names":["timeRegex","isDate","v","dates","parseTime","value","format","Error","result","match","hours","minutes","seconds","fraction","fractionPart","_","padEnd","slice","parseDate","date","parseISO","isValid","error","parseDateTimeOrTimestamp","milliUnixDate","parse","Date","parseBoolean","options","forceCast","includes","Boolean","parseType","type","toNumber"],"mappings":"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"}
|
package/dist/policy.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var fp = require('lodash/fp');
|
|
4
|
+
|
|
5
|
+
const createPolicy = (options)=>{
|
|
6
|
+
const { name = 'unnamed', validator, handler } = options;
|
|
7
|
+
const wrappedValidator = (config)=>{
|
|
8
|
+
if (validator) {
|
|
9
|
+
try {
|
|
10
|
+
validator(config);
|
|
11
|
+
} catch (e) {
|
|
12
|
+
throw new Error(`Invalid config passed to "${name}" policy.`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
return {
|
|
17
|
+
name,
|
|
18
|
+
validator: wrappedValidator,
|
|
19
|
+
handler
|
|
20
|
+
};
|
|
21
|
+
};
|
|
22
|
+
const createPolicyContext = (type, ctx)=>{
|
|
23
|
+
return Object.assign({
|
|
24
|
+
is: fp.eq(type),
|
|
25
|
+
get type () {
|
|
26
|
+
return type;
|
|
27
|
+
}
|
|
28
|
+
}, ctx);
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
exports.createPolicy = createPolicy;
|
|
32
|
+
exports.createPolicyContext = createPolicyContext;
|
|
33
|
+
//# sourceMappingURL=policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.js","sources":["../src/policy.ts"],"sourcesContent":["import { eq } from 'lodash/fp';\n\ninterface Options {\n name: string;\n validator?(config: unknown): void;\n handler(...args: any[]): any;\n}\n\nconst createPolicy = (options: Options) => {\n const { name = 'unnamed', validator, handler } = options;\n\n const wrappedValidator = (config: unknown) => {\n if (validator) {\n try {\n validator(config);\n } catch (e) {\n throw new Error(`Invalid config passed to \"${name}\" policy.`);\n }\n }\n };\n\n return {\n name,\n validator: wrappedValidator,\n handler,\n };\n};\n\nconst createPolicyContext = (type: string, ctx: object) => {\n return Object.assign(\n {\n is: eq(type),\n get type() {\n return type;\n },\n },\n ctx\n );\n};\n\nexport { createPolicy, createPolicyContext };\n"],"names":["createPolicy","options","name","validator","handler","wrappedValidator","config","e","Error","createPolicyContext","type","ctx","Object","assign","is","eq"],"mappings":";;;;AAQA,MAAMA,eAAe,CAACC,OAAAA,GAAAA;IACpB,MAAM,EAAEC,OAAO,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGH,OAAAA;AAEjD,IAAA,MAAMI,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,QAAA,IAAIH,SAAW,EAAA;YACb,IAAI;gBACFA,SAAUG,CAAAA,MAAAA,CAAAA;AACZ,aAAA,CAAE,OAAOC,CAAG,EAAA;AACV,gBAAA,MAAM,IAAIC,KAAM,CAAA,CAAC,0BAA0B,EAAEN,IAAAA,CAAK,SAAS,CAAC,CAAA;AAC9D;AACF;AACF,KAAA;IAEA,OAAO;AACLA,QAAAA,IAAAA;QACAC,SAAWE,EAAAA,gBAAAA;AACXD,QAAAA;AACF,KAAA;AACF;AAEMK,MAAAA,mBAAAA,GAAsB,CAACC,IAAcC,EAAAA,GAAAA,GAAAA;IACzC,OAAOC,MAAAA,CAAOC,MAAM,CAClB;AACEC,QAAAA,EAAAA,EAAIC,KAAGL,CAAAA,IAAAA,CAAAA;AACP,QAAA,IAAIA,IAAO,CAAA,GAAA;YACT,OAAOA,IAAAA;AACT;KAEFC,EAAAA,GAAAA,CAAAA;AAEJ;;;;;"}
|
package/dist/policy.mjs
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { eq } from 'lodash/fp';
|
|
2
|
+
|
|
3
|
+
const createPolicy = (options)=>{
|
|
4
|
+
const { name = 'unnamed', validator, handler } = options;
|
|
5
|
+
const wrappedValidator = (config)=>{
|
|
6
|
+
if (validator) {
|
|
7
|
+
try {
|
|
8
|
+
validator(config);
|
|
9
|
+
} catch (e) {
|
|
10
|
+
throw new Error(`Invalid config passed to "${name}" policy.`);
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
};
|
|
14
|
+
return {
|
|
15
|
+
name,
|
|
16
|
+
validator: wrappedValidator,
|
|
17
|
+
handler
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
const createPolicyContext = (type, ctx)=>{
|
|
21
|
+
return Object.assign({
|
|
22
|
+
is: eq(type),
|
|
23
|
+
get type () {
|
|
24
|
+
return type;
|
|
25
|
+
}
|
|
26
|
+
}, ctx);
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export { createPolicy, createPolicyContext };
|
|
30
|
+
//# sourceMappingURL=policy.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"policy.mjs","sources":["../src/policy.ts"],"sourcesContent":["import { eq } from 'lodash/fp';\n\ninterface Options {\n name: string;\n validator?(config: unknown): void;\n handler(...args: any[]): any;\n}\n\nconst createPolicy = (options: Options) => {\n const { name = 'unnamed', validator, handler } = options;\n\n const wrappedValidator = (config: unknown) => {\n if (validator) {\n try {\n validator(config);\n } catch (e) {\n throw new Error(`Invalid config passed to \"${name}\" policy.`);\n }\n }\n };\n\n return {\n name,\n validator: wrappedValidator,\n handler,\n };\n};\n\nconst createPolicyContext = (type: string, ctx: object) => {\n return Object.assign(\n {\n is: eq(type),\n get type() {\n return type;\n },\n },\n ctx\n );\n};\n\nexport { createPolicy, createPolicyContext };\n"],"names":["createPolicy","options","name","validator","handler","wrappedValidator","config","e","Error","createPolicyContext","type","ctx","Object","assign","is","eq"],"mappings":";;AAQA,MAAMA,eAAe,CAACC,OAAAA,GAAAA;IACpB,MAAM,EAAEC,OAAO,SAAS,EAAEC,SAAS,EAAEC,OAAO,EAAE,GAAGH,OAAAA;AAEjD,IAAA,MAAMI,mBAAmB,CAACC,MAAAA,GAAAA;AACxB,QAAA,IAAIH,SAAW,EAAA;YACb,IAAI;gBACFA,SAAUG,CAAAA,MAAAA,CAAAA;AACZ,aAAA,CAAE,OAAOC,CAAG,EAAA;AACV,gBAAA,MAAM,IAAIC,KAAM,CAAA,CAAC,0BAA0B,EAAEN,IAAAA,CAAK,SAAS,CAAC,CAAA;AAC9D;AACF;AACF,KAAA;IAEA,OAAO;AACLA,QAAAA,IAAAA;QACAC,SAAWE,EAAAA,gBAAAA;AACXD,QAAAA;AACF,KAAA;AACF;AAEMK,MAAAA,mBAAAA,GAAsB,CAACC,IAAcC,EAAAA,GAAAA,GAAAA;IACzC,OAAOC,MAAAA,CAAOC,MAAM,CAClB;AACEC,QAAAA,EAAAA,EAAIC,EAAGL,CAAAA,IAAAA,CAAAA;AACP,QAAA,IAAIA,IAAO,CAAA,GAAA;YACT,OAAOA,IAAAA;AACT;KAEFC,EAAAA,GAAAA,CAAAA;AAEJ;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrays.js","sources":["../../src/primitives/arrays.ts"],"sourcesContent":["const castIncludes = (arr: unknown[], val: unknown, cast: (val: unknown) => unknown): boolean =>\n arr.map((val) => cast(val)).includes(cast(val));\n\nconst includesString = (arr: unknown[], val: unknown) => castIncludes(arr, val, String);\n\nexport { includesString };\n"],"names":["castIncludes","arr","val","cast","map","includes","includesString","String"],"mappings":";;AAAA,MAAMA,YAAe,GAAA,CAACC,GAAgBC,EAAAA,GAAAA,EAAcC,OAClDF,GAAIG,CAAAA,GAAG,CAAC,CAACF,GAAQC,GAAAA,IAAAA,CAAKD,GAAMG,CAAAA,CAAAA,CAAAA,QAAQ,CAACF,IAAKD,CAAAA,GAAAA,CAAAA,CAAAA;AAE5C,MAAMI,iBAAiB,CAACL,GAAAA,EAAgBC,GAAiBF,GAAAA,YAAAA,CAAaC,KAAKC,GAAKK,EAAAA,MAAAA;;;;"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrays.mjs","sources":["../../src/primitives/arrays.ts"],"sourcesContent":["const castIncludes = (arr: unknown[], val: unknown, cast: (val: unknown) => unknown): boolean =>\n arr.map((val) => cast(val)).includes(cast(val));\n\nconst includesString = (arr: unknown[], val: unknown) => castIncludes(arr, val, String);\n\nexport { includesString };\n"],"names":["castIncludes","arr","val","cast","map","includes","includesString","String"],"mappings":"AAAA,MAAMA,YAAe,GAAA,CAACC,GAAgBC,EAAAA,GAAAA,EAAcC,OAClDF,GAAIG,CAAAA,GAAG,CAAC,CAACF,GAAQC,GAAAA,IAAAA,CAAKD,GAAMG,CAAAA,CAAAA,CAAAA,QAAQ,CAACF,IAAKD,CAAAA,GAAAA,CAAAA,CAAAA;AAE5C,MAAMI,iBAAiB,CAACL,GAAAA,EAAgBC,GAAiBF,GAAAA,YAAAA,CAAaC,KAAKC,GAAKK,EAAAA,MAAAA;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
// Using timestamp (milliseconds) to be sure it is unique
|
|
4
|
+
// + converting timestamp to base 36 for better readibility
|
|
5
|
+
const timestampCode = (date)=>{
|
|
6
|
+
const referDate = date ?? new Date();
|
|
7
|
+
return referDate.getTime().toString(36);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
exports.timestampCode = timestampCode;
|
|
11
|
+
//# sourceMappingURL=dates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.js","sources":["../../src/primitives/dates.ts"],"sourcesContent":["// Using timestamp (milliseconds) to be sure it is unique\n// + converting timestamp to base 36 for better readibility\nconst timestampCode = (date?: Date) => {\n const referDate = date ?? new Date();\n\n return referDate.getTime().toString(36);\n};\n\nexport { timestampCode };\n"],"names":["timestampCode","date","referDate","Date","getTime","toString"],"mappings":";;AAAA;AACA;AACA,MAAMA,gBAAgB,CAACC,IAAAA,GAAAA;IACrB,MAAMC,SAAAA,GAAYD,QAAQ,IAAIE,IAAAA,EAAAA;AAE9B,IAAA,OAAOD,SAAUE,CAAAA,OAAO,EAAGC,CAAAA,QAAQ,CAAC,EAAA,CAAA;AACtC;;;;"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// Using timestamp (milliseconds) to be sure it is unique
|
|
2
|
+
// + converting timestamp to base 36 for better readibility
|
|
3
|
+
const timestampCode = (date)=>{
|
|
4
|
+
const referDate = date ?? new Date();
|
|
5
|
+
return referDate.getTime().toString(36);
|
|
6
|
+
};
|
|
7
|
+
|
|
8
|
+
export { timestampCode };
|
|
9
|
+
//# sourceMappingURL=dates.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dates.mjs","sources":["../../src/primitives/dates.ts"],"sourcesContent":["// Using timestamp (milliseconds) to be sure it is unique\n// + converting timestamp to base 36 for better readibility\nconst timestampCode = (date?: Date) => {\n const referDate = date ?? new Date();\n\n return referDate.getTime().toString(36);\n};\n\nexport { timestampCode };\n"],"names":["timestampCode","date","referDate","Date","getTime","toString"],"mappings":"AAAA;AACA;AACA,MAAMA,gBAAgB,CAACC,IAAAA,GAAAA;IACrB,MAAMC,SAAAA,GAAYD,QAAQ,IAAIE,IAAAA,EAAAA;AAE9B,IAAA,OAAOD,SAAUE,CAAAA,OAAO,EAAGC,CAAAA,QAAQ,CAAC,EAAA,CAAA;AACtC;;;;"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash');
|
|
4
|
+
|
|
5
|
+
const keysDeep = (obj, path = [])=>!_.isObject(obj) ? [
|
|
6
|
+
path.join('.')
|
|
7
|
+
] : _.reduce(obj, (acc, next, key)=>_.concat(acc, keysDeep(next, [
|
|
8
|
+
...path,
|
|
9
|
+
key
|
|
10
|
+
])), []);
|
|
11
|
+
|
|
12
|
+
exports.keysDeep = keysDeep;
|
|
13
|
+
//# sourceMappingURL=objects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.js","sources":["../../src/primitives/objects.ts"],"sourcesContent":["import _ from 'lodash';\n\nconst keysDeep = (obj: object, path: string[] = []): string[] =>\n !_.isObject(obj)\n ? [path.join('.')]\n : _.reduce(\n obj,\n (acc, next, key) => _.concat(acc, keysDeep(next, [...path, key])),\n [] as string[]\n );\n\nexport { keysDeep };\n"],"names":["keysDeep","obj","path","_","isObject","join","reduce","acc","next","key","concat"],"mappings":";;;;AAEMA,MAAAA,QAAAA,GAAW,CAACC,GAAAA,EAAaC,IAAiB,GAAA,EAAE,GAChD,CAACC,CAAAA,CAAEC,QAAQ,CAACH,GACR,CAAA,GAAA;AAACC,QAAAA,IAAAA,CAAKG,IAAI,CAAC,GAAA;AAAK,KAAA,GAChBF,CAAEG,CAAAA,MAAM,CACNL,GAAAA,EACA,CAACM,GAAAA,EAAKC,IAAMC,EAAAA,GAAAA,GAAQN,CAAEO,CAAAA,MAAM,CAACH,GAAAA,EAAKP,SAASQ,IAAM,EAAA;AAAIN,YAAAA,GAAAA,IAAAA;AAAMO,YAAAA;AAAI,SAAA,CAAA,CAAA,EAC/D,EAAE;;;;"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import ___default from 'lodash';
|
|
2
|
+
|
|
3
|
+
const keysDeep = (obj, path = [])=>!___default.isObject(obj) ? [
|
|
4
|
+
path.join('.')
|
|
5
|
+
] : ___default.reduce(obj, (acc, next, key)=>___default.concat(acc, keysDeep(next, [
|
|
6
|
+
...path,
|
|
7
|
+
key
|
|
8
|
+
])), []);
|
|
9
|
+
|
|
10
|
+
export { keysDeep };
|
|
11
|
+
//# sourceMappingURL=objects.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"objects.mjs","sources":["../../src/primitives/objects.ts"],"sourcesContent":["import _ from 'lodash';\n\nconst keysDeep = (obj: object, path: string[] = []): string[] =>\n !_.isObject(obj)\n ? [path.join('.')]\n : _.reduce(\n obj,\n (acc, next, key) => _.concat(acc, keysDeep(next, [...path, key])),\n [] as string[]\n );\n\nexport { keysDeep };\n"],"names":["keysDeep","obj","path","_","isObject","join","reduce","acc","next","key","concat"],"mappings":";;AAEMA,MAAAA,QAAAA,GAAW,CAACC,GAAAA,EAAaC,IAAiB,GAAA,EAAE,GAChD,CAACC,UAAAA,CAAEC,QAAQ,CAACH,GACR,CAAA,GAAA;AAACC,QAAAA,IAAAA,CAAKG,IAAI,CAAC,GAAA;AAAK,KAAA,GAChBF,UAAEG,CAAAA,MAAM,CACNL,GAAAA,EACA,CAACM,GAAAA,EAAKC,IAAMC,EAAAA,GAAAA,GAAQN,UAAEO,CAAAA,MAAM,CAACH,GAAAA,EAAKP,SAASQ,IAAM,EAAA;AAAIN,YAAAA,GAAAA,IAAAA;AAAMO,YAAAA;AAAI,SAAA,CAAA,CAAA,EAC/D,EAAE;;;;"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var _ = require('lodash');
|
|
4
|
+
var fp = require('lodash/fp');
|
|
5
|
+
var slugify = require('@sindresorhus/slugify');
|
|
6
|
+
|
|
7
|
+
const nameToSlug = (name, options = {
|
|
8
|
+
separator: '-'
|
|
9
|
+
})=>slugify(name, options);
|
|
10
|
+
const nameToCollectionName = (name)=>slugify(name, {
|
|
11
|
+
separator: '_'
|
|
12
|
+
});
|
|
13
|
+
const toRegressedEnumValue = (value)=>slugify(value, {
|
|
14
|
+
decamelize: false,
|
|
15
|
+
lowercase: false,
|
|
16
|
+
separator: '_'
|
|
17
|
+
});
|
|
18
|
+
const getCommonPath = (...paths)=>{
|
|
19
|
+
const [segments, ...otherSegments] = paths.map((it)=>_.split(it, '/'));
|
|
20
|
+
return _.join(_.takeWhile(segments, (str, index)=>otherSegments.every((it)=>it[index] === str)), '/');
|
|
21
|
+
};
|
|
22
|
+
const isEqual = (a, b)=>String(a) === String(b);
|
|
23
|
+
const isCamelCase = (value)=>/^[a-z][a-zA-Z0-9]+$/.test(value);
|
|
24
|
+
const isKebabCase = (value)=>/^([a-z][a-z0-9]*)(-[a-z0-9]+)*$/.test(value);
|
|
25
|
+
const startsWithANumber = (value)=>/^[0-9]/.test(value);
|
|
26
|
+
const joinBy = (joint, ...args)=>{
|
|
27
|
+
const trim = fp.trimChars(joint);
|
|
28
|
+
const trimEnd = fp.trimCharsEnd(joint);
|
|
29
|
+
const trimStart = fp.trimCharsStart(joint);
|
|
30
|
+
return args.reduce((url, path, index)=>{
|
|
31
|
+
if (args.length === 1) return path;
|
|
32
|
+
if (index === 0) return trimEnd(path);
|
|
33
|
+
if (index === args.length - 1) return url + joint + trimStart(path);
|
|
34
|
+
return url + joint + trim(path);
|
|
35
|
+
}, '');
|
|
36
|
+
};
|
|
37
|
+
const toKebabCase = (value)=>_.kebabCase(value);
|
|
38
|
+
|
|
39
|
+
exports.getCommonPath = getCommonPath;
|
|
40
|
+
exports.isCamelCase = isCamelCase;
|
|
41
|
+
exports.isEqual = isEqual;
|
|
42
|
+
exports.isKebabCase = isKebabCase;
|
|
43
|
+
exports.joinBy = joinBy;
|
|
44
|
+
exports.nameToCollectionName = nameToCollectionName;
|
|
45
|
+
exports.nameToSlug = nameToSlug;
|
|
46
|
+
exports.startsWithANumber = startsWithANumber;
|
|
47
|
+
exports.toKebabCase = toKebabCase;
|
|
48
|
+
exports.toRegressedEnumValue = toRegressedEnumValue;
|
|
49
|
+
//# sourceMappingURL=strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.js","sources":["../../src/primitives/strings.ts"],"sourcesContent":["import _, { kebabCase } from 'lodash';\nimport { trimChars, trimCharsEnd, trimCharsStart } from 'lodash/fp';\nimport slugify from '@sindresorhus/slugify';\n\nconst nameToSlug = (name: string, options: slugify.Options = { separator: '-' }) =>\n slugify(name, options);\n\nconst nameToCollectionName = (name: string) => slugify(name, { separator: '_' });\n\nconst toRegressedEnumValue = (value: string) =>\n slugify(value, {\n decamelize: false,\n lowercase: false,\n separator: '_',\n });\n\nconst getCommonPath = (...paths: string[]) => {\n const [segments, ...otherSegments] = paths.map((it) => _.split(it, '/'));\n return _.join(\n _.takeWhile(segments, (str, index) => otherSegments.every((it) => it[index] === str)),\n '/'\n );\n};\n\nconst isEqual = (a: unknown, b: unknown) => String(a) === String(b);\nconst isCamelCase = (value: string) => /^[a-z][a-zA-Z0-9]+$/.test(value);\nconst isKebabCase = (value: string) => /^([a-z][a-z0-9]*)(-[a-z0-9]+)*$/.test(value);\nconst startsWithANumber = (value: string) => /^[0-9]/.test(value);\n\nconst joinBy = (joint: string, ...args: string[]) => {\n const trim = trimChars(joint);\n const trimEnd = trimCharsEnd(joint);\n const trimStart = trimCharsStart(joint);\n\n return args.reduce((url, path, index) => {\n if (args.length === 1) return path;\n if (index === 0) return trimEnd(path);\n if (index === args.length - 1) return url + joint + trimStart(path);\n return url + joint + trim(path);\n }, '');\n};\n\nconst toKebabCase = (value: string) => kebabCase(value);\n\nexport {\n nameToSlug,\n nameToCollectionName,\n getCommonPath,\n isEqual,\n isCamelCase,\n isKebabCase,\n toKebabCase,\n toRegressedEnumValue,\n startsWithANumber,\n joinBy,\n};\n"],"names":["nameToSlug","name","options","separator","slugify","nameToCollectionName","toRegressedEnumValue","value","decamelize","lowercase","getCommonPath","paths","segments","otherSegments","map","it","_","split","join","takeWhile","str","index","every","isEqual","a","b","String","isCamelCase","test","isKebabCase","startsWithANumber","joinBy","joint","args","trim","trimChars","trimEnd","trimCharsEnd","trimStart","trimCharsStart","reduce","url","path","length","toKebabCase","kebabCase"],"mappings":";;;;;;AAIMA,MAAAA,UAAAA,GAAa,CAACC,IAAAA,EAAcC,OAA2B,GAAA;IAAEC,SAAW,EAAA;AAAI,CAAC,GAC7EC,QAAQH,IAAMC,EAAAA,OAAAA;AAEhB,MAAMG,oBAAuB,GAAA,CAACJ,IAAiBG,GAAAA,OAAAA,CAAQH,IAAM,EAAA;QAAEE,SAAW,EAAA;AAAI,KAAA;AAE9E,MAAMG,oBAAuB,GAAA,CAACC,KAC5BH,GAAAA,OAAAA,CAAQG,KAAO,EAAA;QACbC,UAAY,EAAA,KAAA;QACZC,SAAW,EAAA,KAAA;QACXN,SAAW,EAAA;AACb,KAAA;AAEIO,MAAAA,aAAAA,GAAgB,CAAC,GAAGC,KAAAA,GAAAA;AACxB,IAAA,MAAM,CAACC,QAAAA,EAAU,GAAGC,aAAAA,CAAc,GAAGF,KAAAA,CAAMG,GAAG,CAAC,CAACC,EAAAA,GAAOC,CAAEC,CAAAA,KAAK,CAACF,EAAI,EAAA,GAAA,CAAA,CAAA;AACnE,IAAA,OAAOC,EAAEE,IAAI,CACXF,EAAEG,SAAS,CAACP,UAAU,CAACQ,GAAAA,EAAKC,QAAUR,aAAcS,CAAAA,KAAK,CAAC,CAACP,EAAAA,GAAOA,EAAE,CAACM,KAAAA,CAAM,KAAKD,GAChF,CAAA,CAAA,EAAA,GAAA,CAAA;AAEJ;AAEA,MAAMG,UAAU,CAACC,CAAAA,EAAYC,CAAeC,GAAAA,MAAAA,CAAOF,OAAOE,MAAOD,CAAAA,CAAAA;AACjE,MAAME,WAAc,GAAA,CAACpB,KAAkB,GAAA,qBAAA,CAAsBqB,IAAI,CAACrB,KAAAA;AAClE,MAAMsB,WAAc,GAAA,CAACtB,KAAkB,GAAA,iCAAA,CAAkCqB,IAAI,CAACrB,KAAAA;AAC9E,MAAMuB,iBAAoB,GAAA,CAACvB,KAAkB,GAAA,QAAA,CAASqB,IAAI,CAACrB,KAAAA;AAErDwB,MAAAA,MAAAA,GAAS,CAACC,KAAAA,EAAe,GAAGC,IAAAA,GAAAA;AAChC,IAAA,MAAMC,OAAOC,YAAUH,CAAAA,KAAAA,CAAAA;AACvB,IAAA,MAAMI,UAAUC,eAAaL,CAAAA,KAAAA,CAAAA;AAC7B,IAAA,MAAMM,YAAYC,iBAAeP,CAAAA,KAAAA,CAAAA;AAEjC,IAAA,OAAOC,IAAKO,CAAAA,MAAM,CAAC,CAACC,KAAKC,IAAMrB,EAAAA,KAAAA,GAAAA;AAC7B,QAAA,IAAIY,IAAKU,CAAAA,MAAM,KAAK,CAAA,EAAG,OAAOD,IAAAA;QAC9B,IAAIrB,KAAAA,KAAU,CAAG,EAAA,OAAOe,OAAQM,CAAAA,IAAAA,CAAAA;QAChC,IAAIrB,KAAAA,KAAUY,KAAKU,MAAM,GAAG,GAAG,OAAOF,GAAAA,GAAMT,QAAQM,SAAUI,CAAAA,IAAAA,CAAAA;QAC9D,OAAOD,GAAAA,GAAMT,QAAQE,IAAKQ,CAAAA,IAAAA,CAAAA;KACzB,EAAA,EAAA,CAAA;AACL;AAEME,MAAAA,WAAAA,GAAc,CAACrC,KAAAA,GAAkBsC,WAAUtC,CAAAA,KAAAA;;;;;;;;;;;;;"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import ___default, { kebabCase } from 'lodash';
|
|
2
|
+
import { trimChars, trimCharsEnd, trimCharsStart } from 'lodash/fp';
|
|
3
|
+
import slugify from '@sindresorhus/slugify';
|
|
4
|
+
|
|
5
|
+
const nameToSlug = (name, options = {
|
|
6
|
+
separator: '-'
|
|
7
|
+
})=>slugify(name, options);
|
|
8
|
+
const nameToCollectionName = (name)=>slugify(name, {
|
|
9
|
+
separator: '_'
|
|
10
|
+
});
|
|
11
|
+
const toRegressedEnumValue = (value)=>slugify(value, {
|
|
12
|
+
decamelize: false,
|
|
13
|
+
lowercase: false,
|
|
14
|
+
separator: '_'
|
|
15
|
+
});
|
|
16
|
+
const getCommonPath = (...paths)=>{
|
|
17
|
+
const [segments, ...otherSegments] = paths.map((it)=>___default.split(it, '/'));
|
|
18
|
+
return ___default.join(___default.takeWhile(segments, (str, index)=>otherSegments.every((it)=>it[index] === str)), '/');
|
|
19
|
+
};
|
|
20
|
+
const isEqual = (a, b)=>String(a) === String(b);
|
|
21
|
+
const isCamelCase = (value)=>/^[a-z][a-zA-Z0-9]+$/.test(value);
|
|
22
|
+
const isKebabCase = (value)=>/^([a-z][a-z0-9]*)(-[a-z0-9]+)*$/.test(value);
|
|
23
|
+
const startsWithANumber = (value)=>/^[0-9]/.test(value);
|
|
24
|
+
const joinBy = (joint, ...args)=>{
|
|
25
|
+
const trim = trimChars(joint);
|
|
26
|
+
const trimEnd = trimCharsEnd(joint);
|
|
27
|
+
const trimStart = trimCharsStart(joint);
|
|
28
|
+
return args.reduce((url, path, index)=>{
|
|
29
|
+
if (args.length === 1) return path;
|
|
30
|
+
if (index === 0) return trimEnd(path);
|
|
31
|
+
if (index === args.length - 1) return url + joint + trimStart(path);
|
|
32
|
+
return url + joint + trim(path);
|
|
33
|
+
}, '');
|
|
34
|
+
};
|
|
35
|
+
const toKebabCase = (value)=>kebabCase(value);
|
|
36
|
+
|
|
37
|
+
export { getCommonPath, isCamelCase, isEqual, isKebabCase, joinBy, nameToCollectionName, nameToSlug, startsWithANumber, toKebabCase, toRegressedEnumValue };
|
|
38
|
+
//# sourceMappingURL=strings.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"strings.mjs","sources":["../../src/primitives/strings.ts"],"sourcesContent":["import _, { kebabCase } from 'lodash';\nimport { trimChars, trimCharsEnd, trimCharsStart } from 'lodash/fp';\nimport slugify from '@sindresorhus/slugify';\n\nconst nameToSlug = (name: string, options: slugify.Options = { separator: '-' }) =>\n slugify(name, options);\n\nconst nameToCollectionName = (name: string) => slugify(name, { separator: '_' });\n\nconst toRegressedEnumValue = (value: string) =>\n slugify(value, {\n decamelize: false,\n lowercase: false,\n separator: '_',\n });\n\nconst getCommonPath = (...paths: string[]) => {\n const [segments, ...otherSegments] = paths.map((it) => _.split(it, '/'));\n return _.join(\n _.takeWhile(segments, (str, index) => otherSegments.every((it) => it[index] === str)),\n '/'\n );\n};\n\nconst isEqual = (a: unknown, b: unknown) => String(a) === String(b);\nconst isCamelCase = (value: string) => /^[a-z][a-zA-Z0-9]+$/.test(value);\nconst isKebabCase = (value: string) => /^([a-z][a-z0-9]*)(-[a-z0-9]+)*$/.test(value);\nconst startsWithANumber = (value: string) => /^[0-9]/.test(value);\n\nconst joinBy = (joint: string, ...args: string[]) => {\n const trim = trimChars(joint);\n const trimEnd = trimCharsEnd(joint);\n const trimStart = trimCharsStart(joint);\n\n return args.reduce((url, path, index) => {\n if (args.length === 1) return path;\n if (index === 0) return trimEnd(path);\n if (index === args.length - 1) return url + joint + trimStart(path);\n return url + joint + trim(path);\n }, '');\n};\n\nconst toKebabCase = (value: string) => kebabCase(value);\n\nexport {\n nameToSlug,\n nameToCollectionName,\n getCommonPath,\n isEqual,\n isCamelCase,\n isKebabCase,\n toKebabCase,\n toRegressedEnumValue,\n startsWithANumber,\n joinBy,\n};\n"],"names":["nameToSlug","name","options","separator","slugify","nameToCollectionName","toRegressedEnumValue","value","decamelize","lowercase","getCommonPath","paths","segments","otherSegments","map","it","_","split","join","takeWhile","str","index","every","isEqual","a","b","String","isCamelCase","test","isKebabCase","startsWithANumber","joinBy","joint","args","trim","trimChars","trimEnd","trimCharsEnd","trimStart","trimCharsStart","reduce","url","path","length","toKebabCase","kebabCase"],"mappings":";;;;AAIMA,MAAAA,UAAAA,GAAa,CAACC,IAAAA,EAAcC,OAA2B,GAAA;IAAEC,SAAW,EAAA;AAAI,CAAC,GAC7EC,QAAQH,IAAMC,EAAAA,OAAAA;AAEhB,MAAMG,oBAAuB,GAAA,CAACJ,IAAiBG,GAAAA,OAAAA,CAAQH,IAAM,EAAA;QAAEE,SAAW,EAAA;AAAI,KAAA;AAE9E,MAAMG,oBAAuB,GAAA,CAACC,KAC5BH,GAAAA,OAAAA,CAAQG,KAAO,EAAA;QACbC,UAAY,EAAA,KAAA;QACZC,SAAW,EAAA,KAAA;QACXN,SAAW,EAAA;AACb,KAAA;AAEIO,MAAAA,aAAAA,GAAgB,CAAC,GAAGC,KAAAA,GAAAA;AACxB,IAAA,MAAM,CAACC,QAAAA,EAAU,GAAGC,aAAAA,CAAc,GAAGF,KAAAA,CAAMG,GAAG,CAAC,CAACC,EAAAA,GAAOC,UAAEC,CAAAA,KAAK,CAACF,EAAI,EAAA,GAAA,CAAA,CAAA;AACnE,IAAA,OAAOC,WAAEE,IAAI,CACXF,WAAEG,SAAS,CAACP,UAAU,CAACQ,GAAAA,EAAKC,QAAUR,aAAcS,CAAAA,KAAK,CAAC,CAACP,EAAAA,GAAOA,EAAE,CAACM,KAAAA,CAAM,KAAKD,GAChF,CAAA,CAAA,EAAA,GAAA,CAAA;AAEJ;AAEA,MAAMG,UAAU,CAACC,CAAAA,EAAYC,CAAeC,GAAAA,MAAAA,CAAOF,OAAOE,MAAOD,CAAAA,CAAAA;AACjE,MAAME,WAAc,GAAA,CAACpB,KAAkB,GAAA,qBAAA,CAAsBqB,IAAI,CAACrB,KAAAA;AAClE,MAAMsB,WAAc,GAAA,CAACtB,KAAkB,GAAA,iCAAA,CAAkCqB,IAAI,CAACrB,KAAAA;AAC9E,MAAMuB,iBAAoB,GAAA,CAACvB,KAAkB,GAAA,QAAA,CAASqB,IAAI,CAACrB,KAAAA;AAErDwB,MAAAA,MAAAA,GAAS,CAACC,KAAAA,EAAe,GAAGC,IAAAA,GAAAA;AAChC,IAAA,MAAMC,OAAOC,SAAUH,CAAAA,KAAAA,CAAAA;AACvB,IAAA,MAAMI,UAAUC,YAAaL,CAAAA,KAAAA,CAAAA;AAC7B,IAAA,MAAMM,YAAYC,cAAeP,CAAAA,KAAAA,CAAAA;AAEjC,IAAA,OAAOC,IAAKO,CAAAA,MAAM,CAAC,CAACC,KAAKC,IAAMrB,EAAAA,KAAAA,GAAAA;AAC7B,QAAA,IAAIY,IAAKU,CAAAA,MAAM,KAAK,CAAA,EAAG,OAAOD,IAAAA;QAC9B,IAAIrB,KAAAA,KAAU,CAAG,EAAA,OAAOe,OAAQM,CAAAA,IAAAA,CAAAA;QAChC,IAAIrB,KAAAA,KAAUY,KAAKU,MAAM,GAAG,GAAG,OAAOF,GAAAA,GAAMT,QAAQM,SAAUI,CAAAA,IAAAA,CAAAA;QAC9D,OAAOD,GAAAA,GAAMT,QAAQE,IAAKQ,CAAAA,IAAAA,CAAAA;KACzB,EAAA,EAAA,CAAA;AACL;AAEME,MAAAA,WAAAA,GAAc,CAACrC,KAAAA,GAAkBsC,SAAUtC,CAAAA,KAAAA;;;;"}
|