@pol-studios/db 1.0.9 → 1.0.11
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/DataLayerContext-CL6alnkb.d.ts +755 -0
- package/dist/UserMetadataContext-B8gVWGMl.d.ts +35 -0
- package/dist/UserMetadataContext-DntmpK41.d.ts +33 -0
- package/dist/auth/context.d.ts +3 -2
- package/dist/auth/context.js +22 -12786
- package/dist/auth/context.js.map +1 -1
- package/dist/auth/guards.js +12 -7640
- package/dist/auth/guards.js.map +1 -1
- package/dist/auth/hooks.d.ts +3 -3
- package/dist/auth/hooks.js +26 -10591
- package/dist/auth/hooks.js.map +1 -1
- package/dist/auth/index.d.ts +3 -2
- package/dist/auth/index.js +45 -13008
- package/dist/auth/index.js.map +1 -1
- package/dist/{canvas-UVNDA54X.node → canvas-C4TBBDUL.node} +0 -0
- package/dist/canvas-ZQNCL7JL.js +1541 -0
- package/dist/canvas-ZQNCL7JL.js.map +1 -0
- package/dist/chunk-3PJTNH2L.js +2778 -0
- package/dist/chunk-3PJTNH2L.js.map +1 -0
- package/dist/chunk-5EFDS7SR.js +205 -0
- package/dist/chunk-5EFDS7SR.js.map +1 -0
- package/dist/chunk-7SCJNYTE.js +1459 -0
- package/dist/chunk-7SCJNYTE.js.map +1 -0
- package/dist/chunk-DJ6VLEAL.js +247 -0
- package/dist/chunk-DJ6VLEAL.js.map +1 -0
- package/dist/chunk-GC3TBUWE.js +14 -0
- package/dist/chunk-GC3TBUWE.js.map +1 -0
- package/dist/chunk-H3LNH2NT.js +611 -0
- package/dist/chunk-H3LNH2NT.js.map +1 -0
- package/dist/chunk-H6365JPC.js +1858 -0
- package/dist/chunk-H6365JPC.js.map +1 -0
- package/dist/chunk-HAWJTZCK.js +86 -0
- package/dist/chunk-HAWJTZCK.js.map +1 -0
- package/dist/chunk-J4ZVCXZ4.js +1 -0
- package/dist/chunk-J4ZVCXZ4.js.map +1 -0
- package/dist/chunk-JAATANS3.js +429 -0
- package/dist/chunk-JAATANS3.js.map +1 -0
- package/dist/chunk-LNJ3WF7V.js +470 -0
- package/dist/chunk-LNJ3WF7V.js.map +1 -0
- package/dist/chunk-N26IEHZT.js +79 -0
- package/dist/chunk-N26IEHZT.js.map +1 -0
- package/dist/chunk-NSIAAYW3.js +1 -0
- package/dist/chunk-NSIAAYW3.js.map +1 -0
- package/dist/chunk-NZON56CB.js +3864 -0
- package/dist/chunk-NZON56CB.js.map +1 -0
- package/dist/chunk-OQ7U6EQ3.js +7550 -0
- package/dist/chunk-OQ7U6EQ3.js.map +1 -0
- package/dist/chunk-P4UZ7IXC.js +42 -0
- package/dist/chunk-P4UZ7IXC.js.map +1 -0
- package/dist/chunk-SM73S2DY.js +11 -0
- package/dist/chunk-SM73S2DY.js.map +1 -0
- package/dist/chunk-TKWR5AAY.js +415 -0
- package/dist/chunk-TKWR5AAY.js.map +1 -0
- package/dist/chunk-U5UNPBKB.js +501 -0
- package/dist/chunk-U5UNPBKB.js.map +1 -0
- package/dist/chunk-WGDJ4IXR.js +921 -0
- package/dist/chunk-WGDJ4IXR.js.map +1 -0
- package/dist/chunk-WVF7RUW5.js +186 -0
- package/dist/chunk-WVF7RUW5.js.map +1 -0
- package/dist/chunk-X3HZLNBV.js +2129 -0
- package/dist/chunk-X3HZLNBV.js.map +1 -0
- package/dist/chunk-XU3SBFAG.js +5205 -0
- package/dist/chunk-XU3SBFAG.js.map +1 -0
- package/dist/chunk-ZVBHWU7O.js +1412 -0
- package/dist/chunk-ZVBHWU7O.js.map +1 -0
- package/dist/client/index.d.ts +1 -1
- package/dist/client/index.js +54 -163
- package/dist/client/index.js.map +1 -1
- package/dist/core/index.d.ts +19 -0
- package/dist/{index-BFu5_dS8.d.ts → database.types-ChFCG-4M.d.ts} +1 -177
- package/dist/dist-NDNRSNOG.js +521 -0
- package/dist/dist-NDNRSNOG.js.map +1 -0
- package/dist/gen/index.js +188 -1280
- package/dist/gen/index.js.map +1 -1
- package/dist/hooks/index.d.ts +10 -3
- package/dist/hooks/index.js +20 -8695
- package/dist/hooks/index.js.map +1 -1
- package/dist/index-CQLyNG6A.d.ts +433 -0
- package/dist/index.d.ts +12 -8
- package/dist/index.js +447 -47848
- package/dist/index.js.map +1 -1
- package/dist/index.native.d.ts +373 -33
- package/dist/index.native.js +432 -25048
- package/dist/index.native.js.map +1 -1
- package/dist/index.web.d.ts +10 -7
- package/dist/index.web.js +585 -43773
- package/dist/index.web.js.map +1 -1
- package/dist/mutation/index.d.ts +2 -2
- package/dist/mutation/index.js +331 -4777
- package/dist/mutation/index.js.map +1 -1
- package/dist/parser/index.js +45 -3697
- package/dist/parser/index.js.map +1 -1
- package/dist/pdf-PHXP7RHD.js +20336 -0
- package/dist/pdf-PHXP7RHD.js.map +1 -0
- package/dist/powersync-bridge/index.d.ts +284 -0
- package/dist/powersync-bridge/index.js +22 -0
- package/dist/powersync-bridge/index.js.map +1 -0
- package/dist/query/index.js +31 -13175
- package/dist/query/index.js.map +1 -1
- package/dist/realtime/index.js +279 -12541
- package/dist/realtime/index.js.map +1 -1
- package/dist/{UserMetadataContext-BYYqA6LI.d.ts → setupAuthContext-Kv-THH-h.d.ts} +1 -29
- package/dist/types/index.d.ts +5 -1
- package/dist/types/index.js +14 -0
- package/dist/{useBatchUpsert-CSQVX7w8.d.ts → useBatchUpsert-9OYjibLh.d.ts} +1 -1
- package/dist/{useDbCount-RGCuHmHp.d.ts → useDbCount-BG356T9i.d.ts} +3 -719
- package/dist/{useReceiptAI-Bn0czE7C.d.ts → useReceiptAI-6HkRpRml.d.ts} +1 -1
- package/dist/{useResolveFeedback-CpZPP8Pw.d.ts → useResolveFeedback-BWmatBlE.d.ts} +26 -45
- package/dist/{useSupabase-pPhUZHcl.d.ts → useSupabase-DvWVuHHE.d.ts} +2 -1
- package/dist/with-auth/index.d.ts +704 -0
- package/dist/with-auth/index.js +1221 -0
- package/dist/with-auth/index.js.map +1 -0
- package/package.json +25 -10
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/tools/output/categories.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/tools/output/properties.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/tools/output/scripts.js","../../../../../node_modules/.pnpm/moment@2.30.1/node_modules/moment/moment.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/xregexp.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/build.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/matchrecursive.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-base.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-categories.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-properties.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/addons/unicode-scripts.js","../../../../../node_modules/.pnpm/xregexp@5.1.1/node_modules/xregexp/src/index.js","../../../../../node_modules/.pnpm/flat@6.0.1/node_modules/flat/index.js","../../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/utils.ts","../../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/equals.ts","../../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/comparator.ts","../../../../../node_modules/.pnpm/fast-equals@5.2.2/node_modules/fast-equals/src/index.ts","../../../../../node_modules/.pnpm/is-what@4.1.16/node_modules/is-what/dist/index.js","../../../../../node_modules/.pnpm/merge-anything@5.1.7/node_modules/merge-anything/dist/index.js","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/query-types.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/extract-paths-from-filter.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/remove-first-path-element.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/group-paths-recursive.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-select-param.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/remove-alias-from-declaration.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/build-select-statement.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/dedupe.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/build-normalized-query.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetch/build-mutation-fetcher-response.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/get.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-plain-object.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/get-table-from-url.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/like-query-builder.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/get-table.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/cache-data-types.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/response-types.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/encode-object.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/sort-search-param.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-postgrest-builder.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-postgrest-transform-builder.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/set-filter-value.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-iso-date-string.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-value.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-order-by-key.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/parse-order-by.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/find-filters.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/cursor-pagination-fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/delete-fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate/should-revalidate-relation.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate/should-revalidate-table.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate/transformers.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/delete-item.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/insert-fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/binary-search.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/if-date-get-time.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/sorted-comparator.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/find-index-ordered.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/mutate-item.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/offset-pagination-fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/filter/denormalize.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/filter-filter-definitions-by-paths.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-object.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/like-postgrest-builder.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/operators.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/find-last-index.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/lib/is-not-null.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/postgrest-query-parser.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/postgrest-filter.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/postgrest-parser.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/update-fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/upsert-fetcher.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/upsert-item.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-core@0.12.3_patch_hash=pk7qqc22n5ajzpk5ax7g6nuane_@supabase+postgrest-js@2.81.1/node_modules/@supabase-cache-helpers/postgrest-core/src/revalidate-tables.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-delete-item.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/lib/use-postgrest-filter-cache.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/lib/key.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/lib/use-queries-for-table-loader.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-mutate-item.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-revalidate-tables.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/cache/use-upsert-item.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-delete-many-mutation.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-delete-mutation.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-insert-mutation.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/get-user-response.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-update-mutation.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/mutate/use-upsert-mutation.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/build-query-opts.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/fetch.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/prefetch.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/query/use-query.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/subscribe/use-subscription-query.ts","../../../../../node_modules/.pnpm/@supabase-cache-helpers+postgrest-react-query@1.13.6_@supabase+postgrest-js@2.81.1_@tanstack+_wd4mw7pdvrnwzvx5icrnvkq6j4/node_modules/@supabase-cache-helpers/postgrest-react-query/src/subscribe/use-subscription.ts","../../src/realtime/useRealtime.ts","../../src/client/useSupabase.tsx","../../src/client/config.ts","../../src/utils/uuid.ts","../../../utils/dist/index.js","../../../../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/class-group-utils.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/lru-cache.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/parse-class-name.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/config-utils.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/merge-classlist.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/tw-join.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/create-tailwind-merge.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/from-theme.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/validators.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/default-config.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/merge-configs.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/extend-tailwind-merge.ts","../../../../../node_modules/.pnpm/tailwind-merge@2.6.0/node_modules/tailwind-merge/src/lib/tw-merge.ts","../../src/realtime/useRealtimeQuery.ts","../../src/parser/lib/sort-search-param.ts","../../src/parser/lib/encode-object.ts","../../src/parser/lib/is-object.ts","../../src/parser/lib/find-last-index.ts","../../src/parser/lib/is-not-null.ts","../../src/parser/lib/operators.ts","../../src/parser/lib/parse-select-param.ts","../../src/parser/lib/is-iso-date-string.ts","../../src/parser/lib/parse-value.ts","../../src/parser/postgrest-query-parser.ts","../../src/parser/PostgrestParser.ts"],"sourcesContent":["module.exports = [\n {\n 'name': 'C',\n 'alias': 'Other',\n 'isBmpLast': true,\n 'bmp': '\\0-\\x1F\\x7F-\\x9F\\xAD\\u0378\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2\\u0530\\u0557\\u0558\\u058B\\u058C\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F5-\\u0605\\u061C\\u06DD\\u070E\\u070F\\u074B\\u074C\\u07B2-\\u07BF\\u07FB\\u07FC\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F\\u086B-\\u086F\\u088F-\\u0897\\u08E2\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A77-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A\\u0C3B\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C76\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDC\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D50-\\u0D53\\u0D64\\u0D65\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F6\\u13F7\\u13FE\\u13FF\\u169D-\\u169F\\u16F9-\\u16FF\\u1716-\\u171E\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u180E\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE\\u1AAF\\u1ACF-\\u1AFF\\u1B4D-\\u1B4F\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC8-\\u1CCF\\u1CFB-\\u1CFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20C1-\\u20CF\\u20F1-\\u20FF\\u218C-\\u218F\\u2427-\\u243F\\u244B-\\u245F\\u2B74\\u2B75\\u2B96\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E5E-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u3130\\u318F\\u31E4-\\u31EF\\u321F\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA6F8-\\uA6FF\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA82D-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C6-\\uA8CD\\uA8DA-\\uA8DF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB6C-\\uAB6F\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uF8FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC3-\\uFBD2\\uFD90\\uFD91\\uFDC8-\\uFDCE\\uFDD0-\\uFDEF\\uFE1A-\\uFE1F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD-\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFFB\\uFFFE\\uFFFF',\n 'astral': '\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDCFF\\uDD03-\\uDD06\\uDD34-\\uDD36\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEFC-\\uDEFF\\uDF24-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDFC4-\\uDFC7\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6E\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56\\uDC9F-\\uDCA6\\uDCB0-\\uDCDF\\uDCF3\\uDCF6-\\uDCFA\\uDD1C-\\uDD1E\\uDD3A-\\uDD3E\\uDD40-\\uDD7F\\uDDB8-\\uDDBB\\uDDD0\\uDDD1\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE49-\\uDE4F\\uDE59-\\uDE5F\\uDEA0-\\uDEBF\\uDEE7-\\uDEEA\\uDEF7-\\uDEFF\\uDF36-\\uDF38\\uDF56\\uDF57\\uDF73-\\uDF77\\uDF92-\\uDF98\\uDF9D-\\uDFA8\\uDFB0-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCF9\\uDD28-\\uDD2F\\uDD3A-\\uDE5F\\uDE7F\\uDEAA\\uDEAE\\uDEAF\\uDEB2-\\uDEFF\\uDF28-\\uDF2F\\uDF5A-\\uDF6F\\uDF8A-\\uDFAF\\uDFCC-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC4E-\\uDC51\\uDC76-\\uDC7E\\uDCBD\\uDCC3-\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD48-\\uDD4F\\uDD77-\\uDD7F\\uDDE0\\uDDF5-\\uDDFF\\uDE12\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEAA-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC5C\\uDC62-\\uDC7F\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDDE-\\uDDFF\\uDE45-\\uDE4F\\uDE5A-\\uDE5F\\uDE6D-\\uDE7F\\uDEBA-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF47-\\uDFFF]|\\uD806[\\uDC3C-\\uDC9F\\uDCF3-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD47-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE5-\\uDDFF\\uDE48-\\uDE4F\\uDEA3-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC46-\\uDC4F\\uDC6D-\\uDC6F\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF9-\\uDFAF\\uDFB1-\\uDFBF\\uDFF2-\\uDFFE]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F\\uDC75-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD832\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDBFF][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF3-\\uDFFF]|\\uD80D[\\uDC2F-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDE6D\\uDEBF\\uDECA-\\uDECF\\uDEEE\\uDEEF\\uDEF6-\\uDEFF\\uDF46-\\uDF4F\\uDF5A\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE9B-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A\\uDC9B\\uDCA0-\\uDFFF]|\\uD833[\\uDC00-\\uDEFF\\uDF2E\\uDF2F\\uDF47-\\uDF4F\\uDFC4-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDD73-\\uDD7A\\uDDEB-\\uDDFF\\uDE46-\\uDEDF\\uDEF4-\\uDEFF\\uDF57-\\uDF5F\\uDF79-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]|\\uD836[\\uDE8C-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD50-\\uDE8F\\uDEAF-\\uDEBF\\uDEFA-\\uDEFE\\uDF00-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5\\uDCC6\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDD5D\\uDD60-\\uDFFF]|\\uD83B[\\uDC00-\\uDC70\\uDCB5-\\uDD00\\uDD3E-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDCFF\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDC\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFEF\\uDFF1-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7D-\\uDE7F\\uDE87-\\uDE8F\\uDEAD-\\uDEAF\\uDEBB-\\uDEBF\\uDEC6-\\uDECF\\uDEDA-\\uDEDF\\uDEE8-\\uDEEF\\uDEF7-\\uDEFF\\uDF93\\uDFCB-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00-\\uDCFF\\uDDF0-\\uDFFF]'\n },\n {\n 'name': 'Cc',\n 'alias': 'Control',\n 'bmp': '\\0-\\x1F\\x7F-\\x9F'\n },\n {\n 'name': 'Cf',\n 'alias': 'Format',\n 'bmp': '\\xAD\\u0600-\\u0605\\u061C\\u06DD\\u070F\\u0890\\u0891\\u08E2\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u2064\\u2066-\\u206F\\uFEFF\\uFFF9-\\uFFFB',\n 'astral': '\\uD804[\\uDCBD\\uDCCD]|\\uD80D[\\uDC30-\\uDC38]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]'\n },\n {\n 'name': 'Cn',\n 'alias': 'Unassigned',\n 'bmp': '\\u0378\\u0379\\u0380-\\u0383\\u038B\\u038D\\u03A2\\u0530\\u0557\\u0558\\u058B\\u058C\\u0590\\u05C8-\\u05CF\\u05EB-\\u05EE\\u05F5-\\u05FF\\u070E\\u074B\\u074C\\u07B2-\\u07BF\\u07FB\\u07FC\\u082E\\u082F\\u083F\\u085C\\u085D\\u085F\\u086B-\\u086F\\u088F\\u0892-\\u0897\\u0984\\u098D\\u098E\\u0991\\u0992\\u09A9\\u09B1\\u09B3-\\u09B5\\u09BA\\u09BB\\u09C5\\u09C6\\u09C9\\u09CA\\u09CF-\\u09D6\\u09D8-\\u09DB\\u09DE\\u09E4\\u09E5\\u09FF\\u0A00\\u0A04\\u0A0B-\\u0A0E\\u0A11\\u0A12\\u0A29\\u0A31\\u0A34\\u0A37\\u0A3A\\u0A3B\\u0A3D\\u0A43-\\u0A46\\u0A49\\u0A4A\\u0A4E-\\u0A50\\u0A52-\\u0A58\\u0A5D\\u0A5F-\\u0A65\\u0A77-\\u0A80\\u0A84\\u0A8E\\u0A92\\u0AA9\\u0AB1\\u0AB4\\u0ABA\\u0ABB\\u0AC6\\u0ACA\\u0ACE\\u0ACF\\u0AD1-\\u0ADF\\u0AE4\\u0AE5\\u0AF2-\\u0AF8\\u0B00\\u0B04\\u0B0D\\u0B0E\\u0B11\\u0B12\\u0B29\\u0B31\\u0B34\\u0B3A\\u0B3B\\u0B45\\u0B46\\u0B49\\u0B4A\\u0B4E-\\u0B54\\u0B58-\\u0B5B\\u0B5E\\u0B64\\u0B65\\u0B78-\\u0B81\\u0B84\\u0B8B-\\u0B8D\\u0B91\\u0B96-\\u0B98\\u0B9B\\u0B9D\\u0BA0-\\u0BA2\\u0BA5-\\u0BA7\\u0BAB-\\u0BAD\\u0BBA-\\u0BBD\\u0BC3-\\u0BC5\\u0BC9\\u0BCE\\u0BCF\\u0BD1-\\u0BD6\\u0BD8-\\u0BE5\\u0BFB-\\u0BFF\\u0C0D\\u0C11\\u0C29\\u0C3A\\u0C3B\\u0C45\\u0C49\\u0C4E-\\u0C54\\u0C57\\u0C5B\\u0C5C\\u0C5E\\u0C5F\\u0C64\\u0C65\\u0C70-\\u0C76\\u0C8D\\u0C91\\u0CA9\\u0CB4\\u0CBA\\u0CBB\\u0CC5\\u0CC9\\u0CCE-\\u0CD4\\u0CD7-\\u0CDC\\u0CDF\\u0CE4\\u0CE5\\u0CF0\\u0CF3-\\u0CFF\\u0D0D\\u0D11\\u0D45\\u0D49\\u0D50-\\u0D53\\u0D64\\u0D65\\u0D80\\u0D84\\u0D97-\\u0D99\\u0DB2\\u0DBC\\u0DBE\\u0DBF\\u0DC7-\\u0DC9\\u0DCB-\\u0DCE\\u0DD5\\u0DD7\\u0DE0-\\u0DE5\\u0DF0\\u0DF1\\u0DF5-\\u0E00\\u0E3B-\\u0E3E\\u0E5C-\\u0E80\\u0E83\\u0E85\\u0E8B\\u0EA4\\u0EA6\\u0EBE\\u0EBF\\u0EC5\\u0EC7\\u0ECE\\u0ECF\\u0EDA\\u0EDB\\u0EE0-\\u0EFF\\u0F48\\u0F6D-\\u0F70\\u0F98\\u0FBD\\u0FCD\\u0FDB-\\u0FFF\\u10C6\\u10C8-\\u10CC\\u10CE\\u10CF\\u1249\\u124E\\u124F\\u1257\\u1259\\u125E\\u125F\\u1289\\u128E\\u128F\\u12B1\\u12B6\\u12B7\\u12BF\\u12C1\\u12C6\\u12C7\\u12D7\\u1311\\u1316\\u1317\\u135B\\u135C\\u137D-\\u137F\\u139A-\\u139F\\u13F6\\u13F7\\u13FE\\u13FF\\u169D-\\u169F\\u16F9-\\u16FF\\u1716-\\u171E\\u1737-\\u173F\\u1754-\\u175F\\u176D\\u1771\\u1774-\\u177F\\u17DE\\u17DF\\u17EA-\\u17EF\\u17FA-\\u17FF\\u181A-\\u181F\\u1879-\\u187F\\u18AB-\\u18AF\\u18F6-\\u18FF\\u191F\\u192C-\\u192F\\u193C-\\u193F\\u1941-\\u1943\\u196E\\u196F\\u1975-\\u197F\\u19AC-\\u19AF\\u19CA-\\u19CF\\u19DB-\\u19DD\\u1A1C\\u1A1D\\u1A5F\\u1A7D\\u1A7E\\u1A8A-\\u1A8F\\u1A9A-\\u1A9F\\u1AAE\\u1AAF\\u1ACF-\\u1AFF\\u1B4D-\\u1B4F\\u1B7F\\u1BF4-\\u1BFB\\u1C38-\\u1C3A\\u1C4A-\\u1C4C\\u1C89-\\u1C8F\\u1CBB\\u1CBC\\u1CC8-\\u1CCF\\u1CFB-\\u1CFF\\u1F16\\u1F17\\u1F1E\\u1F1F\\u1F46\\u1F47\\u1F4E\\u1F4F\\u1F58\\u1F5A\\u1F5C\\u1F5E\\u1F7E\\u1F7F\\u1FB5\\u1FC5\\u1FD4\\u1FD5\\u1FDC\\u1FF0\\u1FF1\\u1FF5\\u1FFF\\u2065\\u2072\\u2073\\u208F\\u209D-\\u209F\\u20C1-\\u20CF\\u20F1-\\u20FF\\u218C-\\u218F\\u2427-\\u243F\\u244B-\\u245F\\u2B74\\u2B75\\u2B96\\u2CF4-\\u2CF8\\u2D26\\u2D28-\\u2D2C\\u2D2E\\u2D2F\\u2D68-\\u2D6E\\u2D71-\\u2D7E\\u2D97-\\u2D9F\\u2DA7\\u2DAF\\u2DB7\\u2DBF\\u2DC7\\u2DCF\\u2DD7\\u2DDF\\u2E5E-\\u2E7F\\u2E9A\\u2EF4-\\u2EFF\\u2FD6-\\u2FEF\\u2FFC-\\u2FFF\\u3040\\u3097\\u3098\\u3100-\\u3104\\u3130\\u318F\\u31E4-\\u31EF\\u321F\\uA48D-\\uA48F\\uA4C7-\\uA4CF\\uA62C-\\uA63F\\uA6F8-\\uA6FF\\uA7CB-\\uA7CF\\uA7D2\\uA7D4\\uA7DA-\\uA7F1\\uA82D-\\uA82F\\uA83A-\\uA83F\\uA878-\\uA87F\\uA8C6-\\uA8CD\\uA8DA-\\uA8DF\\uA954-\\uA95E\\uA97D-\\uA97F\\uA9CE\\uA9DA-\\uA9DD\\uA9FF\\uAA37-\\uAA3F\\uAA4E\\uAA4F\\uAA5A\\uAA5B\\uAAC3-\\uAADA\\uAAF7-\\uAB00\\uAB07\\uAB08\\uAB0F\\uAB10\\uAB17-\\uAB1F\\uAB27\\uAB2F\\uAB6C-\\uAB6F\\uABEE\\uABEF\\uABFA-\\uABFF\\uD7A4-\\uD7AF\\uD7C7-\\uD7CA\\uD7FC-\\uD7FF\\uFA6E\\uFA6F\\uFADA-\\uFAFF\\uFB07-\\uFB12\\uFB18-\\uFB1C\\uFB37\\uFB3D\\uFB3F\\uFB42\\uFB45\\uFBC3-\\uFBD2\\uFD90\\uFD91\\uFDC8-\\uFDCE\\uFDD0-\\uFDEF\\uFE1A-\\uFE1F\\uFE53\\uFE67\\uFE6C-\\uFE6F\\uFE75\\uFEFD\\uFEFE\\uFF00\\uFFBF-\\uFFC1\\uFFC8\\uFFC9\\uFFD0\\uFFD1\\uFFD8\\uFFD9\\uFFDD-\\uFFDF\\uFFE7\\uFFEF-\\uFFF8\\uFFFE\\uFFFF',\n 'astral': '\\uD800[\\uDC0C\\uDC27\\uDC3B\\uDC3E\\uDC4E\\uDC4F\\uDC5E-\\uDC7F\\uDCFB-\\uDCFF\\uDD03-\\uDD06\\uDD34-\\uDD36\\uDD8F\\uDD9D-\\uDD9F\\uDDA1-\\uDDCF\\uDDFE-\\uDE7F\\uDE9D-\\uDE9F\\uDED1-\\uDEDF\\uDEFC-\\uDEFF\\uDF24-\\uDF2C\\uDF4B-\\uDF4F\\uDF7B-\\uDF7F\\uDF9E\\uDFC4-\\uDFC7\\uDFD6-\\uDFFF]|\\uD801[\\uDC9E\\uDC9F\\uDCAA-\\uDCAF\\uDCD4-\\uDCD7\\uDCFC-\\uDCFF\\uDD28-\\uDD2F\\uDD64-\\uDD6E\\uDD7B\\uDD8B\\uDD93\\uDD96\\uDDA2\\uDDB2\\uDDBA\\uDDBD-\\uDDFF\\uDF37-\\uDF3F\\uDF56-\\uDF5F\\uDF68-\\uDF7F\\uDF86\\uDFB1\\uDFBB-\\uDFFF]|\\uD802[\\uDC06\\uDC07\\uDC09\\uDC36\\uDC39-\\uDC3B\\uDC3D\\uDC3E\\uDC56\\uDC9F-\\uDCA6\\uDCB0-\\uDCDF\\uDCF3\\uDCF6-\\uDCFA\\uDD1C-\\uDD1E\\uDD3A-\\uDD3E\\uDD40-\\uDD7F\\uDDB8-\\uDDBB\\uDDD0\\uDDD1\\uDE04\\uDE07-\\uDE0B\\uDE14\\uDE18\\uDE36\\uDE37\\uDE3B-\\uDE3E\\uDE49-\\uDE4F\\uDE59-\\uDE5F\\uDEA0-\\uDEBF\\uDEE7-\\uDEEA\\uDEF7-\\uDEFF\\uDF36-\\uDF38\\uDF56\\uDF57\\uDF73-\\uDF77\\uDF92-\\uDF98\\uDF9D-\\uDFA8\\uDFB0-\\uDFFF]|\\uD803[\\uDC49-\\uDC7F\\uDCB3-\\uDCBF\\uDCF3-\\uDCF9\\uDD28-\\uDD2F\\uDD3A-\\uDE5F\\uDE7F\\uDEAA\\uDEAE\\uDEAF\\uDEB2-\\uDEFF\\uDF28-\\uDF2F\\uDF5A-\\uDF6F\\uDF8A-\\uDFAF\\uDFCC-\\uDFDF\\uDFF7-\\uDFFF]|\\uD804[\\uDC4E-\\uDC51\\uDC76-\\uDC7E\\uDCC3-\\uDCCC\\uDCCE\\uDCCF\\uDCE9-\\uDCEF\\uDCFA-\\uDCFF\\uDD35\\uDD48-\\uDD4F\\uDD77-\\uDD7F\\uDDE0\\uDDF5-\\uDDFF\\uDE12\\uDE3F-\\uDE7F\\uDE87\\uDE89\\uDE8E\\uDE9E\\uDEAA-\\uDEAF\\uDEEB-\\uDEEF\\uDEFA-\\uDEFF\\uDF04\\uDF0D\\uDF0E\\uDF11\\uDF12\\uDF29\\uDF31\\uDF34\\uDF3A\\uDF45\\uDF46\\uDF49\\uDF4A\\uDF4E\\uDF4F\\uDF51-\\uDF56\\uDF58-\\uDF5C\\uDF64\\uDF65\\uDF6D-\\uDF6F\\uDF75-\\uDFFF]|\\uD805[\\uDC5C\\uDC62-\\uDC7F\\uDCC8-\\uDCCF\\uDCDA-\\uDD7F\\uDDB6\\uDDB7\\uDDDE-\\uDDFF\\uDE45-\\uDE4F\\uDE5A-\\uDE5F\\uDE6D-\\uDE7F\\uDEBA-\\uDEBF\\uDECA-\\uDEFF\\uDF1B\\uDF1C\\uDF2C-\\uDF2F\\uDF47-\\uDFFF]|\\uD806[\\uDC3C-\\uDC9F\\uDCF3-\\uDCFE\\uDD07\\uDD08\\uDD0A\\uDD0B\\uDD14\\uDD17\\uDD36\\uDD39\\uDD3A\\uDD47-\\uDD4F\\uDD5A-\\uDD9F\\uDDA8\\uDDA9\\uDDD8\\uDDD9\\uDDE5-\\uDDFF\\uDE48-\\uDE4F\\uDEA3-\\uDEAF\\uDEF9-\\uDFFF]|\\uD807[\\uDC09\\uDC37\\uDC46-\\uDC4F\\uDC6D-\\uDC6F\\uDC90\\uDC91\\uDCA8\\uDCB7-\\uDCFF\\uDD07\\uDD0A\\uDD37-\\uDD39\\uDD3B\\uDD3E\\uDD48-\\uDD4F\\uDD5A-\\uDD5F\\uDD66\\uDD69\\uDD8F\\uDD92\\uDD99-\\uDD9F\\uDDAA-\\uDEDF\\uDEF9-\\uDFAF\\uDFB1-\\uDFBF\\uDFF2-\\uDFFE]|\\uD808[\\uDF9A-\\uDFFF]|\\uD809[\\uDC6F\\uDC75-\\uDC7F\\uDD44-\\uDFFF]|[\\uD80A\\uD80E-\\uD810\\uD812-\\uD819\\uD824-\\uD82A\\uD82D\\uD82E\\uD830-\\uD832\\uD83F\\uD87B-\\uD87D\\uD87F\\uD885-\\uDB3F\\uDB41-\\uDB7F][\\uDC00-\\uDFFF]|\\uD80B[\\uDC00-\\uDF8F\\uDFF3-\\uDFFF]|\\uD80D[\\uDC2F\\uDC39-\\uDFFF]|\\uD811[\\uDE47-\\uDFFF]|\\uD81A[\\uDE39-\\uDE3F\\uDE5F\\uDE6A-\\uDE6D\\uDEBF\\uDECA-\\uDECF\\uDEEE\\uDEEF\\uDEF6-\\uDEFF\\uDF46-\\uDF4F\\uDF5A\\uDF62\\uDF78-\\uDF7C\\uDF90-\\uDFFF]|\\uD81B[\\uDC00-\\uDE3F\\uDE9B-\\uDEFF\\uDF4B-\\uDF4E\\uDF88-\\uDF8E\\uDFA0-\\uDFDF\\uDFE5-\\uDFEF\\uDFF2-\\uDFFF]|\\uD821[\\uDFF8-\\uDFFF]|\\uD823[\\uDCD6-\\uDCFF\\uDD09-\\uDFFF]|\\uD82B[\\uDC00-\\uDFEF\\uDFF4\\uDFFC\\uDFFF]|\\uD82C[\\uDD23-\\uDD4F\\uDD53-\\uDD63\\uDD68-\\uDD6F\\uDEFC-\\uDFFF]|\\uD82F[\\uDC6B-\\uDC6F\\uDC7D-\\uDC7F\\uDC89-\\uDC8F\\uDC9A\\uDC9B\\uDCA4-\\uDFFF]|\\uD833[\\uDC00-\\uDEFF\\uDF2E\\uDF2F\\uDF47-\\uDF4F\\uDFC4-\\uDFFF]|\\uD834[\\uDCF6-\\uDCFF\\uDD27\\uDD28\\uDDEB-\\uDDFF\\uDE46-\\uDEDF\\uDEF4-\\uDEFF\\uDF57-\\uDF5F\\uDF79-\\uDFFF]|\\uD835[\\uDC55\\uDC9D\\uDCA0\\uDCA1\\uDCA3\\uDCA4\\uDCA7\\uDCA8\\uDCAD\\uDCBA\\uDCBC\\uDCC4\\uDD06\\uDD0B\\uDD0C\\uDD15\\uDD1D\\uDD3A\\uDD3F\\uDD45\\uDD47-\\uDD49\\uDD51\\uDEA6\\uDEA7\\uDFCC\\uDFCD]|\\uD836[\\uDE8C-\\uDE9A\\uDEA0\\uDEB0-\\uDFFF]|\\uD837[\\uDC00-\\uDEFF\\uDF1F-\\uDFFF]|\\uD838[\\uDC07\\uDC19\\uDC1A\\uDC22\\uDC25\\uDC2B-\\uDCFF\\uDD2D-\\uDD2F\\uDD3E\\uDD3F\\uDD4A-\\uDD4D\\uDD50-\\uDE8F\\uDEAF-\\uDEBF\\uDEFA-\\uDEFE\\uDF00-\\uDFFF]|\\uD839[\\uDC00-\\uDFDF\\uDFE7\\uDFEC\\uDFEF\\uDFFF]|\\uD83A[\\uDCC5\\uDCC6\\uDCD7-\\uDCFF\\uDD4C-\\uDD4F\\uDD5A-\\uDD5D\\uDD60-\\uDFFF]|\\uD83B[\\uDC00-\\uDC70\\uDCB5-\\uDD00\\uDD3E-\\uDDFF\\uDE04\\uDE20\\uDE23\\uDE25\\uDE26\\uDE28\\uDE33\\uDE38\\uDE3A\\uDE3C-\\uDE41\\uDE43-\\uDE46\\uDE48\\uDE4A\\uDE4C\\uDE50\\uDE53\\uDE55\\uDE56\\uDE58\\uDE5A\\uDE5C\\uDE5E\\uDE60\\uDE63\\uDE65\\uDE66\\uDE6B\\uDE73\\uDE78\\uDE7D\\uDE7F\\uDE8A\\uDE9C-\\uDEA0\\uDEA4\\uDEAA\\uDEBC-\\uDEEF\\uDEF2-\\uDFFF]|\\uD83C[\\uDC2C-\\uDC2F\\uDC94-\\uDC9F\\uDCAF\\uDCB0\\uDCC0\\uDCD0\\uDCF6-\\uDCFF\\uDDAE-\\uDDE5\\uDE03-\\uDE0F\\uDE3C-\\uDE3F\\uDE49-\\uDE4F\\uDE52-\\uDE5F\\uDE66-\\uDEFF]|\\uD83D[\\uDED8-\\uDEDC\\uDEED-\\uDEEF\\uDEFD-\\uDEFF\\uDF74-\\uDF7F\\uDFD9-\\uDFDF\\uDFEC-\\uDFEF\\uDFF1-\\uDFFF]|\\uD83E[\\uDC0C-\\uDC0F\\uDC48-\\uDC4F\\uDC5A-\\uDC5F\\uDC88-\\uDC8F\\uDCAE\\uDCAF\\uDCB2-\\uDCFF\\uDE54-\\uDE5F\\uDE6E\\uDE6F\\uDE75-\\uDE77\\uDE7D-\\uDE7F\\uDE87-\\uDE8F\\uDEAD-\\uDEAF\\uDEBB-\\uDEBF\\uDEC6-\\uDECF\\uDEDA-\\uDEDF\\uDEE8-\\uDEEF\\uDEF7-\\uDEFF\\uDF93\\uDFCB-\\uDFEF\\uDFFA-\\uDFFF]|\\uD869[\\uDEE0-\\uDEFF]|\\uD86D[\\uDF39-\\uDF3F]|\\uD86E[\\uDC1E\\uDC1F]|\\uD873[\\uDEA2-\\uDEAF]|\\uD87A[\\uDFE1-\\uDFFF]|\\uD87E[\\uDE1E-\\uDFFF]|\\uD884[\\uDF4B-\\uDFFF]|\\uDB40[\\uDC00\\uDC02-\\uDC1F\\uDC80-\\uDCFF\\uDDF0-\\uDFFF]|[\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]'\n },\n {\n 'name': 'Co',\n 'alias': 'Private_Use',\n 'bmp': '\\uE000-\\uF8FF',\n 'astral': '[\\uDB80-\\uDBBE\\uDBC0-\\uDBFE][\\uDC00-\\uDFFF]|[\\uDBBF\\uDBFF][\\uDC00-\\uDFFD]'\n },\n {\n 'name': 'Cs',\n 'alias': 'Surrogate',\n 'bmp': '\\uD800-\\uDFFF'\n },\n {\n 'name': 'L',\n 'alias': 'Letter',\n 'bmp': 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005\\u3006\\u3031-\\u3035\\u303B\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6E5\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF\\uA9E0-\\uA9E4\\uA9E6-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'LC',\n 'alias': 'Cased_Letter',\n 'bmp': 'A-Za-z\\xB5\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u01BA\\u01BC-\\u01BF\\u01C4-\\u0293\\u0295-\\u02AF\\u0370-\\u0373\\u0376\\u0377\\u037B-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0560-\\u0588\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2134\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2183\\u2184\\u2C00-\\u2C7B\\u2C7E-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA640-\\uA66D\\uA680-\\uA69B\\uA722-\\uA76F\\uA771-\\uA787\\uA78B-\\uA78E\\uA790-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F5\\uA7F6\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF21-\\uFF3A\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDC00-\\uDC4F\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC]|\\uD803[\\uDC80-\\uDCB2\\uDCC0-\\uDCF2]|\\uD806[\\uDCA0-\\uDCDF]|\\uD81B[\\uDE40-\\uDE7F]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E]|\\uD83A[\\uDD00-\\uDD43]'\n },\n {\n 'name': 'Ll',\n 'alias': 'Lowercase_Letter',\n 'bmp': 'a-z\\xB5\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02AF\\u0371\\u0373\\u0377\\u037B-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1D2B\\u1D6B-\\u1D77\\u1D79-\\u1D9A\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2184\\u2C30-\\u2C5F\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7B\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F\\uA771-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7BB\\uA7BD\\uA7BF\\uA7C1\\uA7C3\\uA7C8\\uA7CA\\uA7D1\\uA7D3\\uA7D5\\uA7D7\\uA7D9\\uA7F6\\uA7FA\\uAB30-\\uAB5A\\uAB60-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC]|\\uD803[\\uDCC0-\\uDCF2]|\\uD806[\\uDCC0-\\uDCDF]|\\uD81B[\\uDE60-\\uDE7F]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E]|\\uD83A[\\uDD22-\\uDD43]'\n },\n {\n 'name': 'Lm',\n 'alias': 'Modifier_Letter',\n 'bmp': '\\u02B0-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0374\\u037A\\u0559\\u0640\\u06E5\\u06E6\\u07F4\\u07F5\\u07FA\\u081A\\u0824\\u0828\\u08C9\\u0971\\u0E46\\u0EC6\\u10FC\\u17D7\\u1843\\u1AA7\\u1C78-\\u1C7D\\u1D2C-\\u1D6A\\u1D78\\u1D9B-\\u1DBF\\u2071\\u207F\\u2090-\\u209C\\u2C7C\\u2C7D\\u2D6F\\u2E2F\\u3005\\u3031-\\u3035\\u303B\\u309D\\u309E\\u30FC-\\u30FE\\uA015\\uA4F8-\\uA4FD\\uA60C\\uA67F\\uA69C\\uA69D\\uA717-\\uA71F\\uA770\\uA788\\uA7F2-\\uA7F4\\uA7F8\\uA7F9\\uA9CF\\uA9E6\\uAA70\\uAADD\\uAAF3\\uAAF4\\uAB5C-\\uAB5F\\uAB69\\uFF70\\uFF9E\\uFF9F',\n 'astral': '\\uD801[\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD81A[\\uDF40-\\uDF43]|\\uD81B[\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD838[\\uDD37-\\uDD3D]|\\uD83A\\uDD4B'\n },\n {\n 'name': 'Lo',\n 'alias': 'Other_Letter',\n 'bmp': '\\xAA\\xBA\\u01BB\\u01C0-\\u01C3\\u0294\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u063F\\u0641-\\u064A\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06EE\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07CA-\\u07EA\\u0800-\\u0815\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C8\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0972-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09F0\\u09F1\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B71\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D5F-\\u0D61\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E45\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1100-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16F1-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17DC\\u1820-\\u1842\\u1844-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B83-\\u1BA0\\u1BAE\\u1BAF\\u1BBA-\\u1BE5\\u1C00-\\u1C23\\u1C4D-\\u1C4F\\u1C5A-\\u1C77\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u2135-\\u2138\\u2D30-\\u2D67\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u3006\\u303C\\u3041-\\u3096\\u309F\\u30A1-\\u30FA\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA014\\uA016-\\uA48C\\uA4D0-\\uA4F7\\uA500-\\uA60B\\uA610-\\uA61F\\uA62A\\uA62B\\uA66E\\uA6A0-\\uA6E5\\uA78F\\uA7F7\\uA7FB-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA840-\\uA873\\uA882-\\uA8B3\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA90A-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9E0-\\uA9E4\\uA9E7-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA60-\\uAA6F\\uAA71-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB\\uAADC\\uAAE0-\\uAAEA\\uAAF2\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uABC0-\\uABE2\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF66-\\uFF6F\\uFF71-\\uFF9D\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF40\\uDF42-\\uDF49\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF]|\\uD801[\\uDC50-\\uDC9D\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDD00-\\uDD23\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDD03-\\uDD26\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE80-\\uDEAA\\uDEB8\\uDF00-\\uDF1A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDEE0-\\uDEF2\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDF00-\\uDF4A\\uDF50]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD837\\uDF0A|\\uD838[\\uDD00-\\uDD2C\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'Lt',\n 'alias': 'Titlecase_Letter',\n 'bmp': '\\u01C5\\u01C8\\u01CB\\u01F2\\u1F88-\\u1F8F\\u1F98-\\u1F9F\\u1FA8-\\u1FAF\\u1FBC\\u1FCC\\u1FFC'\n },\n {\n 'name': 'Lu',\n 'alias': 'Uppercase_Letter',\n 'bmp': 'A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2183\\u2C00-\\u2C2F\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uA7BA\\uA7BC\\uA7BE\\uA7C0\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7D0\\uA7D6\\uA7D8\\uA7F5\\uFF21-\\uFF3A',\n 'astral': '\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95]|\\uD803[\\uDC80-\\uDCB2]|\\uD806[\\uDCA0-\\uDCBF]|\\uD81B[\\uDE40-\\uDE5F]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD83A[\\uDD00-\\uDD21]'\n },\n {\n 'name': 'M',\n 'alias': 'Mark',\n 'bmp': '\\u0300-\\u036F\\u0483-\\u0489\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0903\\u093A-\\u093C\\u093E-\\u094F\\u0951-\\u0957\\u0962\\u0963\\u0981-\\u0983\\u09BC\\u09BE-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CD\\u09D7\\u09E2\\u09E3\\u09FE\\u0A01-\\u0A03\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81-\\u0A83\\u0ABC\\u0ABE-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01-\\u0B03\\u0B3C\\u0B3E-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B62\\u0B63\\u0B82\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD7\\u0C00-\\u0C04\\u0C3C\\u0C3E-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81-\\u0C83\\u0CBC\\u0CBE-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CE2\\u0CE3\\u0D00-\\u0D03\\u0D3B\\u0D3C\\u0D3E-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4D\\u0D57\\u0D62\\u0D63\\u0D81-\\u0D83\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F3E\\u0F3F\\u0F71-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102B-\\u103E\\u1056-\\u1059\\u105E-\\u1060\\u1062-\\u1064\\u1067-\\u106D\\u1071-\\u1074\\u1082-\\u108D\\u108F\\u109A-\\u109D\\u135D-\\u135F\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17B4-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u192B\\u1930-\\u193B\\u1A17-\\u1A1B\\u1A55-\\u1A5E\\u1A60-\\u1A7C\\u1A7F\\u1AB0-\\u1ACE\\u1B00-\\u1B04\\u1B34-\\u1B44\\u1B6B-\\u1B73\\u1B80-\\u1B82\\u1BA1-\\u1BAD\\u1BE6-\\u1BF3\\u1C24-\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE8\\u1CED\\u1CF4\\u1CF7-\\u1CF9\\u1DC0-\\u1DFF\\u20D0-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302F\\u3099\\u309A\\uA66F-\\uA672\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA823-\\uA827\\uA82C\\uA880\\uA881\\uA8B4-\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA953\\uA980-\\uA983\\uA9B3-\\uA9C0\\uA9E5\\uAA29-\\uAA36\\uAA43\\uAA4C\\uAA4D\\uAA7B-\\uAA7D\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEB-\\uAAEF\\uAAF5\\uAAF6\\uABE3-\\uABEA\\uABEC\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F',\n 'astral': '\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC00-\\uDC02\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC82\\uDCB0-\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD34\\uDD45\\uDD46\\uDD73\\uDD80-\\uDD82\\uDDB3-\\uDDC0\\uDDC9-\\uDDCC\\uDDCE\\uDDCF\\uDE2C-\\uDE37\\uDE3E\\uDEDF-\\uDEEA\\uDF00-\\uDF03\\uDF3B\\uDF3C\\uDF3E-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC35-\\uDC46\\uDC5E\\uDCB0-\\uDCC3\\uDDAF-\\uDDB5\\uDDB8-\\uDDC0\\uDDDC\\uDDDD\\uDE30-\\uDE40\\uDEAB-\\uDEB7\\uDF1D-\\uDF2B]|\\uD806[\\uDC2C-\\uDC3A\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD3E\\uDD40\\uDD42\\uDD43\\uDDD1-\\uDDD7\\uDDDA-\\uDDE0\\uDDE4\\uDE01-\\uDE0A\\uDE33-\\uDE39\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE5B\\uDE8A-\\uDE99]|\\uD807[\\uDC2F-\\uDC36\\uDC38-\\uDC3F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD8A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD97\\uDEF3-\\uDEF6]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF51-\\uDF87\\uDF8F-\\uDF92\\uDFE4\\uDFF0\\uDFF1]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD65-\\uDD69\\uDD6D-\\uDD72\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDD00-\\uDDEF]'\n },\n {\n 'name': 'Mc',\n 'alias': 'Spacing_Mark',\n 'bmp': '\\u0903\\u093B\\u093E-\\u0940\\u0949-\\u094C\\u094E\\u094F\\u0982\\u0983\\u09BE-\\u09C0\\u09C7\\u09C8\\u09CB\\u09CC\\u09D7\\u0A03\\u0A3E-\\u0A40\\u0A83\\u0ABE-\\u0AC0\\u0AC9\\u0ACB\\u0ACC\\u0B02\\u0B03\\u0B3E\\u0B40\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B57\\u0BBE\\u0BBF\\u0BC1\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD7\\u0C01-\\u0C03\\u0C41-\\u0C44\\u0C82\\u0C83\\u0CBE\\u0CC0-\\u0CC4\\u0CC7\\u0CC8\\u0CCA\\u0CCB\\u0CD5\\u0CD6\\u0D02\\u0D03\\u0D3E-\\u0D40\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D57\\u0D82\\u0D83\\u0DCF-\\u0DD1\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0F3E\\u0F3F\\u0F7F\\u102B\\u102C\\u1031\\u1038\\u103B\\u103C\\u1056\\u1057\\u1062-\\u1064\\u1067-\\u106D\\u1083\\u1084\\u1087-\\u108C\\u108F\\u109A-\\u109C\\u1715\\u1734\\u17B6\\u17BE-\\u17C5\\u17C7\\u17C8\\u1923-\\u1926\\u1929-\\u192B\\u1930\\u1931\\u1933-\\u1938\\u1A19\\u1A1A\\u1A55\\u1A57\\u1A61\\u1A63\\u1A64\\u1A6D-\\u1A72\\u1B04\\u1B35\\u1B3B\\u1B3D-\\u1B41\\u1B43\\u1B44\\u1B82\\u1BA1\\u1BA6\\u1BA7\\u1BAA\\u1BE7\\u1BEA-\\u1BEC\\u1BEE\\u1BF2\\u1BF3\\u1C24-\\u1C2B\\u1C34\\u1C35\\u1CE1\\u1CF7\\u302E\\u302F\\uA823\\uA824\\uA827\\uA880\\uA881\\uA8B4-\\uA8C3\\uA952\\uA953\\uA983\\uA9B4\\uA9B5\\uA9BA\\uA9BB\\uA9BE-\\uA9C0\\uAA2F\\uAA30\\uAA33\\uAA34\\uAA4D\\uAA7B\\uAA7D\\uAAEB\\uAAEE\\uAAEF\\uAAF5\\uABE3\\uABE4\\uABE6\\uABE7\\uABE9\\uABEA\\uABEC',\n 'astral': '\\uD804[\\uDC00\\uDC02\\uDC82\\uDCB0-\\uDCB2\\uDCB7\\uDCB8\\uDD2C\\uDD45\\uDD46\\uDD82\\uDDB3-\\uDDB5\\uDDBF\\uDDC0\\uDDCE\\uDE2C-\\uDE2E\\uDE32\\uDE33\\uDE35\\uDEE0-\\uDEE2\\uDF02\\uDF03\\uDF3E\\uDF3F\\uDF41-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF57\\uDF62\\uDF63]|\\uD805[\\uDC35-\\uDC37\\uDC40\\uDC41\\uDC45\\uDCB0-\\uDCB2\\uDCB9\\uDCBB-\\uDCBE\\uDCC1\\uDDAF-\\uDDB1\\uDDB8-\\uDDBB\\uDDBE\\uDE30-\\uDE32\\uDE3B\\uDE3C\\uDE3E\\uDEAC\\uDEAE\\uDEAF\\uDEB6\\uDF20\\uDF21\\uDF26]|\\uD806[\\uDC2C-\\uDC2E\\uDC38\\uDD30-\\uDD35\\uDD37\\uDD38\\uDD3D\\uDD40\\uDD42\\uDDD1-\\uDDD3\\uDDDC-\\uDDDF\\uDDE4\\uDE39\\uDE57\\uDE58\\uDE97]|\\uD807[\\uDC2F\\uDC3E\\uDCA9\\uDCB1\\uDCB4\\uDD8A-\\uDD8E\\uDD93\\uDD94\\uDD96\\uDEF5\\uDEF6]|\\uD81B[\\uDF51-\\uDF87\\uDFF0\\uDFF1]|\\uD834[\\uDD65\\uDD66\\uDD6D-\\uDD72]'\n },\n {\n 'name': 'Me',\n 'alias': 'Enclosing_Mark',\n 'bmp': '\\u0488\\u0489\\u1ABE\\u20DD-\\u20E0\\u20E2-\\u20E4\\uA670-\\uA672'\n },\n {\n 'name': 'Mn',\n 'alias': 'Nonspacing_Mark',\n 'bmp': '\\u0300-\\u036F\\u0483-\\u0487\\u0591-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u0610-\\u061A\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED\\u0711\\u0730-\\u074A\\u07A6-\\u07B0\\u07EB-\\u07F3\\u07FD\\u0816-\\u0819\\u081B-\\u0823\\u0825-\\u0827\\u0829-\\u082D\\u0859-\\u085B\\u0898-\\u089F\\u08CA-\\u08E1\\u08E3-\\u0902\\u093A\\u093C\\u0941-\\u0948\\u094D\\u0951-\\u0957\\u0962\\u0963\\u0981\\u09BC\\u09C1-\\u09C4\\u09CD\\u09E2\\u09E3\\u09FE\\u0A01\\u0A02\\u0A3C\\u0A41\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A70\\u0A71\\u0A75\\u0A81\\u0A82\\u0ABC\\u0AC1-\\u0AC5\\u0AC7\\u0AC8\\u0ACD\\u0AE2\\u0AE3\\u0AFA-\\u0AFF\\u0B01\\u0B3C\\u0B3F\\u0B41-\\u0B44\\u0B4D\\u0B55\\u0B56\\u0B62\\u0B63\\u0B82\\u0BC0\\u0BCD\\u0C00\\u0C04\\u0C3C\\u0C3E-\\u0C40\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C62\\u0C63\\u0C81\\u0CBC\\u0CBF\\u0CC6\\u0CCC\\u0CCD\\u0CE2\\u0CE3\\u0D00\\u0D01\\u0D3B\\u0D3C\\u0D41-\\u0D44\\u0D4D\\u0D62\\u0D63\\u0D81\\u0DCA\\u0DD2-\\u0DD4\\u0DD6\\u0E31\\u0E34-\\u0E3A\\u0E47-\\u0E4E\\u0EB1\\u0EB4-\\u0EBC\\u0EC8-\\u0ECD\\u0F18\\u0F19\\u0F35\\u0F37\\u0F39\\u0F71-\\u0F7E\\u0F80-\\u0F84\\u0F86\\u0F87\\u0F8D-\\u0F97\\u0F99-\\u0FBC\\u0FC6\\u102D-\\u1030\\u1032-\\u1037\\u1039\\u103A\\u103D\\u103E\\u1058\\u1059\\u105E-\\u1060\\u1071-\\u1074\\u1082\\u1085\\u1086\\u108D\\u109D\\u135D-\\u135F\\u1712-\\u1714\\u1732\\u1733\\u1752\\u1753\\u1772\\u1773\\u17B4\\u17B5\\u17B7-\\u17BD\\u17C6\\u17C9-\\u17D3\\u17DD\\u180B-\\u180D\\u180F\\u1885\\u1886\\u18A9\\u1920-\\u1922\\u1927\\u1928\\u1932\\u1939-\\u193B\\u1A17\\u1A18\\u1A1B\\u1A56\\u1A58-\\u1A5E\\u1A60\\u1A62\\u1A65-\\u1A6C\\u1A73-\\u1A7C\\u1A7F\\u1AB0-\\u1ABD\\u1ABF-\\u1ACE\\u1B00-\\u1B03\\u1B34\\u1B36-\\u1B3A\\u1B3C\\u1B42\\u1B6B-\\u1B73\\u1B80\\u1B81\\u1BA2-\\u1BA5\\u1BA8\\u1BA9\\u1BAB-\\u1BAD\\u1BE6\\u1BE8\\u1BE9\\u1BED\\u1BEF-\\u1BF1\\u1C2C-\\u1C33\\u1C36\\u1C37\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u20D0-\\u20DC\\u20E1\\u20E5-\\u20F0\\u2CEF-\\u2CF1\\u2D7F\\u2DE0-\\u2DFF\\u302A-\\u302D\\u3099\\u309A\\uA66F\\uA674-\\uA67D\\uA69E\\uA69F\\uA6F0\\uA6F1\\uA802\\uA806\\uA80B\\uA825\\uA826\\uA82C\\uA8C4\\uA8C5\\uA8E0-\\uA8F1\\uA8FF\\uA926-\\uA92D\\uA947-\\uA951\\uA980-\\uA982\\uA9B3\\uA9B6-\\uA9B9\\uA9BC\\uA9BD\\uA9E5\\uAA29-\\uAA2E\\uAA31\\uAA32\\uAA35\\uAA36\\uAA43\\uAA4C\\uAA7C\\uAAB0\\uAAB2-\\uAAB4\\uAAB7\\uAAB8\\uAABE\\uAABF\\uAAC1\\uAAEC\\uAAED\\uAAF6\\uABE5\\uABE8\\uABED\\uFB1E\\uFE00-\\uFE0F\\uFE20-\\uFE2F',\n 'astral': '\\uD800[\\uDDFD\\uDEE0\\uDF76-\\uDF7A]|\\uD802[\\uDE01-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE0F\\uDE38-\\uDE3A\\uDE3F\\uDEE5\\uDEE6]|\\uD803[\\uDD24-\\uDD27\\uDEAB\\uDEAC\\uDF46-\\uDF50\\uDF82-\\uDF85]|\\uD804[\\uDC01\\uDC38-\\uDC46\\uDC70\\uDC73\\uDC74\\uDC7F-\\uDC81\\uDCB3-\\uDCB6\\uDCB9\\uDCBA\\uDCC2\\uDD00-\\uDD02\\uDD27-\\uDD2B\\uDD2D-\\uDD34\\uDD73\\uDD80\\uDD81\\uDDB6-\\uDDBE\\uDDC9-\\uDDCC\\uDDCF\\uDE2F-\\uDE31\\uDE34\\uDE36\\uDE37\\uDE3E\\uDEDF\\uDEE3-\\uDEEA\\uDF00\\uDF01\\uDF3B\\uDF3C\\uDF40\\uDF66-\\uDF6C\\uDF70-\\uDF74]|\\uD805[\\uDC38-\\uDC3F\\uDC42-\\uDC44\\uDC46\\uDC5E\\uDCB3-\\uDCB8\\uDCBA\\uDCBF\\uDCC0\\uDCC2\\uDCC3\\uDDB2-\\uDDB5\\uDDBC\\uDDBD\\uDDBF\\uDDC0\\uDDDC\\uDDDD\\uDE33-\\uDE3A\\uDE3D\\uDE3F\\uDE40\\uDEAB\\uDEAD\\uDEB0-\\uDEB5\\uDEB7\\uDF1D-\\uDF1F\\uDF22-\\uDF25\\uDF27-\\uDF2B]|\\uD806[\\uDC2F-\\uDC37\\uDC39\\uDC3A\\uDD3B\\uDD3C\\uDD3E\\uDD43\\uDDD4-\\uDDD7\\uDDDA\\uDDDB\\uDDE0\\uDE01-\\uDE0A\\uDE33-\\uDE38\\uDE3B-\\uDE3E\\uDE47\\uDE51-\\uDE56\\uDE59-\\uDE5B\\uDE8A-\\uDE96\\uDE98\\uDE99]|\\uD807[\\uDC30-\\uDC36\\uDC38-\\uDC3D\\uDC3F\\uDC92-\\uDCA7\\uDCAA-\\uDCB0\\uDCB2\\uDCB3\\uDCB5\\uDCB6\\uDD31-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD45\\uDD47\\uDD90\\uDD91\\uDD95\\uDD97\\uDEF3\\uDEF4]|\\uD81A[\\uDEF0-\\uDEF4\\uDF30-\\uDF36]|\\uD81B[\\uDF4F\\uDF8F-\\uDF92\\uDFE4]|\\uD82F[\\uDC9D\\uDC9E]|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD\\uDE42-\\uDE44]|\\uD836[\\uDE00-\\uDE36\\uDE3B-\\uDE6C\\uDE75\\uDE84\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD30-\\uDD36\\uDEAE\\uDEEC-\\uDEEF]|\\uD83A[\\uDCD0-\\uDCD6\\uDD44-\\uDD4A]|\\uDB40[\\uDD00-\\uDDEF]'\n },\n {\n 'name': 'N',\n 'alias': 'Number',\n 'bmp': '0-9\\xB2\\xB3\\xB9\\xBC-\\xBE\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u09F4-\\u09F9\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0B72-\\u0B77\\u0BE6-\\u0BF2\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0CE6-\\u0CEF\\u0D58-\\u0D5E\\u0D66-\\u0D78\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F33\\u1040-\\u1049\\u1090-\\u1099\\u1369-\\u137C\\u16EE-\\u16F0\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19DA\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u2182\\u2185-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3007\\u3021-\\u3029\\u3038-\\u303A\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA620-\\uA629\\uA6E6-\\uA6EF\\uA830-\\uA835\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19',\n 'astral': '\\uD800[\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDEE1-\\uDEFB\\uDF20-\\uDF23\\uDF41\\uDF4A\\uDFD1-\\uDFD5]|\\uD801[\\uDCA0-\\uDCA9]|\\uD802[\\uDC58-\\uDC5F\\uDC79-\\uDC7F\\uDCA7-\\uDCAF\\uDCFB-\\uDCFF\\uDD16-\\uDD1B\\uDDBC\\uDDBD\\uDDC0-\\uDDCF\\uDDD2-\\uDDFF\\uDE40-\\uDE48\\uDE7D\\uDE7E\\uDE9D-\\uDE9F\\uDEEB-\\uDEEF\\uDF58-\\uDF5F\\uDF78-\\uDF7F\\uDFA9-\\uDFAF]|\\uD803[\\uDCFA-\\uDCFF\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDF1D-\\uDF26\\uDF51-\\uDF54\\uDFC5-\\uDFCB]|\\uD804[\\uDC52-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDDE1-\\uDDF4\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF3B]|\\uD806[\\uDCE0-\\uDCF2\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC6C\\uDD50-\\uDD59\\uDDA0-\\uDDA9\\uDFC0-\\uDFD4]|\\uD809[\\uDC00-\\uDC6E]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59\\uDF5B-\\uDF61]|\\uD81B[\\uDE80-\\uDE96]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD83A[\\uDCC7-\\uDCCF\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]'\n },\n {\n 'name': 'Nd',\n 'alias': 'Decimal_Number',\n 'bmp': '0-9\\u0660-\\u0669\\u06F0-\\u06F9\\u07C0-\\u07C9\\u0966-\\u096F\\u09E6-\\u09EF\\u0A66-\\u0A6F\\u0AE6-\\u0AEF\\u0B66-\\u0B6F\\u0BE6-\\u0BEF\\u0C66-\\u0C6F\\u0CE6-\\u0CEF\\u0D66-\\u0D6F\\u0DE6-\\u0DEF\\u0E50-\\u0E59\\u0ED0-\\u0ED9\\u0F20-\\u0F29\\u1040-\\u1049\\u1090-\\u1099\\u17E0-\\u17E9\\u1810-\\u1819\\u1946-\\u194F\\u19D0-\\u19D9\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1B50-\\u1B59\\u1BB0-\\u1BB9\\u1C40-\\u1C49\\u1C50-\\u1C59\\uA620-\\uA629\\uA8D0-\\uA8D9\\uA900-\\uA909\\uA9D0-\\uA9D9\\uA9F0-\\uA9F9\\uAA50-\\uAA59\\uABF0-\\uABF9\\uFF10-\\uFF19',\n 'astral': '\\uD801[\\uDCA0-\\uDCA9]|\\uD803[\\uDD30-\\uDD39]|\\uD804[\\uDC66-\\uDC6F\\uDCF0-\\uDCF9\\uDD36-\\uDD3F\\uDDD0-\\uDDD9\\uDEF0-\\uDEF9]|\\uD805[\\uDC50-\\uDC59\\uDCD0-\\uDCD9\\uDE50-\\uDE59\\uDEC0-\\uDEC9\\uDF30-\\uDF39]|\\uD806[\\uDCE0-\\uDCE9\\uDD50-\\uDD59]|\\uD807[\\uDC50-\\uDC59\\uDD50-\\uDD59\\uDDA0-\\uDDA9]|\\uD81A[\\uDE60-\\uDE69\\uDEC0-\\uDEC9\\uDF50-\\uDF59]|\\uD835[\\uDFCE-\\uDFFF]|\\uD838[\\uDD40-\\uDD49\\uDEF0-\\uDEF9]|\\uD83A[\\uDD50-\\uDD59]|\\uD83E[\\uDFF0-\\uDFF9]'\n },\n {\n 'name': 'Nl',\n 'alias': 'Letter_Number',\n 'bmp': '\\u16EE-\\u16F0\\u2160-\\u2182\\u2185-\\u2188\\u3007\\u3021-\\u3029\\u3038-\\u303A\\uA6E6-\\uA6EF',\n 'astral': '\\uD800[\\uDD40-\\uDD74\\uDF41\\uDF4A\\uDFD1-\\uDFD5]|\\uD809[\\uDC00-\\uDC6E]'\n },\n {\n 'name': 'No',\n 'alias': 'Other_Number',\n 'bmp': '\\xB2\\xB3\\xB9\\xBC-\\xBE\\u09F4-\\u09F9\\u0B72-\\u0B77\\u0BF0-\\u0BF2\\u0C78-\\u0C7E\\u0D58-\\u0D5E\\u0D70-\\u0D78\\u0F2A-\\u0F33\\u1369-\\u137C\\u17F0-\\u17F9\\u19DA\\u2070\\u2074-\\u2079\\u2080-\\u2089\\u2150-\\u215F\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2CFD\\u3192-\\u3195\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\uA830-\\uA835',\n 'astral': '\\uD800[\\uDD07-\\uDD33\\uDD75-\\uDD78\\uDD8A\\uDD8B\\uDEE1-\\uDEFB\\uDF20-\\uDF23]|\\uD802[\\uDC58-\\uDC5F\\uDC79-\\uDC7F\\uDCA7-\\uDCAF\\uDCFB-\\uDCFF\\uDD16-\\uDD1B\\uDDBC\\uDDBD\\uDDC0-\\uDDCF\\uDDD2-\\uDDFF\\uDE40-\\uDE48\\uDE7D\\uDE7E\\uDE9D-\\uDE9F\\uDEEB-\\uDEEF\\uDF58-\\uDF5F\\uDF78-\\uDF7F\\uDFA9-\\uDFAF]|\\uD803[\\uDCFA-\\uDCFF\\uDE60-\\uDE7E\\uDF1D-\\uDF26\\uDF51-\\uDF54\\uDFC5-\\uDFCB]|\\uD804[\\uDC52-\\uDC65\\uDDE1-\\uDDF4]|\\uD805[\\uDF3A\\uDF3B]|\\uD806[\\uDCEA-\\uDCF2]|\\uD807[\\uDC5A-\\uDC6C\\uDFC0-\\uDFD4]|\\uD81A[\\uDF5B-\\uDF61]|\\uD81B[\\uDE80-\\uDE96]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD83A[\\uDCC7-\\uDCCF]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D]|\\uD83C[\\uDD00-\\uDD0C]'\n },\n {\n 'name': 'P',\n 'alias': 'Punctuation',\n 'bmp': '!-#%-\\\\*,-\\\\/:;\\\\?@\\\\[-\\\\]_\\\\{\\\\}\\xA1\\xA7\\xAB\\xB6\\xB7\\xBB\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u058A\\u05BE\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F3A-\\u0F3D\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u1400\\u166E\\u169B\\u169C\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2010-\\u2027\\u2030-\\u2043\\u2045-\\u2051\\u2053-\\u205E\\u207D\\u207E\\u208D\\u208E\\u2308-\\u230B\\u2329\\u232A\\u2768-\\u2775\\u27C5\\u27C6\\u27E6-\\u27EF\\u2983-\\u2998\\u29D8-\\u29DB\\u29FC\\u29FD\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00-\\u2E2E\\u2E30-\\u2E4F\\u2E52-\\u2E5D\\u3001-\\u3003\\u3008-\\u3011\\u3014-\\u301F\\u3030\\u303D\\u30A0\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE61\\uFE63\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF0A\\uFF0C-\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3B-\\uFF3D\\uFF3F\\uFF5B\\uFF5D\\uFF5F-\\uFF65',\n 'astral': '\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDEAD\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]'\n },\n {\n 'name': 'Pc',\n 'alias': 'Connector_Punctuation',\n 'bmp': '_\\u203F\\u2040\\u2054\\uFE33\\uFE34\\uFE4D-\\uFE4F\\uFF3F'\n },\n {\n 'name': 'Pd',\n 'alias': 'Dash_Punctuation',\n 'bmp': '\\\\-\\u058A\\u05BE\\u1400\\u1806\\u2010-\\u2015\\u2E17\\u2E1A\\u2E3A\\u2E3B\\u2E40\\u2E5D\\u301C\\u3030\\u30A0\\uFE31\\uFE32\\uFE58\\uFE63\\uFF0D',\n 'astral': '\\uD803\\uDEAD'\n },\n {\n 'name': 'Pe',\n 'alias': 'Close_Punctuation',\n 'bmp': '\\\\)\\\\]\\\\}\\u0F3B\\u0F3D\\u169C\\u2046\\u207E\\u208E\\u2309\\u230B\\u232A\\u2769\\u276B\\u276D\\u276F\\u2771\\u2773\\u2775\\u27C6\\u27E7\\u27E9\\u27EB\\u27ED\\u27EF\\u2984\\u2986\\u2988\\u298A\\u298C\\u298E\\u2990\\u2992\\u2994\\u2996\\u2998\\u29D9\\u29DB\\u29FD\\u2E23\\u2E25\\u2E27\\u2E29\\u2E56\\u2E58\\u2E5A\\u2E5C\\u3009\\u300B\\u300D\\u300F\\u3011\\u3015\\u3017\\u3019\\u301B\\u301E\\u301F\\uFD3E\\uFE18\\uFE36\\uFE38\\uFE3A\\uFE3C\\uFE3E\\uFE40\\uFE42\\uFE44\\uFE48\\uFE5A\\uFE5C\\uFE5E\\uFF09\\uFF3D\\uFF5D\\uFF60\\uFF63'\n },\n {\n 'name': 'Pf',\n 'alias': 'Final_Punctuation',\n 'bmp': '\\xBB\\u2019\\u201D\\u203A\\u2E03\\u2E05\\u2E0A\\u2E0D\\u2E1D\\u2E21'\n },\n {\n 'name': 'Pi',\n 'alias': 'Initial_Punctuation',\n 'bmp': '\\xAB\\u2018\\u201B\\u201C\\u201F\\u2039\\u2E02\\u2E04\\u2E09\\u2E0C\\u2E1C\\u2E20'\n },\n {\n 'name': 'Po',\n 'alias': 'Other_Punctuation',\n 'bmp': '!-#%-\\'\\\\*,\\\\.\\\\/:;\\\\?@\\\\\\xA1\\xA7\\xB6\\xB7\\xBF\\u037E\\u0387\\u055A-\\u055F\\u0589\\u05C0\\u05C3\\u05C6\\u05F3\\u05F4\\u0609\\u060A\\u060C\\u060D\\u061B\\u061D-\\u061F\\u066A-\\u066D\\u06D4\\u0700-\\u070D\\u07F7-\\u07F9\\u0830-\\u083E\\u085E\\u0964\\u0965\\u0970\\u09FD\\u0A76\\u0AF0\\u0C77\\u0C84\\u0DF4\\u0E4F\\u0E5A\\u0E5B\\u0F04-\\u0F12\\u0F14\\u0F85\\u0FD0-\\u0FD4\\u0FD9\\u0FDA\\u104A-\\u104F\\u10FB\\u1360-\\u1368\\u166E\\u16EB-\\u16ED\\u1735\\u1736\\u17D4-\\u17D6\\u17D8-\\u17DA\\u1800-\\u1805\\u1807-\\u180A\\u1944\\u1945\\u1A1E\\u1A1F\\u1AA0-\\u1AA6\\u1AA8-\\u1AAD\\u1B5A-\\u1B60\\u1B7D\\u1B7E\\u1BFC-\\u1BFF\\u1C3B-\\u1C3F\\u1C7E\\u1C7F\\u1CC0-\\u1CC7\\u1CD3\\u2016\\u2017\\u2020-\\u2027\\u2030-\\u2038\\u203B-\\u203E\\u2041-\\u2043\\u2047-\\u2051\\u2053\\u2055-\\u205E\\u2CF9-\\u2CFC\\u2CFE\\u2CFF\\u2D70\\u2E00\\u2E01\\u2E06-\\u2E08\\u2E0B\\u2E0E-\\u2E16\\u2E18\\u2E19\\u2E1B\\u2E1E\\u2E1F\\u2E2A-\\u2E2E\\u2E30-\\u2E39\\u2E3C-\\u2E3F\\u2E41\\u2E43-\\u2E4F\\u2E52-\\u2E54\\u3001-\\u3003\\u303D\\u30FB\\uA4FE\\uA4FF\\uA60D-\\uA60F\\uA673\\uA67E\\uA6F2-\\uA6F7\\uA874-\\uA877\\uA8CE\\uA8CF\\uA8F8-\\uA8FA\\uA8FC\\uA92E\\uA92F\\uA95F\\uA9C1-\\uA9CD\\uA9DE\\uA9DF\\uAA5C-\\uAA5F\\uAADE\\uAADF\\uAAF0\\uAAF1\\uABEB\\uFE10-\\uFE16\\uFE19\\uFE30\\uFE45\\uFE46\\uFE49-\\uFE4C\\uFE50-\\uFE52\\uFE54-\\uFE57\\uFE5F-\\uFE61\\uFE68\\uFE6A\\uFE6B\\uFF01-\\uFF03\\uFF05-\\uFF07\\uFF0A\\uFF0C\\uFF0E\\uFF0F\\uFF1A\\uFF1B\\uFF1F\\uFF20\\uFF3C\\uFF61\\uFF64\\uFF65',\n 'astral': '\\uD800[\\uDD00-\\uDD02\\uDF9F\\uDFD0]|\\uD801\\uDD6F|\\uD802[\\uDC57\\uDD1F\\uDD3F\\uDE50-\\uDE58\\uDE7F\\uDEF0-\\uDEF6\\uDF39-\\uDF3F\\uDF99-\\uDF9C]|\\uD803[\\uDF55-\\uDF59\\uDF86-\\uDF89]|\\uD804[\\uDC47-\\uDC4D\\uDCBB\\uDCBC\\uDCBE-\\uDCC1\\uDD40-\\uDD43\\uDD74\\uDD75\\uDDC5-\\uDDC8\\uDDCD\\uDDDB\\uDDDD-\\uDDDF\\uDE38-\\uDE3D\\uDEA9]|\\uD805[\\uDC4B-\\uDC4F\\uDC5A\\uDC5B\\uDC5D\\uDCC6\\uDDC1-\\uDDD7\\uDE41-\\uDE43\\uDE60-\\uDE6C\\uDEB9\\uDF3C-\\uDF3E]|\\uD806[\\uDC3B\\uDD44-\\uDD46\\uDDE2\\uDE3F-\\uDE46\\uDE9A-\\uDE9C\\uDE9E-\\uDEA2]|\\uD807[\\uDC41-\\uDC45\\uDC70\\uDC71\\uDEF7\\uDEF8\\uDFFF]|\\uD809[\\uDC70-\\uDC74]|\\uD80B[\\uDFF1\\uDFF2]|\\uD81A[\\uDE6E\\uDE6F\\uDEF5\\uDF37-\\uDF3B\\uDF44]|\\uD81B[\\uDE97-\\uDE9A\\uDFE2]|\\uD82F\\uDC9F|\\uD836[\\uDE87-\\uDE8B]|\\uD83A[\\uDD5E\\uDD5F]'\n },\n {\n 'name': 'Ps',\n 'alias': 'Open_Punctuation',\n 'bmp': '\\\\(\\\\[\\\\{\\u0F3A\\u0F3C\\u169B\\u201A\\u201E\\u2045\\u207D\\u208D\\u2308\\u230A\\u2329\\u2768\\u276A\\u276C\\u276E\\u2770\\u2772\\u2774\\u27C5\\u27E6\\u27E8\\u27EA\\u27EC\\u27EE\\u2983\\u2985\\u2987\\u2989\\u298B\\u298D\\u298F\\u2991\\u2993\\u2995\\u2997\\u29D8\\u29DA\\u29FC\\u2E22\\u2E24\\u2E26\\u2E28\\u2E42\\u2E55\\u2E57\\u2E59\\u2E5B\\u3008\\u300A\\u300C\\u300E\\u3010\\u3014\\u3016\\u3018\\u301A\\u301D\\uFD3F\\uFE17\\uFE35\\uFE37\\uFE39\\uFE3B\\uFE3D\\uFE3F\\uFE41\\uFE43\\uFE47\\uFE59\\uFE5B\\uFE5D\\uFF08\\uFF3B\\uFF5B\\uFF5F\\uFF62'\n },\n {\n 'name': 'S',\n 'alias': 'Symbol',\n 'bmp': '\\\\$\\\\+<->\\\\^`\\\\|~\\xA2-\\xA6\\xA8\\xA9\\xAC\\xAE-\\xB1\\xB4\\xB8\\xD7\\xF7\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u03F6\\u0482\\u058D-\\u058F\\u0606-\\u0608\\u060B\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u07FE\\u07FF\\u0888\\u09F2\\u09F3\\u09FA\\u09FB\\u0AF1\\u0B70\\u0BF3-\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0E3F\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u17DB\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u20A0-\\u20C0\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116-\\u2118\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u2140-\\u2144\\u214A-\\u214D\\u214F\\u218A\\u218B\\u2190-\\u2307\\u230C-\\u2328\\u232B-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u2767\\u2794-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u309B\\u309C\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uA828-\\uA82B\\uA836-\\uA839\\uAA77-\\uAA79\\uAB5B\\uAB6A\\uAB6B\\uFB29\\uFBB2-\\uFBC2\\uFD40-\\uFD4F\\uFDCF\\uFDFC-\\uFDFF\\uFE62\\uFE64-\\uFE66\\uFE69\\uFF04\\uFF0B\\uFF1C-\\uFF1E\\uFF3E\\uFF40\\uFF5C\\uFF5E\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFFC\\uFFFD',\n 'astral': '\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838[\\uDD4F\\uDEFF]|\\uD83B[\\uDCAC\\uDCB0\\uDD2E\\uDEF0\\uDEF1]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDD-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6\\uDF00-\\uDF92\\uDF94-\\uDFCA]'\n },\n {\n 'name': 'Sc',\n 'alias': 'Currency_Symbol',\n 'bmp': '\\\\$\\xA2-\\xA5\\u058F\\u060B\\u07FE\\u07FF\\u09F2\\u09F3\\u09FB\\u0AF1\\u0BF9\\u0E3F\\u17DB\\u20A0-\\u20C0\\uA838\\uFDFC\\uFE69\\uFF04\\uFFE0\\uFFE1\\uFFE5\\uFFE6',\n 'astral': '\\uD807[\\uDFDD-\\uDFE0]|\\uD838\\uDEFF|\\uD83B\\uDCB0'\n },\n {\n 'name': 'Sk',\n 'alias': 'Modifier_Symbol',\n 'bmp': '\\\\^`\\xA8\\xAF\\xB4\\xB8\\u02C2-\\u02C5\\u02D2-\\u02DF\\u02E5-\\u02EB\\u02ED\\u02EF-\\u02FF\\u0375\\u0384\\u0385\\u0888\\u1FBD\\u1FBF-\\u1FC1\\u1FCD-\\u1FCF\\u1FDD-\\u1FDF\\u1FED-\\u1FEF\\u1FFD\\u1FFE\\u309B\\u309C\\uA700-\\uA716\\uA720\\uA721\\uA789\\uA78A\\uAB5B\\uAB6A\\uAB6B\\uFBB2-\\uFBC2\\uFF3E\\uFF40\\uFFE3',\n 'astral': '\\uD83C[\\uDFFB-\\uDFFF]'\n },\n {\n 'name': 'Sm',\n 'alias': 'Math_Symbol',\n 'bmp': '\\\\+<->\\\\|~\\xAC\\xB1\\xD7\\xF7\\u03F6\\u0606-\\u0608\\u2044\\u2052\\u207A-\\u207C\\u208A-\\u208C\\u2118\\u2140-\\u2144\\u214B\\u2190-\\u2194\\u219A\\u219B\\u21A0\\u21A3\\u21A6\\u21AE\\u21CE\\u21CF\\u21D2\\u21D4\\u21F4-\\u22FF\\u2320\\u2321\\u237C\\u239B-\\u23B3\\u23DC-\\u23E1\\u25B7\\u25C1\\u25F8-\\u25FF\\u266F\\u27C0-\\u27C4\\u27C7-\\u27E5\\u27F0-\\u27FF\\u2900-\\u2982\\u2999-\\u29D7\\u29DC-\\u29FB\\u29FE-\\u2AFF\\u2B30-\\u2B44\\u2B47-\\u2B4C\\uFB29\\uFE62\\uFE64-\\uFE66\\uFF0B\\uFF1C-\\uFF1E\\uFF5C\\uFF5E\\uFFE2\\uFFE9-\\uFFEC',\n 'astral': '\\uD835[\\uDEC1\\uDEDB\\uDEFB\\uDF15\\uDF35\\uDF4F\\uDF6F\\uDF89\\uDFA9\\uDFC3]|\\uD83B[\\uDEF0\\uDEF1]'\n },\n {\n 'name': 'So',\n 'alias': 'Other_Symbol',\n 'bmp': '\\xA6\\xA9\\xAE\\xB0\\u0482\\u058D\\u058E\\u060E\\u060F\\u06DE\\u06E9\\u06FD\\u06FE\\u07F6\\u09FA\\u0B70\\u0BF3-\\u0BF8\\u0BFA\\u0C7F\\u0D4F\\u0D79\\u0F01-\\u0F03\\u0F13\\u0F15-\\u0F17\\u0F1A-\\u0F1F\\u0F34\\u0F36\\u0F38\\u0FBE-\\u0FC5\\u0FC7-\\u0FCC\\u0FCE\\u0FCF\\u0FD5-\\u0FD8\\u109E\\u109F\\u1390-\\u1399\\u166D\\u1940\\u19DE-\\u19FF\\u1B61-\\u1B6A\\u1B74-\\u1B7C\\u2100\\u2101\\u2103-\\u2106\\u2108\\u2109\\u2114\\u2116\\u2117\\u211E-\\u2123\\u2125\\u2127\\u2129\\u212E\\u213A\\u213B\\u214A\\u214C\\u214D\\u214F\\u218A\\u218B\\u2195-\\u2199\\u219C-\\u219F\\u21A1\\u21A2\\u21A4\\u21A5\\u21A7-\\u21AD\\u21AF-\\u21CD\\u21D0\\u21D1\\u21D3\\u21D5-\\u21F3\\u2300-\\u2307\\u230C-\\u231F\\u2322-\\u2328\\u232B-\\u237B\\u237D-\\u239A\\u23B4-\\u23DB\\u23E2-\\u2426\\u2440-\\u244A\\u249C-\\u24E9\\u2500-\\u25B6\\u25B8-\\u25C0\\u25C2-\\u25F7\\u2600-\\u266E\\u2670-\\u2767\\u2794-\\u27BF\\u2800-\\u28FF\\u2B00-\\u2B2F\\u2B45\\u2B46\\u2B4D-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2CE5-\\u2CEA\\u2E50\\u2E51\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u2FF0-\\u2FFB\\u3004\\u3012\\u3013\\u3020\\u3036\\u3037\\u303E\\u303F\\u3190\\u3191\\u3196-\\u319F\\u31C0-\\u31E3\\u3200-\\u321E\\u322A-\\u3247\\u3250\\u3260-\\u327F\\u328A-\\u32B0\\u32C0-\\u33FF\\u4DC0-\\u4DFF\\uA490-\\uA4C6\\uA828-\\uA82B\\uA836\\uA837\\uA839\\uAA77-\\uAA79\\uFD40-\\uFD4F\\uFDCF\\uFDFD-\\uFDFF\\uFFE4\\uFFE8\\uFFED\\uFFEE\\uFFFC\\uFFFD',\n 'astral': '\\uD800[\\uDD37-\\uDD3F\\uDD79-\\uDD89\\uDD8C-\\uDD8E\\uDD90-\\uDD9C\\uDDA0\\uDDD0-\\uDDFC]|\\uD802[\\uDC77\\uDC78\\uDEC8]|\\uD805\\uDF3F|\\uD807[\\uDFD5-\\uDFDC\\uDFE1-\\uDFF1]|\\uD81A[\\uDF3C-\\uDF3F\\uDF45]|\\uD82F\\uDC9C|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD64\\uDD6A-\\uDD6C\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDE00-\\uDE41\\uDE45\\uDF00-\\uDF56]|\\uD836[\\uDC00-\\uDDFF\\uDE37-\\uDE3A\\uDE6D-\\uDE74\\uDE76-\\uDE83\\uDE85\\uDE86]|\\uD838\\uDD4F|\\uD83B[\\uDCAC\\uDD2E]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD0D-\\uDDAD\\uDDE6-\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFA]|\\uD83D[\\uDC00-\\uDED7\\uDEDD-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6\\uDF00-\\uDF92\\uDF94-\\uDFCA]'\n },\n {\n 'name': 'Z',\n 'alias': 'Separator',\n 'bmp': ' \\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000'\n },\n {\n 'name': 'Zl',\n 'alias': 'Line_Separator',\n 'bmp': '\\u2028'\n },\n {\n 'name': 'Zp',\n 'alias': 'Paragraph_Separator',\n 'bmp': '\\u2029'\n },\n {\n 'name': 'Zs',\n 'alias': 'Space_Separator',\n 'bmp': ' \\xA0\\u1680\\u2000-\\u200A\\u202F\\u205F\\u3000'\n }\n];\n","module.exports = [\n {\n 'name': 'ASCII',\n 'bmp': '\\0-\\x7F'\n },\n {\n 'name': 'Alphabetic',\n 'bmp': 'A-Za-z\\xAA\\xB5\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0345\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05B0-\\u05BD\\u05BF\\u05C1\\u05C2\\u05C4\\u05C5\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0610-\\u061A\\u0620-\\u0657\\u0659-\\u065F\\u066E-\\u06D3\\u06D5-\\u06DC\\u06E1-\\u06E8\\u06ED-\\u06EF\\u06FA-\\u06FC\\u06FF\\u0710-\\u073F\\u074D-\\u07B1\\u07CA-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0817\\u081A-\\u082C\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u08D4-\\u08DF\\u08E3-\\u08E9\\u08F0-\\u093B\\u093D-\\u094C\\u094E-\\u0950\\u0955-\\u0963\\u0971-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD-\\u09C4\\u09C7\\u09C8\\u09CB\\u09CC\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09F0\\u09F1\\u09FC\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B\\u0A4C\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A70-\\u0A75\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB\\u0ACC\\u0AD0\\u0AE0-\\u0AE3\\u0AF9-\\u0AFC\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D-\\u0B44\\u0B47\\u0B48\\u0B4B\\u0B4C\\u0B56\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B71\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCC\\u0BD0\\u0BD7\\u0C00-\\u0C03\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4C\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C5D\\u0C60-\\u0C63\\u0C80-\\u0C83\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCC\\u0CD5\\u0CD6\\u0CDD\\u0CDE\\u0CE0-\\u0CE3\\u0CF1\\u0CF2\\u0D00-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4C\\u0D4E\\u0D54-\\u0D57\\u0D5F-\\u0D63\\u0D7A-\\u0D7F\\u0D81-\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DF2\\u0DF3\\u0E01-\\u0E3A\\u0E40-\\u0E46\\u0E4D\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB9\\u0EBB-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ECD\\u0EDC-\\u0EDF\\u0F00\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F81\\u0F88-\\u0F97\\u0F99-\\u0FBC\\u1000-\\u1036\\u1038\\u103B-\\u103F\\u1050-\\u108F\\u109A-\\u109D\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1713\\u171F-\\u1733\\u1740-\\u1753\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773\\u1780-\\u17B3\\u17B6-\\u17C8\\u17D7\\u17DC\\u1820-\\u1878\\u1880-\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u1938\\u1950-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u1A00-\\u1A1B\\u1A20-\\u1A5E\\u1A61-\\u1A74\\u1AA7\\u1ABF\\u1AC0\\u1ACC-\\u1ACE\\u1B00-\\u1B33\\u1B35-\\u1B43\\u1B45-\\u1B4C\\u1B80-\\u1BA9\\u1BAC-\\u1BAF\\u1BBA-\\u1BE5\\u1BE7-\\u1BF1\\u1C00-\\u1C36\\u1C4D-\\u1C4F\\u1C5A-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1DE7-\\u1DF4\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2071\\u207F\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2160-\\u2188\\u24B6-\\u24E9\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2DE0-\\u2DFF\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA61F\\uA62A\\uA62B\\uA640-\\uA66E\\uA674-\\uA67B\\uA67F-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA805\\uA807-\\uA827\\uA840-\\uA873\\uA880-\\uA8C3\\uA8C5\\uA8F2-\\uA8F7\\uA8FB\\uA8FD-\\uA8FF\\uA90A-\\uA92A\\uA930-\\uA952\\uA960-\\uA97C\\uA980-\\uA9B2\\uA9B4-\\uA9BF\\uA9CF\\uA9E0-\\uA9EF\\uA9FA-\\uA9FE\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA60-\\uAA76\\uAA7A-\\uAABE\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEF\\uAAF2-\\uAAF5\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABEA\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD40-\\uDD74\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDF00-\\uDF1F\\uDF2D-\\uDF4A\\uDF50-\\uDF7A\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC60-\\uDC76\\uDC80-\\uDC9E\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDD00-\\uDD15\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBE\\uDDBF\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE60-\\uDE7C\\uDE80-\\uDE9C\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF60-\\uDF72\\uDF80-\\uDF91]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDD00-\\uDD27\\uDE80-\\uDEA9\\uDEAB\\uDEAC\\uDEB0\\uDEB1\\uDF00-\\uDF1C\\uDF27\\uDF30-\\uDF45\\uDF70-\\uDF81\\uDFB0-\\uDFC4\\uDFE0-\\uDFF6]|\\uD804[\\uDC00-\\uDC45\\uDC71-\\uDC75\\uDC82-\\uDCB8\\uDCC2\\uDCD0-\\uDCE8\\uDD00-\\uDD32\\uDD44-\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD80-\\uDDBF\\uDDC1-\\uDDC4\\uDDCE\\uDDCF\\uDDDA\\uDDDC\\uDE00-\\uDE11\\uDE13-\\uDE34\\uDE37\\uDE3E\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEE8\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D-\\uDF44\\uDF47\\uDF48\\uDF4B\\uDF4C\\uDF50\\uDF57\\uDF5D-\\uDF63]|\\uD805[\\uDC00-\\uDC41\\uDC43-\\uDC45\\uDC47-\\uDC4A\\uDC5F-\\uDC61\\uDC80-\\uDCC1\\uDCC4\\uDCC5\\uDCC7\\uDD80-\\uDDB5\\uDDB8-\\uDDBE\\uDDD8-\\uDDDD\\uDE00-\\uDE3E\\uDE40\\uDE44\\uDE80-\\uDEB5\\uDEB8\\uDF00-\\uDF1A\\uDF1D-\\uDF2A\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC38\\uDCA0-\\uDCDF\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD35\\uDD37\\uDD38\\uDD3B\\uDD3C\\uDD3F-\\uDD42\\uDDA0-\\uDDA7\\uDDAA-\\uDDD7\\uDDDA-\\uDDDF\\uDDE1\\uDDE3\\uDDE4\\uDE00-\\uDE32\\uDE35-\\uDE3E\\uDE50-\\uDE97\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC3E\\uDC40\\uDC72-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD41\\uDD43\\uDD46\\uDD47\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD96\\uDD98\\uDEE0-\\uDEF6\\uDFB0]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE70-\\uDEBE\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE7F\\uDF00-\\uDF4A\\uDF4F-\\uDF87\\uDF8F-\\uDF9F\\uDFE0\\uDFE1\\uDFE3\\uDFF0\\uDFF1]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9E]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDD00-\\uDD43\\uDD47\\uDD4B]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'Any',\n 'isBmpLast': true,\n 'bmp': '\\0-\\uFFFF',\n 'astral': '[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]'\n },\n {\n 'name': 'Default_Ignorable_Code_Point',\n 'bmp': '\\xAD\\u034F\\u061C\\u115F\\u1160\\u17B4\\u17B5\\u180B-\\u180F\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8',\n 'astral': '\\uD82F[\\uDCA0-\\uDCA3]|\\uD834[\\uDD73-\\uDD7A]|[\\uDB40-\\uDB43][\\uDC00-\\uDFFF]'\n },\n {\n 'name': 'Lowercase',\n 'bmp': 'a-z\\xAA\\xB5\\xBA\\xDF-\\xF6\\xF8-\\xFF\\u0101\\u0103\\u0105\\u0107\\u0109\\u010B\\u010D\\u010F\\u0111\\u0113\\u0115\\u0117\\u0119\\u011B\\u011D\\u011F\\u0121\\u0123\\u0125\\u0127\\u0129\\u012B\\u012D\\u012F\\u0131\\u0133\\u0135\\u0137\\u0138\\u013A\\u013C\\u013E\\u0140\\u0142\\u0144\\u0146\\u0148\\u0149\\u014B\\u014D\\u014F\\u0151\\u0153\\u0155\\u0157\\u0159\\u015B\\u015D\\u015F\\u0161\\u0163\\u0165\\u0167\\u0169\\u016B\\u016D\\u016F\\u0171\\u0173\\u0175\\u0177\\u017A\\u017C\\u017E-\\u0180\\u0183\\u0185\\u0188\\u018C\\u018D\\u0192\\u0195\\u0199-\\u019B\\u019E\\u01A1\\u01A3\\u01A5\\u01A8\\u01AA\\u01AB\\u01AD\\u01B0\\u01B4\\u01B6\\u01B9\\u01BA\\u01BD-\\u01BF\\u01C6\\u01C9\\u01CC\\u01CE\\u01D0\\u01D2\\u01D4\\u01D6\\u01D8\\u01DA\\u01DC\\u01DD\\u01DF\\u01E1\\u01E3\\u01E5\\u01E7\\u01E9\\u01EB\\u01ED\\u01EF\\u01F0\\u01F3\\u01F5\\u01F9\\u01FB\\u01FD\\u01FF\\u0201\\u0203\\u0205\\u0207\\u0209\\u020B\\u020D\\u020F\\u0211\\u0213\\u0215\\u0217\\u0219\\u021B\\u021D\\u021F\\u0221\\u0223\\u0225\\u0227\\u0229\\u022B\\u022D\\u022F\\u0231\\u0233-\\u0239\\u023C\\u023F\\u0240\\u0242\\u0247\\u0249\\u024B\\u024D\\u024F-\\u0293\\u0295-\\u02B8\\u02C0\\u02C1\\u02E0-\\u02E4\\u0345\\u0371\\u0373\\u0377\\u037A-\\u037D\\u0390\\u03AC-\\u03CE\\u03D0\\u03D1\\u03D5-\\u03D7\\u03D9\\u03DB\\u03DD\\u03DF\\u03E1\\u03E3\\u03E5\\u03E7\\u03E9\\u03EB\\u03ED\\u03EF-\\u03F3\\u03F5\\u03F8\\u03FB\\u03FC\\u0430-\\u045F\\u0461\\u0463\\u0465\\u0467\\u0469\\u046B\\u046D\\u046F\\u0471\\u0473\\u0475\\u0477\\u0479\\u047B\\u047D\\u047F\\u0481\\u048B\\u048D\\u048F\\u0491\\u0493\\u0495\\u0497\\u0499\\u049B\\u049D\\u049F\\u04A1\\u04A3\\u04A5\\u04A7\\u04A9\\u04AB\\u04AD\\u04AF\\u04B1\\u04B3\\u04B5\\u04B7\\u04B9\\u04BB\\u04BD\\u04BF\\u04C2\\u04C4\\u04C6\\u04C8\\u04CA\\u04CC\\u04CE\\u04CF\\u04D1\\u04D3\\u04D5\\u04D7\\u04D9\\u04DB\\u04DD\\u04DF\\u04E1\\u04E3\\u04E5\\u04E7\\u04E9\\u04EB\\u04ED\\u04EF\\u04F1\\u04F3\\u04F5\\u04F7\\u04F9\\u04FB\\u04FD\\u04FF\\u0501\\u0503\\u0505\\u0507\\u0509\\u050B\\u050D\\u050F\\u0511\\u0513\\u0515\\u0517\\u0519\\u051B\\u051D\\u051F\\u0521\\u0523\\u0525\\u0527\\u0529\\u052B\\u052D\\u052F\\u0560-\\u0588\\u10D0-\\u10FA\\u10FD-\\u10FF\\u13F8-\\u13FD\\u1C80-\\u1C88\\u1D00-\\u1DBF\\u1E01\\u1E03\\u1E05\\u1E07\\u1E09\\u1E0B\\u1E0D\\u1E0F\\u1E11\\u1E13\\u1E15\\u1E17\\u1E19\\u1E1B\\u1E1D\\u1E1F\\u1E21\\u1E23\\u1E25\\u1E27\\u1E29\\u1E2B\\u1E2D\\u1E2F\\u1E31\\u1E33\\u1E35\\u1E37\\u1E39\\u1E3B\\u1E3D\\u1E3F\\u1E41\\u1E43\\u1E45\\u1E47\\u1E49\\u1E4B\\u1E4D\\u1E4F\\u1E51\\u1E53\\u1E55\\u1E57\\u1E59\\u1E5B\\u1E5D\\u1E5F\\u1E61\\u1E63\\u1E65\\u1E67\\u1E69\\u1E6B\\u1E6D\\u1E6F\\u1E71\\u1E73\\u1E75\\u1E77\\u1E79\\u1E7B\\u1E7D\\u1E7F\\u1E81\\u1E83\\u1E85\\u1E87\\u1E89\\u1E8B\\u1E8D\\u1E8F\\u1E91\\u1E93\\u1E95-\\u1E9D\\u1E9F\\u1EA1\\u1EA3\\u1EA5\\u1EA7\\u1EA9\\u1EAB\\u1EAD\\u1EAF\\u1EB1\\u1EB3\\u1EB5\\u1EB7\\u1EB9\\u1EBB\\u1EBD\\u1EBF\\u1EC1\\u1EC3\\u1EC5\\u1EC7\\u1EC9\\u1ECB\\u1ECD\\u1ECF\\u1ED1\\u1ED3\\u1ED5\\u1ED7\\u1ED9\\u1EDB\\u1EDD\\u1EDF\\u1EE1\\u1EE3\\u1EE5\\u1EE7\\u1EE9\\u1EEB\\u1EED\\u1EEF\\u1EF1\\u1EF3\\u1EF5\\u1EF7\\u1EF9\\u1EFB\\u1EFD\\u1EFF-\\u1F07\\u1F10-\\u1F15\\u1F20-\\u1F27\\u1F30-\\u1F37\\u1F40-\\u1F45\\u1F50-\\u1F57\\u1F60-\\u1F67\\u1F70-\\u1F7D\\u1F80-\\u1F87\\u1F90-\\u1F97\\u1FA0-\\u1FA7\\u1FB0-\\u1FB4\\u1FB6\\u1FB7\\u1FBE\\u1FC2-\\u1FC4\\u1FC6\\u1FC7\\u1FD0-\\u1FD3\\u1FD6\\u1FD7\\u1FE0-\\u1FE7\\u1FF2-\\u1FF4\\u1FF6\\u1FF7\\u2071\\u207F\\u2090-\\u209C\\u210A\\u210E\\u210F\\u2113\\u212F\\u2134\\u2139\\u213C\\u213D\\u2146-\\u2149\\u214E\\u2170-\\u217F\\u2184\\u24D0-\\u24E9\\u2C30-\\u2C5F\\u2C61\\u2C65\\u2C66\\u2C68\\u2C6A\\u2C6C\\u2C71\\u2C73\\u2C74\\u2C76-\\u2C7D\\u2C81\\u2C83\\u2C85\\u2C87\\u2C89\\u2C8B\\u2C8D\\u2C8F\\u2C91\\u2C93\\u2C95\\u2C97\\u2C99\\u2C9B\\u2C9D\\u2C9F\\u2CA1\\u2CA3\\u2CA5\\u2CA7\\u2CA9\\u2CAB\\u2CAD\\u2CAF\\u2CB1\\u2CB3\\u2CB5\\u2CB7\\u2CB9\\u2CBB\\u2CBD\\u2CBF\\u2CC1\\u2CC3\\u2CC5\\u2CC7\\u2CC9\\u2CCB\\u2CCD\\u2CCF\\u2CD1\\u2CD3\\u2CD5\\u2CD7\\u2CD9\\u2CDB\\u2CDD\\u2CDF\\u2CE1\\u2CE3\\u2CE4\\u2CEC\\u2CEE\\u2CF3\\u2D00-\\u2D25\\u2D27\\u2D2D\\uA641\\uA643\\uA645\\uA647\\uA649\\uA64B\\uA64D\\uA64F\\uA651\\uA653\\uA655\\uA657\\uA659\\uA65B\\uA65D\\uA65F\\uA661\\uA663\\uA665\\uA667\\uA669\\uA66B\\uA66D\\uA681\\uA683\\uA685\\uA687\\uA689\\uA68B\\uA68D\\uA68F\\uA691\\uA693\\uA695\\uA697\\uA699\\uA69B-\\uA69D\\uA723\\uA725\\uA727\\uA729\\uA72B\\uA72D\\uA72F-\\uA731\\uA733\\uA735\\uA737\\uA739\\uA73B\\uA73D\\uA73F\\uA741\\uA743\\uA745\\uA747\\uA749\\uA74B\\uA74D\\uA74F\\uA751\\uA753\\uA755\\uA757\\uA759\\uA75B\\uA75D\\uA75F\\uA761\\uA763\\uA765\\uA767\\uA769\\uA76B\\uA76D\\uA76F-\\uA778\\uA77A\\uA77C\\uA77F\\uA781\\uA783\\uA785\\uA787\\uA78C\\uA78E\\uA791\\uA793-\\uA795\\uA797\\uA799\\uA79B\\uA79D\\uA79F\\uA7A1\\uA7A3\\uA7A5\\uA7A7\\uA7A9\\uA7AF\\uA7B5\\uA7B7\\uA7B9\\uA7BB\\uA7BD\\uA7BF\\uA7C1\\uA7C3\\uA7C8\\uA7CA\\uA7D1\\uA7D3\\uA7D5\\uA7D7\\uA7D9\\uA7F6\\uA7F8-\\uA7FA\\uAB30-\\uAB5A\\uAB5C-\\uAB68\\uAB70-\\uABBF\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDC28-\\uDC4F\\uDCD8-\\uDCFB\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDF80\\uDF83-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD803[\\uDCC0-\\uDCF2]|\\uD806[\\uDCC0-\\uDCDF]|\\uD81B[\\uDE60-\\uDE7F]|\\uD835[\\uDC1A-\\uDC33\\uDC4E-\\uDC54\\uDC56-\\uDC67\\uDC82-\\uDC9B\\uDCB6-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDCCF\\uDCEA-\\uDD03\\uDD1E-\\uDD37\\uDD52-\\uDD6B\\uDD86-\\uDD9F\\uDDBA-\\uDDD3\\uDDEE-\\uDE07\\uDE22-\\uDE3B\\uDE56-\\uDE6F\\uDE8A-\\uDEA5\\uDEC2-\\uDEDA\\uDEDC-\\uDEE1\\uDEFC-\\uDF14\\uDF16-\\uDF1B\\uDF36-\\uDF4E\\uDF50-\\uDF55\\uDF70-\\uDF88\\uDF8A-\\uDF8F\\uDFAA-\\uDFC2\\uDFC4-\\uDFC9\\uDFCB]|\\uD837[\\uDF00-\\uDF09\\uDF0B-\\uDF1E]|\\uD83A[\\uDD22-\\uDD43]'\n },\n {\n 'name': 'Noncharacter_Code_Point',\n 'bmp': '\\uFDD0-\\uFDEF\\uFFFE\\uFFFF',\n 'astral': '[\\uD83F\\uD87F\\uD8BF\\uD8FF\\uD93F\\uD97F\\uD9BF\\uD9FF\\uDA3F\\uDA7F\\uDABF\\uDAFF\\uDB3F\\uDB7F\\uDBBF\\uDBFF][\\uDFFE\\uDFFF]'\n },\n {\n 'name': 'Uppercase',\n 'bmp': 'A-Z\\xC0-\\xD6\\xD8-\\xDE\\u0100\\u0102\\u0104\\u0106\\u0108\\u010A\\u010C\\u010E\\u0110\\u0112\\u0114\\u0116\\u0118\\u011A\\u011C\\u011E\\u0120\\u0122\\u0124\\u0126\\u0128\\u012A\\u012C\\u012E\\u0130\\u0132\\u0134\\u0136\\u0139\\u013B\\u013D\\u013F\\u0141\\u0143\\u0145\\u0147\\u014A\\u014C\\u014E\\u0150\\u0152\\u0154\\u0156\\u0158\\u015A\\u015C\\u015E\\u0160\\u0162\\u0164\\u0166\\u0168\\u016A\\u016C\\u016E\\u0170\\u0172\\u0174\\u0176\\u0178\\u0179\\u017B\\u017D\\u0181\\u0182\\u0184\\u0186\\u0187\\u0189-\\u018B\\u018E-\\u0191\\u0193\\u0194\\u0196-\\u0198\\u019C\\u019D\\u019F\\u01A0\\u01A2\\u01A4\\u01A6\\u01A7\\u01A9\\u01AC\\u01AE\\u01AF\\u01B1-\\u01B3\\u01B5\\u01B7\\u01B8\\u01BC\\u01C4\\u01C7\\u01CA\\u01CD\\u01CF\\u01D1\\u01D3\\u01D5\\u01D7\\u01D9\\u01DB\\u01DE\\u01E0\\u01E2\\u01E4\\u01E6\\u01E8\\u01EA\\u01EC\\u01EE\\u01F1\\u01F4\\u01F6-\\u01F8\\u01FA\\u01FC\\u01FE\\u0200\\u0202\\u0204\\u0206\\u0208\\u020A\\u020C\\u020E\\u0210\\u0212\\u0214\\u0216\\u0218\\u021A\\u021C\\u021E\\u0220\\u0222\\u0224\\u0226\\u0228\\u022A\\u022C\\u022E\\u0230\\u0232\\u023A\\u023B\\u023D\\u023E\\u0241\\u0243-\\u0246\\u0248\\u024A\\u024C\\u024E\\u0370\\u0372\\u0376\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E\\u038F\\u0391-\\u03A1\\u03A3-\\u03AB\\u03CF\\u03D2-\\u03D4\\u03D8\\u03DA\\u03DC\\u03DE\\u03E0\\u03E2\\u03E4\\u03E6\\u03E8\\u03EA\\u03EC\\u03EE\\u03F4\\u03F7\\u03F9\\u03FA\\u03FD-\\u042F\\u0460\\u0462\\u0464\\u0466\\u0468\\u046A\\u046C\\u046E\\u0470\\u0472\\u0474\\u0476\\u0478\\u047A\\u047C\\u047E\\u0480\\u048A\\u048C\\u048E\\u0490\\u0492\\u0494\\u0496\\u0498\\u049A\\u049C\\u049E\\u04A0\\u04A2\\u04A4\\u04A6\\u04A8\\u04AA\\u04AC\\u04AE\\u04B0\\u04B2\\u04B4\\u04B6\\u04B8\\u04BA\\u04BC\\u04BE\\u04C0\\u04C1\\u04C3\\u04C5\\u04C7\\u04C9\\u04CB\\u04CD\\u04D0\\u04D2\\u04D4\\u04D6\\u04D8\\u04DA\\u04DC\\u04DE\\u04E0\\u04E2\\u04E4\\u04E6\\u04E8\\u04EA\\u04EC\\u04EE\\u04F0\\u04F2\\u04F4\\u04F6\\u04F8\\u04FA\\u04FC\\u04FE\\u0500\\u0502\\u0504\\u0506\\u0508\\u050A\\u050C\\u050E\\u0510\\u0512\\u0514\\u0516\\u0518\\u051A\\u051C\\u051E\\u0520\\u0522\\u0524\\u0526\\u0528\\u052A\\u052C\\u052E\\u0531-\\u0556\\u10A0-\\u10C5\\u10C7\\u10CD\\u13A0-\\u13F5\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1E00\\u1E02\\u1E04\\u1E06\\u1E08\\u1E0A\\u1E0C\\u1E0E\\u1E10\\u1E12\\u1E14\\u1E16\\u1E18\\u1E1A\\u1E1C\\u1E1E\\u1E20\\u1E22\\u1E24\\u1E26\\u1E28\\u1E2A\\u1E2C\\u1E2E\\u1E30\\u1E32\\u1E34\\u1E36\\u1E38\\u1E3A\\u1E3C\\u1E3E\\u1E40\\u1E42\\u1E44\\u1E46\\u1E48\\u1E4A\\u1E4C\\u1E4E\\u1E50\\u1E52\\u1E54\\u1E56\\u1E58\\u1E5A\\u1E5C\\u1E5E\\u1E60\\u1E62\\u1E64\\u1E66\\u1E68\\u1E6A\\u1E6C\\u1E6E\\u1E70\\u1E72\\u1E74\\u1E76\\u1E78\\u1E7A\\u1E7C\\u1E7E\\u1E80\\u1E82\\u1E84\\u1E86\\u1E88\\u1E8A\\u1E8C\\u1E8E\\u1E90\\u1E92\\u1E94\\u1E9E\\u1EA0\\u1EA2\\u1EA4\\u1EA6\\u1EA8\\u1EAA\\u1EAC\\u1EAE\\u1EB0\\u1EB2\\u1EB4\\u1EB6\\u1EB8\\u1EBA\\u1EBC\\u1EBE\\u1EC0\\u1EC2\\u1EC4\\u1EC6\\u1EC8\\u1ECA\\u1ECC\\u1ECE\\u1ED0\\u1ED2\\u1ED4\\u1ED6\\u1ED8\\u1EDA\\u1EDC\\u1EDE\\u1EE0\\u1EE2\\u1EE4\\u1EE6\\u1EE8\\u1EEA\\u1EEC\\u1EEE\\u1EF0\\u1EF2\\u1EF4\\u1EF6\\u1EF8\\u1EFA\\u1EFC\\u1EFE\\u1F08-\\u1F0F\\u1F18-\\u1F1D\\u1F28-\\u1F2F\\u1F38-\\u1F3F\\u1F48-\\u1F4D\\u1F59\\u1F5B\\u1F5D\\u1F5F\\u1F68-\\u1F6F\\u1FB8-\\u1FBB\\u1FC8-\\u1FCB\\u1FD8-\\u1FDB\\u1FE8-\\u1FEC\\u1FF8-\\u1FFB\\u2102\\u2107\\u210B-\\u210D\\u2110-\\u2112\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u2130-\\u2133\\u213E\\u213F\\u2145\\u2160-\\u216F\\u2183\\u24B6-\\u24CF\\u2C00-\\u2C2F\\u2C60\\u2C62-\\u2C64\\u2C67\\u2C69\\u2C6B\\u2C6D-\\u2C70\\u2C72\\u2C75\\u2C7E-\\u2C80\\u2C82\\u2C84\\u2C86\\u2C88\\u2C8A\\u2C8C\\u2C8E\\u2C90\\u2C92\\u2C94\\u2C96\\u2C98\\u2C9A\\u2C9C\\u2C9E\\u2CA0\\u2CA2\\u2CA4\\u2CA6\\u2CA8\\u2CAA\\u2CAC\\u2CAE\\u2CB0\\u2CB2\\u2CB4\\u2CB6\\u2CB8\\u2CBA\\u2CBC\\u2CBE\\u2CC0\\u2CC2\\u2CC4\\u2CC6\\u2CC8\\u2CCA\\u2CCC\\u2CCE\\u2CD0\\u2CD2\\u2CD4\\u2CD6\\u2CD8\\u2CDA\\u2CDC\\u2CDE\\u2CE0\\u2CE2\\u2CEB\\u2CED\\u2CF2\\uA640\\uA642\\uA644\\uA646\\uA648\\uA64A\\uA64C\\uA64E\\uA650\\uA652\\uA654\\uA656\\uA658\\uA65A\\uA65C\\uA65E\\uA660\\uA662\\uA664\\uA666\\uA668\\uA66A\\uA66C\\uA680\\uA682\\uA684\\uA686\\uA688\\uA68A\\uA68C\\uA68E\\uA690\\uA692\\uA694\\uA696\\uA698\\uA69A\\uA722\\uA724\\uA726\\uA728\\uA72A\\uA72C\\uA72E\\uA732\\uA734\\uA736\\uA738\\uA73A\\uA73C\\uA73E\\uA740\\uA742\\uA744\\uA746\\uA748\\uA74A\\uA74C\\uA74E\\uA750\\uA752\\uA754\\uA756\\uA758\\uA75A\\uA75C\\uA75E\\uA760\\uA762\\uA764\\uA766\\uA768\\uA76A\\uA76C\\uA76E\\uA779\\uA77B\\uA77D\\uA77E\\uA780\\uA782\\uA784\\uA786\\uA78B\\uA78D\\uA790\\uA792\\uA796\\uA798\\uA79A\\uA79C\\uA79E\\uA7A0\\uA7A2\\uA7A4\\uA7A6\\uA7A8\\uA7AA-\\uA7AE\\uA7B0-\\uA7B4\\uA7B6\\uA7B8\\uA7BA\\uA7BC\\uA7BE\\uA7C0\\uA7C2\\uA7C4-\\uA7C7\\uA7C9\\uA7D0\\uA7D6\\uA7D8\\uA7F5\\uFF21-\\uFF3A',\n 'astral': '\\uD801[\\uDC00-\\uDC27\\uDCB0-\\uDCD3\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95]|\\uD803[\\uDC80-\\uDCB2]|\\uD806[\\uDCA0-\\uDCBF]|\\uD81B[\\uDE40-\\uDE5F]|\\uD835[\\uDC00-\\uDC19\\uDC34-\\uDC4D\\uDC68-\\uDC81\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB5\\uDCD0-\\uDCE9\\uDD04\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD38\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD6C-\\uDD85\\uDDA0-\\uDDB9\\uDDD4-\\uDDED\\uDE08-\\uDE21\\uDE3C-\\uDE55\\uDE70-\\uDE89\\uDEA8-\\uDEC0\\uDEE2-\\uDEFA\\uDF1C-\\uDF34\\uDF56-\\uDF6E\\uDF90-\\uDFA8\\uDFCA]|\\uD83A[\\uDD00-\\uDD21]|\\uD83C[\\uDD30-\\uDD49\\uDD50-\\uDD69\\uDD70-\\uDD89]'\n },\n {\n 'name': 'White_Space',\n 'bmp': '\\t-\\r \\x85\\xA0\\u1680\\u2000-\\u200A\\u2028\\u2029\\u202F\\u205F\\u3000'\n }\n];\n","module.exports = [\n {\n 'name': 'Adlam',\n 'astral': '\\uD83A[\\uDD00-\\uDD4B\\uDD50-\\uDD59\\uDD5E\\uDD5F]'\n },\n {\n 'name': 'Ahom',\n 'astral': '\\uD805[\\uDF00-\\uDF1A\\uDF1D-\\uDF2B\\uDF30-\\uDF46]'\n },\n {\n 'name': 'Anatolian_Hieroglyphs',\n 'astral': '\\uD811[\\uDC00-\\uDE46]'\n },\n {\n 'name': 'Arabic',\n 'bmp': '\\u0600-\\u0604\\u0606-\\u060B\\u060D-\\u061A\\u061C-\\u061E\\u0620-\\u063F\\u0641-\\u064A\\u0656-\\u066F\\u0671-\\u06DC\\u06DE-\\u06FF\\u0750-\\u077F\\u0870-\\u088E\\u0890\\u0891\\u0898-\\u08E1\\u08E3-\\u08FF\\uFB50-\\uFBC2\\uFBD3-\\uFD3D\\uFD40-\\uFD8F\\uFD92-\\uFDC7\\uFDCF\\uFDF0-\\uFDFF\\uFE70-\\uFE74\\uFE76-\\uFEFC',\n 'astral': '\\uD803[\\uDE60-\\uDE7E]|\\uD83B[\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB\\uDEF0\\uDEF1]'\n },\n {\n 'name': 'Armenian',\n 'bmp': '\\u0531-\\u0556\\u0559-\\u058A\\u058D-\\u058F\\uFB13-\\uFB17'\n },\n {\n 'name': 'Avestan',\n 'astral': '\\uD802[\\uDF00-\\uDF35\\uDF39-\\uDF3F]'\n },\n {\n 'name': 'Balinese',\n 'bmp': '\\u1B00-\\u1B4C\\u1B50-\\u1B7E'\n },\n {\n 'name': 'Bamum',\n 'bmp': '\\uA6A0-\\uA6F7',\n 'astral': '\\uD81A[\\uDC00-\\uDE38]'\n },\n {\n 'name': 'Bassa_Vah',\n 'astral': '\\uD81A[\\uDED0-\\uDEED\\uDEF0-\\uDEF5]'\n },\n {\n 'name': 'Batak',\n 'bmp': '\\u1BC0-\\u1BF3\\u1BFC-\\u1BFF'\n },\n {\n 'name': 'Bengali',\n 'bmp': '\\u0980-\\u0983\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BC-\\u09C4\\u09C7\\u09C8\\u09CB-\\u09CE\\u09D7\\u09DC\\u09DD\\u09DF-\\u09E3\\u09E6-\\u09FE'\n },\n {\n 'name': 'Bhaiksuki',\n 'astral': '\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC36\\uDC38-\\uDC45\\uDC50-\\uDC6C]'\n },\n {\n 'name': 'Bopomofo',\n 'bmp': '\\u02EA\\u02EB\\u3105-\\u312F\\u31A0-\\u31BF'\n },\n {\n 'name': 'Brahmi',\n 'astral': '\\uD804[\\uDC00-\\uDC4D\\uDC52-\\uDC75\\uDC7F]'\n },\n {\n 'name': 'Braille',\n 'bmp': '\\u2800-\\u28FF'\n },\n {\n 'name': 'Buginese',\n 'bmp': '\\u1A00-\\u1A1B\\u1A1E\\u1A1F'\n },\n {\n 'name': 'Buhid',\n 'bmp': '\\u1740-\\u1753'\n },\n {\n 'name': 'Canadian_Aboriginal',\n 'bmp': '\\u1400-\\u167F\\u18B0-\\u18F5',\n 'astral': '\\uD806[\\uDEB0-\\uDEBF]'\n },\n {\n 'name': 'Carian',\n 'astral': '\\uD800[\\uDEA0-\\uDED0]'\n },\n {\n 'name': 'Caucasian_Albanian',\n 'astral': '\\uD801[\\uDD30-\\uDD63\\uDD6F]'\n },\n {\n 'name': 'Chakma',\n 'astral': '\\uD804[\\uDD00-\\uDD34\\uDD36-\\uDD47]'\n },\n {\n 'name': 'Cham',\n 'bmp': '\\uAA00-\\uAA36\\uAA40-\\uAA4D\\uAA50-\\uAA59\\uAA5C-\\uAA5F'\n },\n {\n 'name': 'Cherokee',\n 'bmp': '\\u13A0-\\u13F5\\u13F8-\\u13FD\\uAB70-\\uABBF'\n },\n {\n 'name': 'Chorasmian',\n 'astral': '\\uD803[\\uDFB0-\\uDFCB]'\n },\n {\n 'name': 'Common',\n 'bmp': '\\0-@\\\\[-`\\\\{-\\xA9\\xAB-\\xB9\\xBB-\\xBF\\xD7\\xF7\\u02B9-\\u02DF\\u02E5-\\u02E9\\u02EC-\\u02FF\\u0374\\u037E\\u0385\\u0387\\u0605\\u060C\\u061B\\u061F\\u0640\\u06DD\\u08E2\\u0964\\u0965\\u0E3F\\u0FD5-\\u0FD8\\u10FB\\u16EB-\\u16ED\\u1735\\u1736\\u1802\\u1803\\u1805\\u1CD3\\u1CE1\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5-\\u1CF7\\u1CFA\\u2000-\\u200B\\u200E-\\u2064\\u2066-\\u2070\\u2074-\\u207E\\u2080-\\u208E\\u20A0-\\u20C0\\u2100-\\u2125\\u2127-\\u2129\\u212C-\\u2131\\u2133-\\u214D\\u214F-\\u215F\\u2189-\\u218B\\u2190-\\u2426\\u2440-\\u244A\\u2460-\\u27FF\\u2900-\\u2B73\\u2B76-\\u2B95\\u2B97-\\u2BFF\\u2E00-\\u2E5D\\u2FF0-\\u2FFB\\u3000-\\u3004\\u3006\\u3008-\\u3020\\u3030-\\u3037\\u303C-\\u303F\\u309B\\u309C\\u30A0\\u30FB\\u30FC\\u3190-\\u319F\\u31C0-\\u31E3\\u3220-\\u325F\\u327F-\\u32CF\\u32FF\\u3358-\\u33FF\\u4DC0-\\u4DFF\\uA700-\\uA721\\uA788-\\uA78A\\uA830-\\uA839\\uA92E\\uA9CF\\uAB5B\\uAB6A\\uAB6B\\uFD3E\\uFD3F\\uFE10-\\uFE19\\uFE30-\\uFE52\\uFE54-\\uFE66\\uFE68-\\uFE6B\\uFEFF\\uFF01-\\uFF20\\uFF3B-\\uFF40\\uFF5B-\\uFF65\\uFF70\\uFF9E\\uFF9F\\uFFE0-\\uFFE6\\uFFE8-\\uFFEE\\uFFF9-\\uFFFD',\n 'astral': '\\uD800[\\uDD00-\\uDD02\\uDD07-\\uDD33\\uDD37-\\uDD3F\\uDD90-\\uDD9C\\uDDD0-\\uDDFC\\uDEE1-\\uDEFB]|\\uD82F[\\uDCA0-\\uDCA3]|\\uD833[\\uDF50-\\uDFC3]|\\uD834[\\uDC00-\\uDCF5\\uDD00-\\uDD26\\uDD29-\\uDD66\\uDD6A-\\uDD7A\\uDD83\\uDD84\\uDD8C-\\uDDA9\\uDDAE-\\uDDEA\\uDEE0-\\uDEF3\\uDF00-\\uDF56\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDFCB\\uDFCE-\\uDFFF]|\\uD83B[\\uDC71-\\uDCB4\\uDD01-\\uDD3D]|\\uD83C[\\uDC00-\\uDC2B\\uDC30-\\uDC93\\uDCA0-\\uDCAE\\uDCB1-\\uDCBF\\uDCC1-\\uDCCF\\uDCD1-\\uDCF5\\uDD00-\\uDDAD\\uDDE6-\\uDDFF\\uDE01\\uDE02\\uDE10-\\uDE3B\\uDE40-\\uDE48\\uDE50\\uDE51\\uDE60-\\uDE65\\uDF00-\\uDFFF]|\\uD83D[\\uDC00-\\uDED7\\uDEDD-\\uDEEC\\uDEF0-\\uDEFC\\uDF00-\\uDF73\\uDF80-\\uDFD8\\uDFE0-\\uDFEB\\uDFF0]|\\uD83E[\\uDC00-\\uDC0B\\uDC10-\\uDC47\\uDC50-\\uDC59\\uDC60-\\uDC87\\uDC90-\\uDCAD\\uDCB0\\uDCB1\\uDD00-\\uDE53\\uDE60-\\uDE6D\\uDE70-\\uDE74\\uDE78-\\uDE7C\\uDE80-\\uDE86\\uDE90-\\uDEAC\\uDEB0-\\uDEBA\\uDEC0-\\uDEC5\\uDED0-\\uDED9\\uDEE0-\\uDEE7\\uDEF0-\\uDEF6\\uDF00-\\uDF92\\uDF94-\\uDFCA\\uDFF0-\\uDFF9]|\\uDB40[\\uDC01\\uDC20-\\uDC7F]'\n },\n {\n 'name': 'Coptic',\n 'bmp': '\\u03E2-\\u03EF\\u2C80-\\u2CF3\\u2CF9-\\u2CFF'\n },\n {\n 'name': 'Cuneiform',\n 'astral': '\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC70-\\uDC74\\uDC80-\\uDD43]'\n },\n {\n 'name': 'Cypriot',\n 'astral': '\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F]'\n },\n {\n 'name': 'Cypro_Minoan',\n 'astral': '\\uD80B[\\uDF90-\\uDFF2]'\n },\n {\n 'name': 'Cyrillic',\n 'bmp': '\\u0400-\\u0484\\u0487-\\u052F\\u1C80-\\u1C88\\u1D2B\\u1D78\\u2DE0-\\u2DFF\\uA640-\\uA69F\\uFE2E\\uFE2F'\n },\n {\n 'name': 'Deseret',\n 'astral': '\\uD801[\\uDC00-\\uDC4F]'\n },\n {\n 'name': 'Devanagari',\n 'bmp': '\\u0900-\\u0950\\u0955-\\u0963\\u0966-\\u097F\\uA8E0-\\uA8FF'\n },\n {\n 'name': 'Dives_Akuru',\n 'astral': '\\uD806[\\uDD00-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD35\\uDD37\\uDD38\\uDD3B-\\uDD46\\uDD50-\\uDD59]'\n },\n {\n 'name': 'Dogra',\n 'astral': '\\uD806[\\uDC00-\\uDC3B]'\n },\n {\n 'name': 'Duployan',\n 'astral': '\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99\\uDC9C-\\uDC9F]'\n },\n {\n 'name': 'Egyptian_Hieroglyphs',\n 'astral': '\\uD80C[\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E\\uDC30-\\uDC38]'\n },\n {\n 'name': 'Elbasan',\n 'astral': '\\uD801[\\uDD00-\\uDD27]'\n },\n {\n 'name': 'Elymaic',\n 'astral': '\\uD803[\\uDFE0-\\uDFF6]'\n },\n {\n 'name': 'Ethiopic',\n 'bmp': '\\u1200-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u135D-\\u137C\\u1380-\\u1399\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E',\n 'astral': '\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]'\n },\n {\n 'name': 'Georgian',\n 'bmp': '\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u10FF\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u2D00-\\u2D25\\u2D27\\u2D2D'\n },\n {\n 'name': 'Glagolitic',\n 'bmp': '\\u2C00-\\u2C5F',\n 'astral': '\\uD838[\\uDC00-\\uDC06\\uDC08-\\uDC18\\uDC1B-\\uDC21\\uDC23\\uDC24\\uDC26-\\uDC2A]'\n },\n {\n 'name': 'Gothic',\n 'astral': '\\uD800[\\uDF30-\\uDF4A]'\n },\n {\n 'name': 'Grantha',\n 'astral': '\\uD804[\\uDF00-\\uDF03\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3C-\\uDF44\\uDF47\\uDF48\\uDF4B-\\uDF4D\\uDF50\\uDF57\\uDF5D-\\uDF63\\uDF66-\\uDF6C\\uDF70-\\uDF74]'\n },\n {\n 'name': 'Greek',\n 'bmp': '\\u0370-\\u0373\\u0375-\\u0377\\u037A-\\u037D\\u037F\\u0384\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03E1\\u03F0-\\u03FF\\u1D26-\\u1D2A\\u1D5D-\\u1D61\\u1D66-\\u1D6A\\u1DBF\\u1F00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FC4\\u1FC6-\\u1FD3\\u1FD6-\\u1FDB\\u1FDD-\\u1FEF\\u1FF2-\\u1FF4\\u1FF6-\\u1FFE\\u2126\\uAB65',\n 'astral': '\\uD800[\\uDD40-\\uDD8E\\uDDA0]|\\uD834[\\uDE00-\\uDE45]'\n },\n {\n 'name': 'Gujarati',\n 'bmp': '\\u0A81-\\u0A83\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABC-\\u0AC5\\u0AC7-\\u0AC9\\u0ACB-\\u0ACD\\u0AD0\\u0AE0-\\u0AE3\\u0AE6-\\u0AF1\\u0AF9-\\u0AFF'\n },\n {\n 'name': 'Gunjala_Gondi',\n 'astral': '\\uD807[\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD8E\\uDD90\\uDD91\\uDD93-\\uDD98\\uDDA0-\\uDDA9]'\n },\n {\n 'name': 'Gurmukhi',\n 'bmp': '\\u0A01-\\u0A03\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A3C\\u0A3E-\\u0A42\\u0A47\\u0A48\\u0A4B-\\u0A4D\\u0A51\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A76'\n },\n {\n 'name': 'Han',\n 'bmp': '\\u2E80-\\u2E99\\u2E9B-\\u2EF3\\u2F00-\\u2FD5\\u3005\\u3007\\u3021-\\u3029\\u3038-\\u303B\\u3400-\\u4DBF\\u4E00-\\u9FFF\\uF900-\\uFA6D\\uFA70-\\uFAD9',\n 'astral': '\\uD81B[\\uDFE2\\uDFE3\\uDFF0\\uDFF1]|[\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A]'\n },\n {\n 'name': 'Hangul',\n 'bmp': '\\u1100-\\u11FF\\u302E\\u302F\\u3131-\\u318E\\u3200-\\u321E\\u3260-\\u327E\\uA960-\\uA97C\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uFFA0-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC'\n },\n {\n 'name': 'Hanifi_Rohingya',\n 'astral': '\\uD803[\\uDD00-\\uDD27\\uDD30-\\uDD39]'\n },\n {\n 'name': 'Hanunoo',\n 'bmp': '\\u1720-\\u1734'\n },\n {\n 'name': 'Hatran',\n 'astral': '\\uD802[\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDCFF]'\n },\n {\n 'name': 'Hebrew',\n 'bmp': '\\u0591-\\u05C7\\u05D0-\\u05EA\\u05EF-\\u05F4\\uFB1D-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFB4F'\n },\n {\n 'name': 'Hiragana',\n 'bmp': '\\u3041-\\u3096\\u309D-\\u309F',\n 'astral': '\\uD82C[\\uDC01-\\uDD1F\\uDD50-\\uDD52]|\\uD83C\\uDE00'\n },\n {\n 'name': 'Imperial_Aramaic',\n 'astral': '\\uD802[\\uDC40-\\uDC55\\uDC57-\\uDC5F]'\n },\n {\n 'name': 'Inherited',\n 'bmp': '\\u0300-\\u036F\\u0485\\u0486\\u064B-\\u0655\\u0670\\u0951-\\u0954\\u1AB0-\\u1ACE\\u1CD0-\\u1CD2\\u1CD4-\\u1CE0\\u1CE2-\\u1CE8\\u1CED\\u1CF4\\u1CF8\\u1CF9\\u1DC0-\\u1DFF\\u200C\\u200D\\u20D0-\\u20F0\\u302A-\\u302D\\u3099\\u309A\\uFE00-\\uFE0F\\uFE20-\\uFE2D',\n 'astral': '\\uD800[\\uDDFD\\uDEE0]|\\uD804\\uDF3B|\\uD833[\\uDF00-\\uDF2D\\uDF30-\\uDF46]|\\uD834[\\uDD67-\\uDD69\\uDD7B-\\uDD82\\uDD85-\\uDD8B\\uDDAA-\\uDDAD]|\\uDB40[\\uDD00-\\uDDEF]'\n },\n {\n 'name': 'Inscriptional_Pahlavi',\n 'astral': '\\uD802[\\uDF60-\\uDF72\\uDF78-\\uDF7F]'\n },\n {\n 'name': 'Inscriptional_Parthian',\n 'astral': '\\uD802[\\uDF40-\\uDF55\\uDF58-\\uDF5F]'\n },\n {\n 'name': 'Javanese',\n 'bmp': '\\uA980-\\uA9CD\\uA9D0-\\uA9D9\\uA9DE\\uA9DF'\n },\n {\n 'name': 'Kaithi',\n 'astral': '\\uD804[\\uDC80-\\uDCC2\\uDCCD]'\n },\n {\n 'name': 'Kannada',\n 'bmp': '\\u0C80-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBC-\\u0CC4\\u0CC6-\\u0CC8\\u0CCA-\\u0CCD\\u0CD5\\u0CD6\\u0CDD\\u0CDE\\u0CE0-\\u0CE3\\u0CE6-\\u0CEF\\u0CF1\\u0CF2'\n },\n {\n 'name': 'Katakana',\n 'bmp': '\\u30A1-\\u30FA\\u30FD-\\u30FF\\u31F0-\\u31FF\\u32D0-\\u32FE\\u3300-\\u3357\\uFF66-\\uFF6F\\uFF71-\\uFF9D',\n 'astral': '\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00\\uDD20-\\uDD22\\uDD64-\\uDD67]'\n },\n {\n 'name': 'Kayah_Li',\n 'bmp': '\\uA900-\\uA92D\\uA92F'\n },\n {\n 'name': 'Kharoshthi',\n 'astral': '\\uD802[\\uDE00-\\uDE03\\uDE05\\uDE06\\uDE0C-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE38-\\uDE3A\\uDE3F-\\uDE48\\uDE50-\\uDE58]'\n },\n {\n 'name': 'Khitan_Small_Script',\n 'astral': '\\uD81B\\uDFE4|\\uD822[\\uDF00-\\uDFFF]|\\uD823[\\uDC00-\\uDCD5]'\n },\n {\n 'name': 'Khmer',\n 'bmp': '\\u1780-\\u17DD\\u17E0-\\u17E9\\u17F0-\\u17F9\\u19E0-\\u19FF'\n },\n {\n 'name': 'Khojki',\n 'astral': '\\uD804[\\uDE00-\\uDE11\\uDE13-\\uDE3E]'\n },\n {\n 'name': 'Khudawadi',\n 'astral': '\\uD804[\\uDEB0-\\uDEEA\\uDEF0-\\uDEF9]'\n },\n {\n 'name': 'Lao',\n 'bmp': '\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0EC8-\\u0ECD\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF'\n },\n {\n 'name': 'Latin',\n 'bmp': 'A-Za-z\\xAA\\xBA\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02B8\\u02E0-\\u02E4\\u1D00-\\u1D25\\u1D2C-\\u1D5C\\u1D62-\\u1D65\\u1D6B-\\u1D77\\u1D79-\\u1DBE\\u1E00-\\u1EFF\\u2071\\u207F\\u2090-\\u209C\\u212A\\u212B\\u2132\\u214E\\u2160-\\u2188\\u2C60-\\u2C7F\\uA722-\\uA787\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA7FF\\uAB30-\\uAB5A\\uAB5C-\\uAB64\\uAB66-\\uAB69\\uFB00-\\uFB06\\uFF21-\\uFF3A\\uFF41-\\uFF5A',\n 'astral': '\\uD801[\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD837[\\uDF00-\\uDF1E]'\n },\n {\n 'name': 'Lepcha',\n 'bmp': '\\u1C00-\\u1C37\\u1C3B-\\u1C49\\u1C4D-\\u1C4F'\n },\n {\n 'name': 'Limbu',\n 'bmp': '\\u1900-\\u191E\\u1920-\\u192B\\u1930-\\u193B\\u1940\\u1944-\\u194F'\n },\n {\n 'name': 'Linear_A',\n 'astral': '\\uD801[\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67]'\n },\n {\n 'name': 'Linear_B',\n 'astral': '\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA]'\n },\n {\n 'name': 'Lisu',\n 'bmp': '\\uA4D0-\\uA4FF',\n 'astral': '\\uD807\\uDFB0'\n },\n {\n 'name': 'Lycian',\n 'astral': '\\uD800[\\uDE80-\\uDE9C]'\n },\n {\n 'name': 'Lydian',\n 'astral': '\\uD802[\\uDD20-\\uDD39\\uDD3F]'\n },\n {\n 'name': 'Mahajani',\n 'astral': '\\uD804[\\uDD50-\\uDD76]'\n },\n {\n 'name': 'Makasar',\n 'astral': '\\uD807[\\uDEE0-\\uDEF8]'\n },\n {\n 'name': 'Malayalam',\n 'bmp': '\\u0D00-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D44\\u0D46-\\u0D48\\u0D4A-\\u0D4F\\u0D54-\\u0D63\\u0D66-\\u0D7F'\n },\n {\n 'name': 'Mandaic',\n 'bmp': '\\u0840-\\u085B\\u085E'\n },\n {\n 'name': 'Manichaean',\n 'astral': '\\uD802[\\uDEC0-\\uDEE6\\uDEEB-\\uDEF6]'\n },\n {\n 'name': 'Marchen',\n 'astral': '\\uD807[\\uDC70-\\uDC8F\\uDC92-\\uDCA7\\uDCA9-\\uDCB6]'\n },\n {\n 'name': 'Masaram_Gondi',\n 'astral': '\\uD807[\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD36\\uDD3A\\uDD3C\\uDD3D\\uDD3F-\\uDD47\\uDD50-\\uDD59]'\n },\n {\n 'name': 'Medefaidrin',\n 'astral': '\\uD81B[\\uDE40-\\uDE9A]'\n },\n {\n 'name': 'Meetei_Mayek',\n 'bmp': '\\uAAE0-\\uAAF6\\uABC0-\\uABED\\uABF0-\\uABF9'\n },\n {\n 'name': 'Mende_Kikakui',\n 'astral': '\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCD6]'\n },\n {\n 'name': 'Meroitic_Cursive',\n 'astral': '\\uD802[\\uDDA0-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDDFF]'\n },\n {\n 'name': 'Meroitic_Hieroglyphs',\n 'astral': '\\uD802[\\uDD80-\\uDD9F]'\n },\n {\n 'name': 'Miao',\n 'astral': '\\uD81B[\\uDF00-\\uDF4A\\uDF4F-\\uDF87\\uDF8F-\\uDF9F]'\n },\n {\n 'name': 'Modi',\n 'astral': '\\uD805[\\uDE00-\\uDE44\\uDE50-\\uDE59]'\n },\n {\n 'name': 'Mongolian',\n 'bmp': '\\u1800\\u1801\\u1804\\u1806-\\u1819\\u1820-\\u1878\\u1880-\\u18AA',\n 'astral': '\\uD805[\\uDE60-\\uDE6C]'\n },\n {\n 'name': 'Mro',\n 'astral': '\\uD81A[\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE6E\\uDE6F]'\n },\n {\n 'name': 'Multani',\n 'astral': '\\uD804[\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA9]'\n },\n {\n 'name': 'Myanmar',\n 'bmp': '\\u1000-\\u109F\\uA9E0-\\uA9FE\\uAA60-\\uAA7F'\n },\n {\n 'name': 'Nabataean',\n 'astral': '\\uD802[\\uDC80-\\uDC9E\\uDCA7-\\uDCAF]'\n },\n {\n 'name': 'Nandinagari',\n 'astral': '\\uD806[\\uDDA0-\\uDDA7\\uDDAA-\\uDDD7\\uDDDA-\\uDDE4]'\n },\n {\n 'name': 'New_Tai_Lue',\n 'bmp': '\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u19DE\\u19DF'\n },\n {\n 'name': 'Newa',\n 'astral': '\\uD805[\\uDC00-\\uDC5B\\uDC5D-\\uDC61]'\n },\n {\n 'name': 'Nko',\n 'bmp': '\\u07C0-\\u07FA\\u07FD-\\u07FF'\n },\n {\n 'name': 'Nushu',\n 'astral': '\\uD81B\\uDFE1|\\uD82C[\\uDD70-\\uDEFB]'\n },\n {\n 'name': 'Nyiakeng_Puachue_Hmong',\n 'astral': '\\uD838[\\uDD00-\\uDD2C\\uDD30-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDD4F]'\n },\n {\n 'name': 'Ogham',\n 'bmp': '\\u1680-\\u169C'\n },\n {\n 'name': 'Ol_Chiki',\n 'bmp': '\\u1C50-\\u1C7F'\n },\n {\n 'name': 'Old_Hungarian',\n 'astral': '\\uD803[\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDCFF]'\n },\n {\n 'name': 'Old_Italic',\n 'astral': '\\uD800[\\uDF00-\\uDF23\\uDF2D-\\uDF2F]'\n },\n {\n 'name': 'Old_North_Arabian',\n 'astral': '\\uD802[\\uDE80-\\uDE9F]'\n },\n {\n 'name': 'Old_Permic',\n 'astral': '\\uD800[\\uDF50-\\uDF7A]'\n },\n {\n 'name': 'Old_Persian',\n 'astral': '\\uD800[\\uDFA0-\\uDFC3\\uDFC8-\\uDFD5]'\n },\n {\n 'name': 'Old_Sogdian',\n 'astral': '\\uD803[\\uDF00-\\uDF27]'\n },\n {\n 'name': 'Old_South_Arabian',\n 'astral': '\\uD802[\\uDE60-\\uDE7F]'\n },\n {\n 'name': 'Old_Turkic',\n 'astral': '\\uD803[\\uDC00-\\uDC48]'\n },\n {\n 'name': 'Old_Uyghur',\n 'astral': '\\uD803[\\uDF70-\\uDF89]'\n },\n {\n 'name': 'Oriya',\n 'bmp': '\\u0B01-\\u0B03\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3C-\\u0B44\\u0B47\\u0B48\\u0B4B-\\u0B4D\\u0B55-\\u0B57\\u0B5C\\u0B5D\\u0B5F-\\u0B63\\u0B66-\\u0B77'\n },\n {\n 'name': 'Osage',\n 'astral': '\\uD801[\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB]'\n },\n {\n 'name': 'Osmanya',\n 'astral': '\\uD801[\\uDC80-\\uDC9D\\uDCA0-\\uDCA9]'\n },\n {\n 'name': 'Pahawh_Hmong',\n 'astral': '\\uD81A[\\uDF00-\\uDF45\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]'\n },\n {\n 'name': 'Palmyrene',\n 'astral': '\\uD802[\\uDC60-\\uDC7F]'\n },\n {\n 'name': 'Pau_Cin_Hau',\n 'astral': '\\uD806[\\uDEC0-\\uDEF8]'\n },\n {\n 'name': 'Phags_Pa',\n 'bmp': '\\uA840-\\uA877'\n },\n {\n 'name': 'Phoenician',\n 'astral': '\\uD802[\\uDD00-\\uDD1B\\uDD1F]'\n },\n {\n 'name': 'Psalter_Pahlavi',\n 'astral': '\\uD802[\\uDF80-\\uDF91\\uDF99-\\uDF9C\\uDFA9-\\uDFAF]'\n },\n {\n 'name': 'Rejang',\n 'bmp': '\\uA930-\\uA953\\uA95F'\n },\n {\n 'name': 'Runic',\n 'bmp': '\\u16A0-\\u16EA\\u16EE-\\u16F8'\n },\n {\n 'name': 'Samaritan',\n 'bmp': '\\u0800-\\u082D\\u0830-\\u083E'\n },\n {\n 'name': 'Saurashtra',\n 'bmp': '\\uA880-\\uA8C5\\uA8CE-\\uA8D9'\n },\n {\n 'name': 'Sharada',\n 'astral': '\\uD804[\\uDD80-\\uDDDF]'\n },\n {\n 'name': 'Shavian',\n 'astral': '\\uD801[\\uDC50-\\uDC7F]'\n },\n {\n 'name': 'Siddham',\n 'astral': '\\uD805[\\uDD80-\\uDDB5\\uDDB8-\\uDDDD]'\n },\n {\n 'name': 'SignWriting',\n 'astral': '\\uD836[\\uDC00-\\uDE8B\\uDE9B-\\uDE9F\\uDEA1-\\uDEAF]'\n },\n {\n 'name': 'Sinhala',\n 'bmp': '\\u0D81-\\u0D83\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DCA\\u0DCF-\\u0DD4\\u0DD6\\u0DD8-\\u0DDF\\u0DE6-\\u0DEF\\u0DF2-\\u0DF4',\n 'astral': '\\uD804[\\uDDE1-\\uDDF4]'\n },\n {\n 'name': 'Sogdian',\n 'astral': '\\uD803[\\uDF30-\\uDF59]'\n },\n {\n 'name': 'Sora_Sompeng',\n 'astral': '\\uD804[\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9]'\n },\n {\n 'name': 'Soyombo',\n 'astral': '\\uD806[\\uDE50-\\uDEA2]'\n },\n {\n 'name': 'Sundanese',\n 'bmp': '\\u1B80-\\u1BBF\\u1CC0-\\u1CC7'\n },\n {\n 'name': 'Syloti_Nagri',\n 'bmp': '\\uA800-\\uA82C'\n },\n {\n 'name': 'Syriac',\n 'bmp': '\\u0700-\\u070D\\u070F-\\u074A\\u074D-\\u074F\\u0860-\\u086A'\n },\n {\n 'name': 'Tagalog',\n 'bmp': '\\u1700-\\u1715\\u171F'\n },\n {\n 'name': 'Tagbanwa',\n 'bmp': '\\u1760-\\u176C\\u176E-\\u1770\\u1772\\u1773'\n },\n {\n 'name': 'Tai_Le',\n 'bmp': '\\u1950-\\u196D\\u1970-\\u1974'\n },\n {\n 'name': 'Tai_Tham',\n 'bmp': '\\u1A20-\\u1A5E\\u1A60-\\u1A7C\\u1A7F-\\u1A89\\u1A90-\\u1A99\\u1AA0-\\u1AAD'\n },\n {\n 'name': 'Tai_Viet',\n 'bmp': '\\uAA80-\\uAAC2\\uAADB-\\uAADF'\n },\n {\n 'name': 'Takri',\n 'astral': '\\uD805[\\uDE80-\\uDEB9\\uDEC0-\\uDEC9]'\n },\n {\n 'name': 'Tamil',\n 'bmp': '\\u0B82\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BBE-\\u0BC2\\u0BC6-\\u0BC8\\u0BCA-\\u0BCD\\u0BD0\\u0BD7\\u0BE6-\\u0BFA',\n 'astral': '\\uD807[\\uDFC0-\\uDFF1\\uDFFF]'\n },\n {\n 'name': 'Tangsa',\n 'astral': '\\uD81A[\\uDE70-\\uDEBE\\uDEC0-\\uDEC9]'\n },\n {\n 'name': 'Tangut',\n 'astral': '\\uD81B\\uDFE0|[\\uD81C-\\uD820][\\uDC00-\\uDFFF]|\\uD821[\\uDC00-\\uDFF7]|\\uD822[\\uDC00-\\uDEFF]|\\uD823[\\uDD00-\\uDD08]'\n },\n {\n 'name': 'Telugu',\n 'bmp': '\\u0C00-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3C-\\u0C44\\u0C46-\\u0C48\\u0C4A-\\u0C4D\\u0C55\\u0C56\\u0C58-\\u0C5A\\u0C5D\\u0C60-\\u0C63\\u0C66-\\u0C6F\\u0C77-\\u0C7F'\n },\n {\n 'name': 'Thaana',\n 'bmp': '\\u0780-\\u07B1'\n },\n {\n 'name': 'Thai',\n 'bmp': '\\u0E01-\\u0E3A\\u0E40-\\u0E5B'\n },\n {\n 'name': 'Tibetan',\n 'bmp': '\\u0F00-\\u0F47\\u0F49-\\u0F6C\\u0F71-\\u0F97\\u0F99-\\u0FBC\\u0FBE-\\u0FCC\\u0FCE-\\u0FD4\\u0FD9\\u0FDA'\n },\n {\n 'name': 'Tifinagh',\n 'bmp': '\\u2D30-\\u2D67\\u2D6F\\u2D70\\u2D7F'\n },\n {\n 'name': 'Tirhuta',\n 'astral': '\\uD805[\\uDC80-\\uDCC7\\uDCD0-\\uDCD9]'\n },\n {\n 'name': 'Toto',\n 'astral': '\\uD838[\\uDE90-\\uDEAE]'\n },\n {\n 'name': 'Ugaritic',\n 'astral': '\\uD800[\\uDF80-\\uDF9D\\uDF9F]'\n },\n {\n 'name': 'Vai',\n 'bmp': '\\uA500-\\uA62B'\n },\n {\n 'name': 'Vithkuqi',\n 'astral': '\\uD801[\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC]'\n },\n {\n 'name': 'Wancho',\n 'astral': '\\uD838[\\uDEC0-\\uDEF9\\uDEFF]'\n },\n {\n 'name': 'Warang_Citi',\n 'astral': '\\uD806[\\uDCA0-\\uDCF2\\uDCFF]'\n },\n {\n 'name': 'Yezidi',\n 'astral': '\\uD803[\\uDE80-\\uDEA9\\uDEAB-\\uDEAD\\uDEB0\\uDEB1]'\n },\n {\n 'name': 'Yi',\n 'bmp': '\\uA000-\\uA48C\\uA490-\\uA4C6'\n },\n {\n 'name': 'Zanabazar_Square',\n 'astral': '\\uD806[\\uDE00-\\uDE47]'\n }\n];\n","//! moment.js\n//! version : 2.30.1\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n typeof define === 'function' && define.amd ? define(factory) :\n global.moment = factory()\n}(this, (function () { 'use strict';\n\n var hookCallback;\n\n function hooks() {\n return hookCallback.apply(null, arguments);\n }\n\n // This is done to register the method called with moment()\n // without creating circular dependencies.\n function setHookCallback(callback) {\n hookCallback = callback;\n }\n\n function isArray(input) {\n return (\n input instanceof Array ||\n Object.prototype.toString.call(input) === '[object Array]'\n );\n }\n\n function isObject(input) {\n // IE8 will treat undefined and null as object if it wasn't for\n // input != null\n return (\n input != null &&\n Object.prototype.toString.call(input) === '[object Object]'\n );\n }\n\n function hasOwnProp(a, b) {\n return Object.prototype.hasOwnProperty.call(a, b);\n }\n\n function isObjectEmpty(obj) {\n if (Object.getOwnPropertyNames) {\n return Object.getOwnPropertyNames(obj).length === 0;\n } else {\n var k;\n for (k in obj) {\n if (hasOwnProp(obj, k)) {\n return false;\n }\n }\n return true;\n }\n }\n\n function isUndefined(input) {\n return input === void 0;\n }\n\n function isNumber(input) {\n return (\n typeof input === 'number' ||\n Object.prototype.toString.call(input) === '[object Number]'\n );\n }\n\n function isDate(input) {\n return (\n input instanceof Date ||\n Object.prototype.toString.call(input) === '[object Date]'\n );\n }\n\n function map(arr, fn) {\n var res = [],\n i,\n arrLen = arr.length;\n for (i = 0; i < arrLen; ++i) {\n res.push(fn(arr[i], i));\n }\n return res;\n }\n\n function extend(a, b) {\n for (var i in b) {\n if (hasOwnProp(b, i)) {\n a[i] = b[i];\n }\n }\n\n if (hasOwnProp(b, 'toString')) {\n a.toString = b.toString;\n }\n\n if (hasOwnProp(b, 'valueOf')) {\n a.valueOf = b.valueOf;\n }\n\n return a;\n }\n\n function createUTC(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, true).utc();\n }\n\n function defaultParsingFlags() {\n // We need to deep clone this object.\n return {\n empty: false,\n unusedTokens: [],\n unusedInput: [],\n overflow: -2,\n charsLeftOver: 0,\n nullInput: false,\n invalidEra: null,\n invalidMonth: null,\n invalidFormat: false,\n userInvalidated: false,\n iso: false,\n parsedDateParts: [],\n era: null,\n meridiem: null,\n rfc2822: false,\n weekdayMismatch: false,\n };\n }\n\n function getParsingFlags(m) {\n if (m._pf == null) {\n m._pf = defaultParsingFlags();\n }\n return m._pf;\n }\n\n var some;\n if (Array.prototype.some) {\n some = Array.prototype.some;\n } else {\n some = function (fun) {\n var t = Object(this),\n len = t.length >>> 0,\n i;\n\n for (i = 0; i < len; i++) {\n if (i in t && fun.call(this, t[i], i, t)) {\n return true;\n }\n }\n\n return false;\n };\n }\n\n function isValid(m) {\n var flags = null,\n parsedParts = false,\n isNowValid = m._d && !isNaN(m._d.getTime());\n if (isNowValid) {\n flags = getParsingFlags(m);\n parsedParts = some.call(flags.parsedDateParts, function (i) {\n return i != null;\n });\n isNowValid =\n flags.overflow < 0 &&\n !flags.empty &&\n !flags.invalidEra &&\n !flags.invalidMonth &&\n !flags.invalidWeekday &&\n !flags.weekdayMismatch &&\n !flags.nullInput &&\n !flags.invalidFormat &&\n !flags.userInvalidated &&\n (!flags.meridiem || (flags.meridiem && parsedParts));\n if (m._strict) {\n isNowValid =\n isNowValid &&\n flags.charsLeftOver === 0 &&\n flags.unusedTokens.length === 0 &&\n flags.bigHour === undefined;\n }\n }\n if (Object.isFrozen == null || !Object.isFrozen(m)) {\n m._isValid = isNowValid;\n } else {\n return isNowValid;\n }\n return m._isValid;\n }\n\n function createInvalid(flags) {\n var m = createUTC(NaN);\n if (flags != null) {\n extend(getParsingFlags(m), flags);\n } else {\n getParsingFlags(m).userInvalidated = true;\n }\n\n return m;\n }\n\n // Plugins that add properties should also add the key here (null value),\n // so we can properly clone ourselves.\n var momentProperties = (hooks.momentProperties = []),\n updateInProgress = false;\n\n function copyConfig(to, from) {\n var i,\n prop,\n val,\n momentPropertiesLen = momentProperties.length;\n\n if (!isUndefined(from._isAMomentObject)) {\n to._isAMomentObject = from._isAMomentObject;\n }\n if (!isUndefined(from._i)) {\n to._i = from._i;\n }\n if (!isUndefined(from._f)) {\n to._f = from._f;\n }\n if (!isUndefined(from._l)) {\n to._l = from._l;\n }\n if (!isUndefined(from._strict)) {\n to._strict = from._strict;\n }\n if (!isUndefined(from._tzm)) {\n to._tzm = from._tzm;\n }\n if (!isUndefined(from._isUTC)) {\n to._isUTC = from._isUTC;\n }\n if (!isUndefined(from._offset)) {\n to._offset = from._offset;\n }\n if (!isUndefined(from._pf)) {\n to._pf = getParsingFlags(from);\n }\n if (!isUndefined(from._locale)) {\n to._locale = from._locale;\n }\n\n if (momentPropertiesLen > 0) {\n for (i = 0; i < momentPropertiesLen; i++) {\n prop = momentProperties[i];\n val = from[prop];\n if (!isUndefined(val)) {\n to[prop] = val;\n }\n }\n }\n\n return to;\n }\n\n // Moment prototype object\n function Moment(config) {\n copyConfig(this, config);\n this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n if (!this.isValid()) {\n this._d = new Date(NaN);\n }\n // Prevent infinite loop in case updateOffset creates new moment\n // objects.\n if (updateInProgress === false) {\n updateInProgress = true;\n hooks.updateOffset(this);\n updateInProgress = false;\n }\n }\n\n function isMoment(obj) {\n return (\n obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n );\n }\n\n function warn(msg) {\n if (\n hooks.suppressDeprecationWarnings === false &&\n typeof console !== 'undefined' &&\n console.warn\n ) {\n console.warn('Deprecation warning: ' + msg);\n }\n }\n\n function deprecate(msg, fn) {\n var firstTime = true;\n\n return extend(function () {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(null, msg);\n }\n if (firstTime) {\n var args = [],\n arg,\n i,\n key,\n argLen = arguments.length;\n for (i = 0; i < argLen; i++) {\n arg = '';\n if (typeof arguments[i] === 'object') {\n arg += '\\n[' + i + '] ';\n for (key in arguments[0]) {\n if (hasOwnProp(arguments[0], key)) {\n arg += key + ': ' + arguments[0][key] + ', ';\n }\n }\n arg = arg.slice(0, -2); // Remove trailing comma and space\n } else {\n arg = arguments[i];\n }\n args.push(arg);\n }\n warn(\n msg +\n '\\nArguments: ' +\n Array.prototype.slice.call(args).join('') +\n '\\n' +\n new Error().stack\n );\n firstTime = false;\n }\n return fn.apply(this, arguments);\n }, fn);\n }\n\n var deprecations = {};\n\n function deprecateSimple(name, msg) {\n if (hooks.deprecationHandler != null) {\n hooks.deprecationHandler(name, msg);\n }\n if (!deprecations[name]) {\n warn(msg);\n deprecations[name] = true;\n }\n }\n\n hooks.suppressDeprecationWarnings = false;\n hooks.deprecationHandler = null;\n\n function isFunction(input) {\n return (\n (typeof Function !== 'undefined' && input instanceof Function) ||\n Object.prototype.toString.call(input) === '[object Function]'\n );\n }\n\n function set(config) {\n var prop, i;\n for (i in config) {\n if (hasOwnProp(config, i)) {\n prop = config[i];\n if (isFunction(prop)) {\n this[i] = prop;\n } else {\n this['_' + i] = prop;\n }\n }\n }\n this._config = config;\n // Lenient ordinal parsing accepts just a number in addition to\n // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n this._dayOfMonthOrdinalParseLenient = new RegExp(\n (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n '|' +\n /\\d{1,2}/.source\n );\n }\n\n function mergeConfigs(parentConfig, childConfig) {\n var res = extend({}, parentConfig),\n prop;\n for (prop in childConfig) {\n if (hasOwnProp(childConfig, prop)) {\n if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n res[prop] = {};\n extend(res[prop], parentConfig[prop]);\n extend(res[prop], childConfig[prop]);\n } else if (childConfig[prop] != null) {\n res[prop] = childConfig[prop];\n } else {\n delete res[prop];\n }\n }\n }\n for (prop in parentConfig) {\n if (\n hasOwnProp(parentConfig, prop) &&\n !hasOwnProp(childConfig, prop) &&\n isObject(parentConfig[prop])\n ) {\n // make sure changes to properties don't modify parent config\n res[prop] = extend({}, res[prop]);\n }\n }\n return res;\n }\n\n function Locale(config) {\n if (config != null) {\n this.set(config);\n }\n }\n\n var keys;\n\n if (Object.keys) {\n keys = Object.keys;\n } else {\n keys = function (obj) {\n var i,\n res = [];\n for (i in obj) {\n if (hasOwnProp(obj, i)) {\n res.push(i);\n }\n }\n return res;\n };\n }\n\n var defaultCalendar = {\n sameDay: '[Today at] LT',\n nextDay: '[Tomorrow at] LT',\n nextWeek: 'dddd [at] LT',\n lastDay: '[Yesterday at] LT',\n lastWeek: '[Last] dddd [at] LT',\n sameElse: 'L',\n };\n\n function calendar(key, mom, now) {\n var output = this._calendar[key] || this._calendar['sameElse'];\n return isFunction(output) ? output.call(mom, now) : output;\n }\n\n function zeroFill(number, targetLength, forceSign) {\n var absNumber = '' + Math.abs(number),\n zerosToFill = targetLength - absNumber.length,\n sign = number >= 0;\n return (\n (sign ? (forceSign ? '+' : '') : '-') +\n Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n absNumber\n );\n }\n\n var formattingTokens =\n /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n formatFunctions = {},\n formatTokenFunctions = {};\n\n // token: 'M'\n // padded: ['MM', 2]\n // ordinal: 'Mo'\n // callback: function () { this.month() + 1 }\n function addFormatToken(token, padded, ordinal, callback) {\n var func = callback;\n if (typeof callback === 'string') {\n func = function () {\n return this[callback]();\n };\n }\n if (token) {\n formatTokenFunctions[token] = func;\n }\n if (padded) {\n formatTokenFunctions[padded[0]] = function () {\n return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n };\n }\n if (ordinal) {\n formatTokenFunctions[ordinal] = function () {\n return this.localeData().ordinal(\n func.apply(this, arguments),\n token\n );\n };\n }\n }\n\n function removeFormattingTokens(input) {\n if (input.match(/\\[[\\s\\S]/)) {\n return input.replace(/^\\[|\\]$/g, '');\n }\n return input.replace(/\\\\/g, '');\n }\n\n function makeFormatFunction(format) {\n var array = format.match(formattingTokens),\n i,\n length;\n\n for (i = 0, length = array.length; i < length; i++) {\n if (formatTokenFunctions[array[i]]) {\n array[i] = formatTokenFunctions[array[i]];\n } else {\n array[i] = removeFormattingTokens(array[i]);\n }\n }\n\n return function (mom) {\n var output = '',\n i;\n for (i = 0; i < length; i++) {\n output += isFunction(array[i])\n ? array[i].call(mom, format)\n : array[i];\n }\n return output;\n };\n }\n\n // format date using native date object\n function formatMoment(m, format) {\n if (!m.isValid()) {\n return m.localeData().invalidDate();\n }\n\n format = expandFormat(format, m.localeData());\n formatFunctions[format] =\n formatFunctions[format] || makeFormatFunction(format);\n\n return formatFunctions[format](m);\n }\n\n function expandFormat(format, locale) {\n var i = 5;\n\n function replaceLongDateFormatTokens(input) {\n return locale.longDateFormat(input) || input;\n }\n\n localFormattingTokens.lastIndex = 0;\n while (i >= 0 && localFormattingTokens.test(format)) {\n format = format.replace(\n localFormattingTokens,\n replaceLongDateFormatTokens\n );\n localFormattingTokens.lastIndex = 0;\n i -= 1;\n }\n\n return format;\n }\n\n var defaultLongDateFormat = {\n LTS: 'h:mm:ss A',\n LT: 'h:mm A',\n L: 'MM/DD/YYYY',\n LL: 'MMMM D, YYYY',\n LLL: 'MMMM D, YYYY h:mm A',\n LLLL: 'dddd, MMMM D, YYYY h:mm A',\n };\n\n function longDateFormat(key) {\n var format = this._longDateFormat[key],\n formatUpper = this._longDateFormat[key.toUpperCase()];\n\n if (format || !formatUpper) {\n return format;\n }\n\n this._longDateFormat[key] = formatUpper\n .match(formattingTokens)\n .map(function (tok) {\n if (\n tok === 'MMMM' ||\n tok === 'MM' ||\n tok === 'DD' ||\n tok === 'dddd'\n ) {\n return tok.slice(1);\n }\n return tok;\n })\n .join('');\n\n return this._longDateFormat[key];\n }\n\n var defaultInvalidDate = 'Invalid date';\n\n function invalidDate() {\n return this._invalidDate;\n }\n\n var defaultOrdinal = '%d',\n defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n function ordinal(number) {\n return this._ordinal.replace('%d', number);\n }\n\n var defaultRelativeTime = {\n future: 'in %s',\n past: '%s ago',\n s: 'a few seconds',\n ss: '%d seconds',\n m: 'a minute',\n mm: '%d minutes',\n h: 'an hour',\n hh: '%d hours',\n d: 'a day',\n dd: '%d days',\n w: 'a week',\n ww: '%d weeks',\n M: 'a month',\n MM: '%d months',\n y: 'a year',\n yy: '%d years',\n };\n\n function relativeTime(number, withoutSuffix, string, isFuture) {\n var output = this._relativeTime[string];\n return isFunction(output)\n ? output(number, withoutSuffix, string, isFuture)\n : output.replace(/%d/i, number);\n }\n\n function pastFuture(diff, output) {\n var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n }\n\n var aliases = {\n D: 'date',\n dates: 'date',\n date: 'date',\n d: 'day',\n days: 'day',\n day: 'day',\n e: 'weekday',\n weekdays: 'weekday',\n weekday: 'weekday',\n E: 'isoWeekday',\n isoweekdays: 'isoWeekday',\n isoweekday: 'isoWeekday',\n DDD: 'dayOfYear',\n dayofyears: 'dayOfYear',\n dayofyear: 'dayOfYear',\n h: 'hour',\n hours: 'hour',\n hour: 'hour',\n ms: 'millisecond',\n milliseconds: 'millisecond',\n millisecond: 'millisecond',\n m: 'minute',\n minutes: 'minute',\n minute: 'minute',\n M: 'month',\n months: 'month',\n month: 'month',\n Q: 'quarter',\n quarters: 'quarter',\n quarter: 'quarter',\n s: 'second',\n seconds: 'second',\n second: 'second',\n gg: 'weekYear',\n weekyears: 'weekYear',\n weekyear: 'weekYear',\n GG: 'isoWeekYear',\n isoweekyears: 'isoWeekYear',\n isoweekyear: 'isoWeekYear',\n w: 'week',\n weeks: 'week',\n week: 'week',\n W: 'isoWeek',\n isoweeks: 'isoWeek',\n isoweek: 'isoWeek',\n y: 'year',\n years: 'year',\n year: 'year',\n };\n\n function normalizeUnits(units) {\n return typeof units === 'string'\n ? aliases[units] || aliases[units.toLowerCase()]\n : undefined;\n }\n\n function normalizeObjectUnits(inputObject) {\n var normalizedInput = {},\n normalizedProp,\n prop;\n\n for (prop in inputObject) {\n if (hasOwnProp(inputObject, prop)) {\n normalizedProp = normalizeUnits(prop);\n if (normalizedProp) {\n normalizedInput[normalizedProp] = inputObject[prop];\n }\n }\n }\n\n return normalizedInput;\n }\n\n var priorities = {\n date: 9,\n day: 11,\n weekday: 11,\n isoWeekday: 11,\n dayOfYear: 4,\n hour: 13,\n millisecond: 16,\n minute: 14,\n month: 8,\n quarter: 7,\n second: 15,\n weekYear: 1,\n isoWeekYear: 1,\n week: 5,\n isoWeek: 5,\n year: 1,\n };\n\n function getPrioritizedUnits(unitsObj) {\n var units = [],\n u;\n for (u in unitsObj) {\n if (hasOwnProp(unitsObj, u)) {\n units.push({ unit: u, priority: priorities[u] });\n }\n }\n units.sort(function (a, b) {\n return a.priority - b.priority;\n });\n return units;\n }\n\n var match1 = /\\d/, // 0 - 9\n match2 = /\\d\\d/, // 00 - 99\n match3 = /\\d{3}/, // 000 - 999\n match4 = /\\d{4}/, // 0000 - 9999\n match6 = /[+-]?\\d{6}/, // -999999 - 999999\n match1to2 = /\\d\\d?/, // 0 - 99\n match3to4 = /\\d\\d\\d\\d?/, // 999 - 9999\n match5to6 = /\\d\\d\\d\\d\\d\\d?/, // 99999 - 999999\n match1to3 = /\\d{1,3}/, // 0 - 999\n match1to4 = /\\d{1,4}/, // 0 - 9999\n match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n matchUnsigned = /\\d+/, // 0 - inf\n matchSigned = /[+-]?\\d+/, // -inf - inf\n matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n // any word (or two) characters or numbers including two/three word month in arabic.\n // includes scottish gaelic two word and hyphenated months\n matchWord =\n /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n match1to2NoLeadingZero = /^[1-9]\\d?/, // 1-99\n match1to2HasZero = /^([1-9]\\d|\\d)/, // 0-99\n regexes;\n\n regexes = {};\n\n function addRegexToken(token, regex, strictRegex) {\n regexes[token] = isFunction(regex)\n ? regex\n : function (isStrict, localeData) {\n return isStrict && strictRegex ? strictRegex : regex;\n };\n }\n\n function getParseRegexForToken(token, config) {\n if (!hasOwnProp(regexes, token)) {\n return new RegExp(unescapeFormat(token));\n }\n\n return regexes[token](config._strict, config._locale);\n }\n\n // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n function unescapeFormat(s) {\n return regexEscape(\n s\n .replace('\\\\', '')\n .replace(\n /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n function (matched, p1, p2, p3, p4) {\n return p1 || p2 || p3 || p4;\n }\n )\n );\n }\n\n function regexEscape(s) {\n return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n }\n\n function absFloor(number) {\n if (number < 0) {\n // -0 -> 0\n return Math.ceil(number) || 0;\n } else {\n return Math.floor(number);\n }\n }\n\n function toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n value = absFloor(coercedNumber);\n }\n\n return value;\n }\n\n var tokens = {};\n\n function addParseToken(token, callback) {\n var i,\n func = callback,\n tokenLen;\n if (typeof token === 'string') {\n token = [token];\n }\n if (isNumber(callback)) {\n func = function (input, array) {\n array[callback] = toInt(input);\n };\n }\n tokenLen = token.length;\n for (i = 0; i < tokenLen; i++) {\n tokens[token[i]] = func;\n }\n }\n\n function addWeekParseToken(token, callback) {\n addParseToken(token, function (input, array, config, token) {\n config._w = config._w || {};\n callback(input, config._w, config, token);\n });\n }\n\n function addTimeToArrayFromToken(token, input, config) {\n if (input != null && hasOwnProp(tokens, token)) {\n tokens[token](input, config._a, config, token);\n }\n }\n\n function isLeapYear(year) {\n return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n }\n\n var YEAR = 0,\n MONTH = 1,\n DATE = 2,\n HOUR = 3,\n MINUTE = 4,\n SECOND = 5,\n MILLISECOND = 6,\n WEEK = 7,\n WEEKDAY = 8;\n\n // FORMATTING\n\n addFormatToken('Y', 0, 0, function () {\n var y = this.year();\n return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n });\n\n addFormatToken(0, ['YY', 2], 0, function () {\n return this.year() % 100;\n });\n\n addFormatToken(0, ['YYYY', 4], 0, 'year');\n addFormatToken(0, ['YYYYY', 5], 0, 'year');\n addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n // PARSING\n\n addRegexToken('Y', matchSigned);\n addRegexToken('YY', match1to2, match2);\n addRegexToken('YYYY', match1to4, match4);\n addRegexToken('YYYYY', match1to6, match6);\n addRegexToken('YYYYYY', match1to6, match6);\n\n addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n addParseToken('YYYY', function (input, array) {\n array[YEAR] =\n input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n });\n addParseToken('YY', function (input, array) {\n array[YEAR] = hooks.parseTwoDigitYear(input);\n });\n addParseToken('Y', function (input, array) {\n array[YEAR] = parseInt(input, 10);\n });\n\n // HELPERS\n\n function daysInYear(year) {\n return isLeapYear(year) ? 366 : 365;\n }\n\n // HOOKS\n\n hooks.parseTwoDigitYear = function (input) {\n return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n };\n\n // MOMENTS\n\n var getSetYear = makeGetSet('FullYear', true);\n\n function getIsLeapYear() {\n return isLeapYear(this.year());\n }\n\n function makeGetSet(unit, keepTime) {\n return function (value) {\n if (value != null) {\n set$1(this, unit, value);\n hooks.updateOffset(this, keepTime);\n return this;\n } else {\n return get(this, unit);\n }\n };\n }\n\n function get(mom, unit) {\n if (!mom.isValid()) {\n return NaN;\n }\n\n var d = mom._d,\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return isUTC ? d.getUTCMilliseconds() : d.getMilliseconds();\n case 'Seconds':\n return isUTC ? d.getUTCSeconds() : d.getSeconds();\n case 'Minutes':\n return isUTC ? d.getUTCMinutes() : d.getMinutes();\n case 'Hours':\n return isUTC ? d.getUTCHours() : d.getHours();\n case 'Date':\n return isUTC ? d.getUTCDate() : d.getDate();\n case 'Day':\n return isUTC ? d.getUTCDay() : d.getDay();\n case 'Month':\n return isUTC ? d.getUTCMonth() : d.getMonth();\n case 'FullYear':\n return isUTC ? d.getUTCFullYear() : d.getFullYear();\n default:\n return NaN; // Just in case\n }\n }\n\n function set$1(mom, unit, value) {\n var d, isUTC, year, month, date;\n\n if (!mom.isValid() || isNaN(value)) {\n return;\n }\n\n d = mom._d;\n isUTC = mom._isUTC;\n\n switch (unit) {\n case 'Milliseconds':\n return void (isUTC\n ? d.setUTCMilliseconds(value)\n : d.setMilliseconds(value));\n case 'Seconds':\n return void (isUTC ? d.setUTCSeconds(value) : d.setSeconds(value));\n case 'Minutes':\n return void (isUTC ? d.setUTCMinutes(value) : d.setMinutes(value));\n case 'Hours':\n return void (isUTC ? d.setUTCHours(value) : d.setHours(value));\n case 'Date':\n return void (isUTC ? d.setUTCDate(value) : d.setDate(value));\n // case 'Day': // Not real\n // return void (isUTC ? d.setUTCDay(value) : d.setDay(value));\n // case 'Month': // Not used because we need to pass two variables\n // return void (isUTC ? d.setUTCMonth(value) : d.setMonth(value));\n case 'FullYear':\n break; // See below ...\n default:\n return; // Just in case\n }\n\n year = value;\n month = mom.month();\n date = mom.date();\n date = date === 29 && month === 1 && !isLeapYear(year) ? 28 : date;\n void (isUTC\n ? d.setUTCFullYear(year, month, date)\n : d.setFullYear(year, month, date));\n }\n\n // MOMENTS\n\n function stringGet(units) {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units]();\n }\n return this;\n }\n\n function stringSet(units, value) {\n if (typeof units === 'object') {\n units = normalizeObjectUnits(units);\n var prioritized = getPrioritizedUnits(units),\n i,\n prioritizedLen = prioritized.length;\n for (i = 0; i < prioritizedLen; i++) {\n this[prioritized[i].unit](units[prioritized[i].unit]);\n }\n } else {\n units = normalizeUnits(units);\n if (isFunction(this[units])) {\n return this[units](value);\n }\n }\n return this;\n }\n\n function mod(n, x) {\n return ((n % x) + x) % x;\n }\n\n var indexOf;\n\n if (Array.prototype.indexOf) {\n indexOf = Array.prototype.indexOf;\n } else {\n indexOf = function (o) {\n // I know\n var i;\n for (i = 0; i < this.length; ++i) {\n if (this[i] === o) {\n return i;\n }\n }\n return -1;\n };\n }\n\n function daysInMonth(year, month) {\n if (isNaN(year) || isNaN(month)) {\n return NaN;\n }\n var modMonth = mod(month, 12);\n year += (month - modMonth) / 12;\n return modMonth === 1\n ? isLeapYear(year)\n ? 29\n : 28\n : 31 - ((modMonth % 7) % 2);\n }\n\n // FORMATTING\n\n addFormatToken('M', ['MM', 2], 'Mo', function () {\n return this.month() + 1;\n });\n\n addFormatToken('MMM', 0, 0, function (format) {\n return this.localeData().monthsShort(this, format);\n });\n\n addFormatToken('MMMM', 0, 0, function (format) {\n return this.localeData().months(this, format);\n });\n\n // PARSING\n\n addRegexToken('M', match1to2, match1to2NoLeadingZero);\n addRegexToken('MM', match1to2, match2);\n addRegexToken('MMM', function (isStrict, locale) {\n return locale.monthsShortRegex(isStrict);\n });\n addRegexToken('MMMM', function (isStrict, locale) {\n return locale.monthsRegex(isStrict);\n });\n\n addParseToken(['M', 'MM'], function (input, array) {\n array[MONTH] = toInt(input) - 1;\n });\n\n addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n var month = config._locale.monthsParse(input, token, config._strict);\n // if we didn't find a month name, mark the date as invalid.\n if (month != null) {\n array[MONTH] = month;\n } else {\n getParsingFlags(config).invalidMonth = input;\n }\n });\n\n // LOCALES\n\n var defaultLocaleMonths =\n 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n '_'\n ),\n defaultLocaleMonthsShort =\n 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n defaultMonthsShortRegex = matchWord,\n defaultMonthsRegex = matchWord;\n\n function localeMonths(m, format) {\n if (!m) {\n return isArray(this._months)\n ? this._months\n : this._months['standalone'];\n }\n return isArray(this._months)\n ? this._months[m.month()]\n : this._months[\n (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n ? 'format'\n : 'standalone'\n ][m.month()];\n }\n\n function localeMonthsShort(m, format) {\n if (!m) {\n return isArray(this._monthsShort)\n ? this._monthsShort\n : this._monthsShort['standalone'];\n }\n return isArray(this._monthsShort)\n ? this._monthsShort[m.month()]\n : this._monthsShort[\n MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n ][m.month()];\n }\n\n function handleStrictParse(monthName, format, strict) {\n var i,\n ii,\n mom,\n llc = monthName.toLocaleLowerCase();\n if (!this._monthsParse) {\n // this is not used\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n for (i = 0; i < 12; ++i) {\n mom = createUTC([2000, i]);\n this._shortMonthsParse[i] = this.monthsShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'MMM') {\n ii = indexOf.call(this._shortMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._longMonthsParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._longMonthsParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortMonthsParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeMonthsParse(monthName, format, strict) {\n var i, mom, regex;\n\n if (this._monthsParseExact) {\n return handleStrictParse.call(this, monthName, format, strict);\n }\n\n if (!this._monthsParse) {\n this._monthsParse = [];\n this._longMonthsParse = [];\n this._shortMonthsParse = [];\n }\n\n // TODO: add sorting\n // Sorting makes sure if one month (or abbr) is a prefix of another\n // see sorting in computeMonthsParse\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n if (strict && !this._longMonthsParse[i]) {\n this._longMonthsParse[i] = new RegExp(\n '^' + this.months(mom, '').replace('.', '') + '$',\n 'i'\n );\n this._shortMonthsParse[i] = new RegExp(\n '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n 'i'\n );\n }\n if (!strict && !this._monthsParse[i]) {\n regex =\n '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'MMMM' &&\n this._longMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'MMM' &&\n this._shortMonthsParse[i].test(monthName)\n ) {\n return i;\n } else if (!strict && this._monthsParse[i].test(monthName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function setMonth(mom, value) {\n if (!mom.isValid()) {\n // No op\n return mom;\n }\n\n if (typeof value === 'string') {\n if (/^\\d+$/.test(value)) {\n value = toInt(value);\n } else {\n value = mom.localeData().monthsParse(value);\n // TODO: Another silent failure?\n if (!isNumber(value)) {\n return mom;\n }\n }\n }\n\n var month = value,\n date = mom.date();\n\n date = date < 29 ? date : Math.min(date, daysInMonth(mom.year(), month));\n void (mom._isUTC\n ? mom._d.setUTCMonth(month, date)\n : mom._d.setMonth(month, date));\n return mom;\n }\n\n function getSetMonth(value) {\n if (value != null) {\n setMonth(this, value);\n hooks.updateOffset(this, true);\n return this;\n } else {\n return get(this, 'Month');\n }\n }\n\n function getDaysInMonth() {\n return daysInMonth(this.year(), this.month());\n }\n\n function monthsShortRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsShortStrictRegex;\n } else {\n return this._monthsShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsShortRegex')) {\n this._monthsShortRegex = defaultMonthsShortRegex;\n }\n return this._monthsShortStrictRegex && isStrict\n ? this._monthsShortStrictRegex\n : this._monthsShortRegex;\n }\n }\n\n function monthsRegex(isStrict) {\n if (this._monthsParseExact) {\n if (!hasOwnProp(this, '_monthsRegex')) {\n computeMonthsParse.call(this);\n }\n if (isStrict) {\n return this._monthsStrictRegex;\n } else {\n return this._monthsRegex;\n }\n } else {\n if (!hasOwnProp(this, '_monthsRegex')) {\n this._monthsRegex = defaultMonthsRegex;\n }\n return this._monthsStrictRegex && isStrict\n ? this._monthsStrictRegex\n : this._monthsRegex;\n }\n }\n\n function computeMonthsParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n shortP,\n longP;\n for (i = 0; i < 12; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, i]);\n shortP = regexEscape(this.monthsShort(mom, ''));\n longP = regexEscape(this.months(mom, ''));\n shortPieces.push(shortP);\n longPieces.push(longP);\n mixedPieces.push(longP);\n mixedPieces.push(shortP);\n }\n // Sorting makes sure if one month (or abbr) is a prefix of another it\n // will match the longer piece.\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._monthsShortRegex = this._monthsRegex;\n this._monthsStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._monthsShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n }\n\n function createDate(y, m, d, h, M, s, ms) {\n // can't just apply() to create a date:\n // https://stackoverflow.com/q/181348\n var date;\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n date = new Date(y + 400, m, d, h, M, s, ms);\n if (isFinite(date.getFullYear())) {\n date.setFullYear(y);\n }\n } else {\n date = new Date(y, m, d, h, M, s, ms);\n }\n\n return date;\n }\n\n function createUTCDate(y) {\n var date, args;\n // the Date.UTC function remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n args = Array.prototype.slice.call(arguments);\n // preserve leap years using a full 400 year cycle, then reset\n args[0] = y + 400;\n date = new Date(Date.UTC.apply(null, args));\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(null, arguments));\n }\n\n return date;\n }\n\n // start-of-first-week - start-of-year\n function firstWeekOffset(year, dow, doy) {\n var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n fwd = 7 + dow - doy,\n // first-week day local weekday -- which local weekday is fwd\n fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n return -fwdlw + fwd - 1;\n }\n\n // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n var localWeekday = (7 + weekday - dow) % 7,\n weekOffset = firstWeekOffset(year, dow, doy),\n dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n resYear,\n resDayOfYear;\n\n if (dayOfYear <= 0) {\n resYear = year - 1;\n resDayOfYear = daysInYear(resYear) + dayOfYear;\n } else if (dayOfYear > daysInYear(year)) {\n resYear = year + 1;\n resDayOfYear = dayOfYear - daysInYear(year);\n } else {\n resYear = year;\n resDayOfYear = dayOfYear;\n }\n\n return {\n year: resYear,\n dayOfYear: resDayOfYear,\n };\n }\n\n function weekOfYear(mom, dow, doy) {\n var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n resWeek,\n resYear;\n\n if (week < 1) {\n resYear = mom.year() - 1;\n resWeek = week + weeksInYear(resYear, dow, doy);\n } else if (week > weeksInYear(mom.year(), dow, doy)) {\n resWeek = week - weeksInYear(mom.year(), dow, doy);\n resYear = mom.year() + 1;\n } else {\n resYear = mom.year();\n resWeek = week;\n }\n\n return {\n week: resWeek,\n year: resYear,\n };\n }\n\n function weeksInYear(year, dow, doy) {\n var weekOffset = firstWeekOffset(year, dow, doy),\n weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n }\n\n // FORMATTING\n\n addFormatToken('w', ['ww', 2], 'wo', 'week');\n addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n // PARSING\n\n addRegexToken('w', match1to2, match1to2NoLeadingZero);\n addRegexToken('ww', match1to2, match2);\n addRegexToken('W', match1to2, match1to2NoLeadingZero);\n addRegexToken('WW', match1to2, match2);\n\n addWeekParseToken(\n ['w', 'ww', 'W', 'WW'],\n function (input, week, config, token) {\n week[token.substr(0, 1)] = toInt(input);\n }\n );\n\n // HELPERS\n\n // LOCALES\n\n function localeWeek(mom) {\n return weekOfYear(mom, this._week.dow, this._week.doy).week;\n }\n\n var defaultLocaleWeek = {\n dow: 0, // Sunday is the first day of the week.\n doy: 6, // The week that contains Jan 6th is the first week of the year.\n };\n\n function localeFirstDayOfWeek() {\n return this._week.dow;\n }\n\n function localeFirstDayOfYear() {\n return this._week.doy;\n }\n\n // MOMENTS\n\n function getSetWeek(input) {\n var week = this.localeData().week(this);\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n function getSetISOWeek(input) {\n var week = weekOfYear(this, 1, 4).week;\n return input == null ? week : this.add((input - week) * 7, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('d', 0, 'do', 'day');\n\n addFormatToken('dd', 0, 0, function (format) {\n return this.localeData().weekdaysMin(this, format);\n });\n\n addFormatToken('ddd', 0, 0, function (format) {\n return this.localeData().weekdaysShort(this, format);\n });\n\n addFormatToken('dddd', 0, 0, function (format) {\n return this.localeData().weekdays(this, format);\n });\n\n addFormatToken('e', 0, 0, 'weekday');\n addFormatToken('E', 0, 0, 'isoWeekday');\n\n // PARSING\n\n addRegexToken('d', match1to2);\n addRegexToken('e', match1to2);\n addRegexToken('E', match1to2);\n addRegexToken('dd', function (isStrict, locale) {\n return locale.weekdaysMinRegex(isStrict);\n });\n addRegexToken('ddd', function (isStrict, locale) {\n return locale.weekdaysShortRegex(isStrict);\n });\n addRegexToken('dddd', function (isStrict, locale) {\n return locale.weekdaysRegex(isStrict);\n });\n\n addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n var weekday = config._locale.weekdaysParse(input, token, config._strict);\n // if we didn't get a weekday name, mark the date as invalid\n if (weekday != null) {\n week.d = weekday;\n } else {\n getParsingFlags(config).invalidWeekday = input;\n }\n });\n\n addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n week[token] = toInt(input);\n });\n\n // HELPERS\n\n function parseWeekday(input, locale) {\n if (typeof input !== 'string') {\n return input;\n }\n\n if (!isNaN(input)) {\n return parseInt(input, 10);\n }\n\n input = locale.weekdaysParse(input);\n if (typeof input === 'number') {\n return input;\n }\n\n return null;\n }\n\n function parseIsoWeekday(input, locale) {\n if (typeof input === 'string') {\n return locale.weekdaysParse(input) % 7 || 7;\n }\n return isNaN(input) ? null : input;\n }\n\n // LOCALES\n function shiftWeekdays(ws, n) {\n return ws.slice(n, 7).concat(ws.slice(0, n));\n }\n\n var defaultLocaleWeekdays =\n 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n defaultWeekdaysRegex = matchWord,\n defaultWeekdaysShortRegex = matchWord,\n defaultWeekdaysMinRegex = matchWord;\n\n function localeWeekdays(m, format) {\n var weekdays = isArray(this._weekdays)\n ? this._weekdays\n : this._weekdays[\n m && m !== true && this._weekdays.isFormat.test(format)\n ? 'format'\n : 'standalone'\n ];\n return m === true\n ? shiftWeekdays(weekdays, this._week.dow)\n : m\n ? weekdays[m.day()]\n : weekdays;\n }\n\n function localeWeekdaysShort(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n : m\n ? this._weekdaysShort[m.day()]\n : this._weekdaysShort;\n }\n\n function localeWeekdaysMin(m) {\n return m === true\n ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n : m\n ? this._weekdaysMin[m.day()]\n : this._weekdaysMin;\n }\n\n function handleStrictParse$1(weekdayName, format, strict) {\n var i,\n ii,\n mom,\n llc = weekdayName.toLocaleLowerCase();\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._minWeekdaysParse = [];\n\n for (i = 0; i < 7; ++i) {\n mom = createUTC([2000, 1]).day(i);\n this._minWeekdaysParse[i] = this.weekdaysMin(\n mom,\n ''\n ).toLocaleLowerCase();\n this._shortWeekdaysParse[i] = this.weekdaysShort(\n mom,\n ''\n ).toLocaleLowerCase();\n this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n }\n }\n\n if (strict) {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n } else {\n if (format === 'dddd') {\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else if (format === 'ddd') {\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._minWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n } else {\n ii = indexOf.call(this._minWeekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._weekdaysParse, llc);\n if (ii !== -1) {\n return ii;\n }\n ii = indexOf.call(this._shortWeekdaysParse, llc);\n return ii !== -1 ? ii : null;\n }\n }\n }\n\n function localeWeekdaysParse(weekdayName, format, strict) {\n var i, mom, regex;\n\n if (this._weekdaysParseExact) {\n return handleStrictParse$1.call(this, weekdayName, format, strict);\n }\n\n if (!this._weekdaysParse) {\n this._weekdaysParse = [];\n this._minWeekdaysParse = [];\n this._shortWeekdaysParse = [];\n this._fullWeekdaysParse = [];\n }\n\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n\n mom = createUTC([2000, 1]).day(i);\n if (strict && !this._fullWeekdaysParse[i]) {\n this._fullWeekdaysParse[i] = new RegExp(\n '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._shortWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n this._minWeekdaysParse[i] = new RegExp(\n '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n 'i'\n );\n }\n if (!this._weekdaysParse[i]) {\n regex =\n '^' +\n this.weekdays(mom, '') +\n '|^' +\n this.weekdaysShort(mom, '') +\n '|^' +\n this.weekdaysMin(mom, '');\n this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n }\n // test the regex\n if (\n strict &&\n format === 'dddd' &&\n this._fullWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'ddd' &&\n this._shortWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (\n strict &&\n format === 'dd' &&\n this._minWeekdaysParse[i].test(weekdayName)\n ) {\n return i;\n } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n return i;\n }\n }\n }\n\n // MOMENTS\n\n function getSetDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n var day = get(this, 'Day');\n if (input != null) {\n input = parseWeekday(input, this.localeData());\n return this.add(input - day, 'd');\n } else {\n return day;\n }\n }\n\n function getSetLocaleDayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n return input == null ? weekday : this.add(input - weekday, 'd');\n }\n\n function getSetISODayOfWeek(input) {\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n\n // behaves the same as moment#day except\n // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n // as a setter, sunday should belong to the previous week.\n\n if (input != null) {\n var weekday = parseIsoWeekday(input, this.localeData());\n return this.day(this.day() % 7 ? weekday : weekday - 7);\n } else {\n return this.day() || 7;\n }\n }\n\n function weekdaysRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysStrictRegex;\n } else {\n return this._weekdaysRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n this._weekdaysRegex = defaultWeekdaysRegex;\n }\n return this._weekdaysStrictRegex && isStrict\n ? this._weekdaysStrictRegex\n : this._weekdaysRegex;\n }\n }\n\n function weekdaysShortRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysShortStrictRegex;\n } else {\n return this._weekdaysShortRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n }\n return this._weekdaysShortStrictRegex && isStrict\n ? this._weekdaysShortStrictRegex\n : this._weekdaysShortRegex;\n }\n }\n\n function weekdaysMinRegex(isStrict) {\n if (this._weekdaysParseExact) {\n if (!hasOwnProp(this, '_weekdaysRegex')) {\n computeWeekdaysParse.call(this);\n }\n if (isStrict) {\n return this._weekdaysMinStrictRegex;\n } else {\n return this._weekdaysMinRegex;\n }\n } else {\n if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n }\n return this._weekdaysMinStrictRegex && isStrict\n ? this._weekdaysMinStrictRegex\n : this._weekdaysMinRegex;\n }\n }\n\n function computeWeekdaysParse() {\n function cmpLenRev(a, b) {\n return b.length - a.length;\n }\n\n var minPieces = [],\n shortPieces = [],\n longPieces = [],\n mixedPieces = [],\n i,\n mom,\n minp,\n shortp,\n longp;\n for (i = 0; i < 7; i++) {\n // make the regex if we don't have it already\n mom = createUTC([2000, 1]).day(i);\n minp = regexEscape(this.weekdaysMin(mom, ''));\n shortp = regexEscape(this.weekdaysShort(mom, ''));\n longp = regexEscape(this.weekdays(mom, ''));\n minPieces.push(minp);\n shortPieces.push(shortp);\n longPieces.push(longp);\n mixedPieces.push(minp);\n mixedPieces.push(shortp);\n mixedPieces.push(longp);\n }\n // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n // will match the longer piece.\n minPieces.sort(cmpLenRev);\n shortPieces.sort(cmpLenRev);\n longPieces.sort(cmpLenRev);\n mixedPieces.sort(cmpLenRev);\n\n this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._weekdaysShortRegex = this._weekdaysRegex;\n this._weekdaysMinRegex = this._weekdaysRegex;\n\n this._weekdaysStrictRegex = new RegExp(\n '^(' + longPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysShortStrictRegex = new RegExp(\n '^(' + shortPieces.join('|') + ')',\n 'i'\n );\n this._weekdaysMinStrictRegex = new RegExp(\n '^(' + minPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n function hFormat() {\n return this.hours() % 12 || 12;\n }\n\n function kFormat() {\n return this.hours() || 24;\n }\n\n addFormatToken('H', ['HH', 2], 0, 'hour');\n addFormatToken('h', ['hh', 2], 0, hFormat);\n addFormatToken('k', ['kk', 2], 0, kFormat);\n\n addFormatToken('hmm', 0, 0, function () {\n return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('hmmss', 0, 0, function () {\n return (\n '' +\n hFormat.apply(this) +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n addFormatToken('Hmm', 0, 0, function () {\n return '' + this.hours() + zeroFill(this.minutes(), 2);\n });\n\n addFormatToken('Hmmss', 0, 0, function () {\n return (\n '' +\n this.hours() +\n zeroFill(this.minutes(), 2) +\n zeroFill(this.seconds(), 2)\n );\n });\n\n function meridiem(token, lowercase) {\n addFormatToken(token, 0, 0, function () {\n return this.localeData().meridiem(\n this.hours(),\n this.minutes(),\n lowercase\n );\n });\n }\n\n meridiem('a', true);\n meridiem('A', false);\n\n // PARSING\n\n function matchMeridiem(isStrict, locale) {\n return locale._meridiemParse;\n }\n\n addRegexToken('a', matchMeridiem);\n addRegexToken('A', matchMeridiem);\n addRegexToken('H', match1to2, match1to2HasZero);\n addRegexToken('h', match1to2, match1to2NoLeadingZero);\n addRegexToken('k', match1to2, match1to2NoLeadingZero);\n addRegexToken('HH', match1to2, match2);\n addRegexToken('hh', match1to2, match2);\n addRegexToken('kk', match1to2, match2);\n\n addRegexToken('hmm', match3to4);\n addRegexToken('hmmss', match5to6);\n addRegexToken('Hmm', match3to4);\n addRegexToken('Hmmss', match5to6);\n\n addParseToken(['H', 'HH'], HOUR);\n addParseToken(['k', 'kk'], function (input, array, config) {\n var kInput = toInt(input);\n array[HOUR] = kInput === 24 ? 0 : kInput;\n });\n addParseToken(['a', 'A'], function (input, array, config) {\n config._isPm = config._locale.isPM(input);\n config._meridiem = input;\n });\n addParseToken(['h', 'hh'], function (input, array, config) {\n array[HOUR] = toInt(input);\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n getParsingFlags(config).bigHour = true;\n });\n addParseToken('Hmm', function (input, array, config) {\n var pos = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos));\n array[MINUTE] = toInt(input.substr(pos));\n });\n addParseToken('Hmmss', function (input, array, config) {\n var pos1 = input.length - 4,\n pos2 = input.length - 2;\n array[HOUR] = toInt(input.substr(0, pos1));\n array[MINUTE] = toInt(input.substr(pos1, 2));\n array[SECOND] = toInt(input.substr(pos2));\n });\n\n // LOCALES\n\n function localeIsPM(input) {\n // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n // Using charAt should be more compatible.\n return (input + '').toLowerCase().charAt(0) === 'p';\n }\n\n var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n // Setting the hour should keep the time, because the user explicitly\n // specified which hour they want. So trying to maintain the same hour (in\n // a new timezone) makes sense. Adding/subtracting hours does not follow\n // this rule.\n getSetHour = makeGetSet('Hours', true);\n\n function localeMeridiem(hours, minutes, isLower) {\n if (hours > 11) {\n return isLower ? 'pm' : 'PM';\n } else {\n return isLower ? 'am' : 'AM';\n }\n }\n\n var baseConfig = {\n calendar: defaultCalendar,\n longDateFormat: defaultLongDateFormat,\n invalidDate: defaultInvalidDate,\n ordinal: defaultOrdinal,\n dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n relativeTime: defaultRelativeTime,\n\n months: defaultLocaleMonths,\n monthsShort: defaultLocaleMonthsShort,\n\n week: defaultLocaleWeek,\n\n weekdays: defaultLocaleWeekdays,\n weekdaysMin: defaultLocaleWeekdaysMin,\n weekdaysShort: defaultLocaleWeekdaysShort,\n\n meridiemParse: defaultLocaleMeridiemParse,\n };\n\n // internal storage for locale config files\n var locales = {},\n localeFamilies = {},\n globalLocale;\n\n function commonPrefix(arr1, arr2) {\n var i,\n minl = Math.min(arr1.length, arr2.length);\n for (i = 0; i < minl; i += 1) {\n if (arr1[i] !== arr2[i]) {\n return i;\n }\n }\n return minl;\n }\n\n function normalizeLocale(key) {\n return key ? key.toLowerCase().replace('_', '-') : key;\n }\n\n // pick the locale from the array\n // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n function chooseLocale(names) {\n var i = 0,\n j,\n next,\n locale,\n split;\n\n while (i < names.length) {\n split = normalizeLocale(names[i]).split('-');\n j = split.length;\n next = normalizeLocale(names[i + 1]);\n next = next ? next.split('-') : null;\n while (j > 0) {\n locale = loadLocale(split.slice(0, j).join('-'));\n if (locale) {\n return locale;\n }\n if (\n next &&\n next.length >= j &&\n commonPrefix(split, next) >= j - 1\n ) {\n //the next array item is better than a shallower substring of this one\n break;\n }\n j--;\n }\n i++;\n }\n return globalLocale;\n }\n\n function isLocaleNameSane(name) {\n // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n // Ensure name is available and function returns boolean\n return !!(name && name.match('^[^/\\\\\\\\]*$'));\n }\n\n function loadLocale(name) {\n var oldLocale = null,\n aliasedRequire;\n // TODO: Find a better way to register and load all the locales in Node\n if (\n locales[name] === undefined &&\n typeof module !== 'undefined' &&\n module &&\n module.exports &&\n isLocaleNameSane(name)\n ) {\n try {\n oldLocale = globalLocale._abbr;\n aliasedRequire = require;\n aliasedRequire('./locale/' + name);\n getSetGlobalLocale(oldLocale);\n } catch (e) {\n // mark as not found to avoid repeating expensive file require call causing high CPU\n // when trying to find en-US, en_US, en-us for every format call\n locales[name] = null; // null means not found\n }\n }\n return locales[name];\n }\n\n // This function will load locale and then set the global locale. If\n // no arguments are passed in, it will simply return the current global\n // locale key.\n function getSetGlobalLocale(key, values) {\n var data;\n if (key) {\n if (isUndefined(values)) {\n data = getLocale(key);\n } else {\n data = defineLocale(key, values);\n }\n\n if (data) {\n // moment.duration._locale = moment._locale = data;\n globalLocale = data;\n } else {\n if (typeof console !== 'undefined' && console.warn) {\n //warn user if arguments are passed but the locale could not be set\n console.warn(\n 'Locale ' + key + ' not found. Did you forget to load it?'\n );\n }\n }\n }\n\n return globalLocale._abbr;\n }\n\n function defineLocale(name, config) {\n if (config !== null) {\n var locale,\n parentConfig = baseConfig;\n config.abbr = name;\n if (locales[name] != null) {\n deprecateSimple(\n 'defineLocaleOverride',\n 'use moment.updateLocale(localeName, config) to change ' +\n 'an existing locale. moment.defineLocale(localeName, ' +\n 'config) should only be used for creating a new locale ' +\n 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n );\n parentConfig = locales[name]._config;\n } else if (config.parentLocale != null) {\n if (locales[config.parentLocale] != null) {\n parentConfig = locales[config.parentLocale]._config;\n } else {\n locale = loadLocale(config.parentLocale);\n if (locale != null) {\n parentConfig = locale._config;\n } else {\n if (!localeFamilies[config.parentLocale]) {\n localeFamilies[config.parentLocale] = [];\n }\n localeFamilies[config.parentLocale].push({\n name: name,\n config: config,\n });\n return null;\n }\n }\n }\n locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n if (localeFamilies[name]) {\n localeFamilies[name].forEach(function (x) {\n defineLocale(x.name, x.config);\n });\n }\n\n // backwards compat for now: also set the locale\n // make sure we set the locale AFTER all child locales have been\n // created, so we won't end up with the child locale set.\n getSetGlobalLocale(name);\n\n return locales[name];\n } else {\n // useful for testing\n delete locales[name];\n return null;\n }\n }\n\n function updateLocale(name, config) {\n if (config != null) {\n var locale,\n tmpLocale,\n parentConfig = baseConfig;\n\n if (locales[name] != null && locales[name].parentLocale != null) {\n // Update existing child locale in-place to avoid memory-leaks\n locales[name].set(mergeConfigs(locales[name]._config, config));\n } else {\n // MERGE\n tmpLocale = loadLocale(name);\n if (tmpLocale != null) {\n parentConfig = tmpLocale._config;\n }\n config = mergeConfigs(parentConfig, config);\n if (tmpLocale == null) {\n // updateLocale is called for creating a new locale\n // Set abbr so it will have a name (getters return\n // undefined otherwise).\n config.abbr = name;\n }\n locale = new Locale(config);\n locale.parentLocale = locales[name];\n locales[name] = locale;\n }\n\n // backwards compat for now: also set the locale\n getSetGlobalLocale(name);\n } else {\n // pass null for config to unupdate, useful for tests\n if (locales[name] != null) {\n if (locales[name].parentLocale != null) {\n locales[name] = locales[name].parentLocale;\n if (name === getSetGlobalLocale()) {\n getSetGlobalLocale(name);\n }\n } else if (locales[name] != null) {\n delete locales[name];\n }\n }\n }\n return locales[name];\n }\n\n // returns locale data\n function getLocale(key) {\n var locale;\n\n if (key && key._locale && key._locale._abbr) {\n key = key._locale._abbr;\n }\n\n if (!key) {\n return globalLocale;\n }\n\n if (!isArray(key)) {\n //short-circuit everything else\n locale = loadLocale(key);\n if (locale) {\n return locale;\n }\n key = [key];\n }\n\n return chooseLocale(key);\n }\n\n function listLocales() {\n return keys(locales);\n }\n\n function checkOverflow(m) {\n var overflow,\n a = m._a;\n\n if (a && getParsingFlags(m).overflow === -2) {\n overflow =\n a[MONTH] < 0 || a[MONTH] > 11\n ? MONTH\n : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n ? DATE\n : a[HOUR] < 0 ||\n a[HOUR] > 24 ||\n (a[HOUR] === 24 &&\n (a[MINUTE] !== 0 ||\n a[SECOND] !== 0 ||\n a[MILLISECOND] !== 0))\n ? HOUR\n : a[MINUTE] < 0 || a[MINUTE] > 59\n ? MINUTE\n : a[SECOND] < 0 || a[SECOND] > 59\n ? SECOND\n : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n ? MILLISECOND\n : -1;\n\n if (\n getParsingFlags(m)._overflowDayOfYear &&\n (overflow < YEAR || overflow > DATE)\n ) {\n overflow = DATE;\n }\n if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n overflow = WEEK;\n }\n if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n overflow = WEEKDAY;\n }\n\n getParsingFlags(m).overflow = overflow;\n }\n\n return m;\n }\n\n // iso 8601 regex\n // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n var extendedIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n basicIsoRegex =\n /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n isoDates = [\n ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n ['YYYY-DDD', /\\d{4}-\\d{3}/],\n ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n ['YYYYYYMMDD', /[+-]\\d{10}/],\n ['YYYYMMDD', /\\d{8}/],\n ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n ['YYYYDDD', /\\d{7}/],\n ['YYYYMM', /\\d{6}/, false],\n ['YYYY', /\\d{4}/, false],\n ],\n // iso time formats and regexes\n isoTimes = [\n ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n ['HH:mm', /\\d\\d:\\d\\d/],\n ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n ['HHmm', /\\d\\d\\d\\d/],\n ['HH', /\\d\\d/],\n ],\n aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n rfc2822 =\n /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n obsOffsets = {\n UT: 0,\n GMT: 0,\n EDT: -4 * 60,\n EST: -5 * 60,\n CDT: -5 * 60,\n CST: -6 * 60,\n MDT: -6 * 60,\n MST: -7 * 60,\n PDT: -7 * 60,\n PST: -8 * 60,\n };\n\n // date from iso format\n function configFromISO(config) {\n var i,\n l,\n string = config._i,\n match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n allowTime,\n dateFormat,\n timeFormat,\n tzFormat,\n isoDatesLen = isoDates.length,\n isoTimesLen = isoTimes.length;\n\n if (match) {\n getParsingFlags(config).iso = true;\n for (i = 0, l = isoDatesLen; i < l; i++) {\n if (isoDates[i][1].exec(match[1])) {\n dateFormat = isoDates[i][0];\n allowTime = isoDates[i][2] !== false;\n break;\n }\n }\n if (dateFormat == null) {\n config._isValid = false;\n return;\n }\n if (match[3]) {\n for (i = 0, l = isoTimesLen; i < l; i++) {\n if (isoTimes[i][1].exec(match[3])) {\n // match[2] should be 'T' or space\n timeFormat = (match[2] || ' ') + isoTimes[i][0];\n break;\n }\n }\n if (timeFormat == null) {\n config._isValid = false;\n return;\n }\n }\n if (!allowTime && timeFormat != null) {\n config._isValid = false;\n return;\n }\n if (match[4]) {\n if (tzRegex.exec(match[4])) {\n tzFormat = 'Z';\n } else {\n config._isValid = false;\n return;\n }\n }\n config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n configFromStringAndFormat(config);\n } else {\n config._isValid = false;\n }\n }\n\n function extractFromRFC2822Strings(\n yearStr,\n monthStr,\n dayStr,\n hourStr,\n minuteStr,\n secondStr\n ) {\n var result = [\n untruncateYear(yearStr),\n defaultLocaleMonthsShort.indexOf(monthStr),\n parseInt(dayStr, 10),\n parseInt(hourStr, 10),\n parseInt(minuteStr, 10),\n ];\n\n if (secondStr) {\n result.push(parseInt(secondStr, 10));\n }\n\n return result;\n }\n\n function untruncateYear(yearStr) {\n var year = parseInt(yearStr, 10);\n if (year <= 49) {\n return 2000 + year;\n } else if (year <= 999) {\n return 1900 + year;\n }\n return year;\n }\n\n function preprocessRFC2822(s) {\n // Remove comments and folding whitespace and replace multiple-spaces with a single space\n return s\n .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n .replace(/(\\s\\s+)/g, ' ')\n .replace(/^\\s\\s*/, '')\n .replace(/\\s\\s*$/, '');\n }\n\n function checkWeekday(weekdayStr, parsedInput, config) {\n if (weekdayStr) {\n // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n weekdayActual = new Date(\n parsedInput[0],\n parsedInput[1],\n parsedInput[2]\n ).getDay();\n if (weekdayProvided !== weekdayActual) {\n getParsingFlags(config).weekdayMismatch = true;\n config._isValid = false;\n return false;\n }\n }\n return true;\n }\n\n function calculateOffset(obsOffset, militaryOffset, numOffset) {\n if (obsOffset) {\n return obsOffsets[obsOffset];\n } else if (militaryOffset) {\n // the only allowed military tz is Z\n return 0;\n } else {\n var hm = parseInt(numOffset, 10),\n m = hm % 100,\n h = (hm - m) / 100;\n return h * 60 + m;\n }\n }\n\n // date and time from ref 2822 format\n function configFromRFC2822(config) {\n var match = rfc2822.exec(preprocessRFC2822(config._i)),\n parsedArray;\n if (match) {\n parsedArray = extractFromRFC2822Strings(\n match[4],\n match[3],\n match[2],\n match[5],\n match[6],\n match[7]\n );\n if (!checkWeekday(match[1], parsedArray, config)) {\n return;\n }\n\n config._a = parsedArray;\n config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n config._d = createUTCDate.apply(null, config._a);\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n getParsingFlags(config).rfc2822 = true;\n } else {\n config._isValid = false;\n }\n }\n\n // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n function configFromString(config) {\n var matched = aspNetJsonRegex.exec(config._i);\n if (matched !== null) {\n config._d = new Date(+matched[1]);\n return;\n }\n\n configFromISO(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n configFromRFC2822(config);\n if (config._isValid === false) {\n delete config._isValid;\n } else {\n return;\n }\n\n if (config._strict) {\n config._isValid = false;\n } else {\n // Final attempt, use Input Fallback\n hooks.createFromInputFallback(config);\n }\n }\n\n hooks.createFromInputFallback = deprecate(\n 'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n 'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n function (config) {\n config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n }\n );\n\n // Pick the first defined of two or three arguments.\n function defaults(a, b, c) {\n if (a != null) {\n return a;\n }\n if (b != null) {\n return b;\n }\n return c;\n }\n\n function currentDateArray(config) {\n // hooks is actually the exported moment object\n var nowValue = new Date(hooks.now());\n if (config._useUTC) {\n return [\n nowValue.getUTCFullYear(),\n nowValue.getUTCMonth(),\n nowValue.getUTCDate(),\n ];\n }\n return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n }\n\n // convert an array to a date.\n // the array should mirror the parameters below\n // note: all values past the year are optional and will default to the lowest possible value.\n // [year, month, day , hour, minute, second, millisecond]\n function configFromArray(config) {\n var i,\n date,\n input = [],\n currentDate,\n expectedWeekday,\n yearToUse;\n\n if (config._d) {\n return;\n }\n\n currentDate = currentDateArray(config);\n\n //compute day of the year from weeks and weekdays\n if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n dayOfYearFromWeekInfo(config);\n }\n\n //if the day of the year is set, figure out what it is\n if (config._dayOfYear != null) {\n yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n if (\n config._dayOfYear > daysInYear(yearToUse) ||\n config._dayOfYear === 0\n ) {\n getParsingFlags(config)._overflowDayOfYear = true;\n }\n\n date = createUTCDate(yearToUse, 0, config._dayOfYear);\n config._a[MONTH] = date.getUTCMonth();\n config._a[DATE] = date.getUTCDate();\n }\n\n // Default to current date.\n // * if no year, month, day of month are given, default to today\n // * if day of month is given, default month and year\n // * if month is given, default only year\n // * if year is given, don't default anything\n for (i = 0; i < 3 && config._a[i] == null; ++i) {\n config._a[i] = input[i] = currentDate[i];\n }\n\n // Zero out whatever was not defaulted, including time\n for (; i < 7; i++) {\n config._a[i] = input[i] =\n config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n }\n\n // Check for 24:00:00.000\n if (\n config._a[HOUR] === 24 &&\n config._a[MINUTE] === 0 &&\n config._a[SECOND] === 0 &&\n config._a[MILLISECOND] === 0\n ) {\n config._nextDay = true;\n config._a[HOUR] = 0;\n }\n\n config._d = (config._useUTC ? createUTCDate : createDate).apply(\n null,\n input\n );\n expectedWeekday = config._useUTC\n ? config._d.getUTCDay()\n : config._d.getDay();\n\n // Apply timezone offset from input. The actual utcOffset can be changed\n // with parseZone.\n if (config._tzm != null) {\n config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n }\n\n if (config._nextDay) {\n config._a[HOUR] = 24;\n }\n\n // check for mismatching day of week\n if (\n config._w &&\n typeof config._w.d !== 'undefined' &&\n config._w.d !== expectedWeekday\n ) {\n getParsingFlags(config).weekdayMismatch = true;\n }\n }\n\n function dayOfYearFromWeekInfo(config) {\n var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n w = config._w;\n if (w.GG != null || w.W != null || w.E != null) {\n dow = 1;\n doy = 4;\n\n // TODO: We need to take the current isoWeekYear, but that depends on\n // how we interpret now (local, utc, fixed offset). So create\n // a now version of current config (take local/utc/offset flags, and\n // create now).\n weekYear = defaults(\n w.GG,\n config._a[YEAR],\n weekOfYear(createLocal(), 1, 4).year\n );\n week = defaults(w.W, 1);\n weekday = defaults(w.E, 1);\n if (weekday < 1 || weekday > 7) {\n weekdayOverflow = true;\n }\n } else {\n dow = config._locale._week.dow;\n doy = config._locale._week.doy;\n\n curWeek = weekOfYear(createLocal(), dow, doy);\n\n weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n // Default to current week.\n week = defaults(w.w, curWeek.week);\n\n if (w.d != null) {\n // weekday -- low day numbers are considered next week\n weekday = w.d;\n if (weekday < 0 || weekday > 6) {\n weekdayOverflow = true;\n }\n } else if (w.e != null) {\n // local weekday -- counting starts from beginning of week\n weekday = w.e + dow;\n if (w.e < 0 || w.e > 6) {\n weekdayOverflow = true;\n }\n } else {\n // default to beginning of week\n weekday = dow;\n }\n }\n if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n getParsingFlags(config)._overflowWeeks = true;\n } else if (weekdayOverflow != null) {\n getParsingFlags(config)._overflowWeekday = true;\n } else {\n temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n config._a[YEAR] = temp.year;\n config._dayOfYear = temp.dayOfYear;\n }\n }\n\n // constant that refers to the ISO standard\n hooks.ISO_8601 = function () {};\n\n // constant that refers to the RFC 2822 form\n hooks.RFC_2822 = function () {};\n\n // date from string and format string\n function configFromStringAndFormat(config) {\n // TODO: Move this to another part of the creation flow to prevent circular deps\n if (config._f === hooks.ISO_8601) {\n configFromISO(config);\n return;\n }\n if (config._f === hooks.RFC_2822) {\n configFromRFC2822(config);\n return;\n }\n config._a = [];\n getParsingFlags(config).empty = true;\n\n // This array is used to make a Date, either with `new Date` or `Date.UTC`\n var string = '' + config._i,\n i,\n parsedInput,\n tokens,\n token,\n skipped,\n stringLength = string.length,\n totalParsedInputLength = 0,\n era,\n tokenLen;\n\n tokens =\n expandFormat(config._f, config._locale).match(formattingTokens) || [];\n tokenLen = tokens.length;\n for (i = 0; i < tokenLen; i++) {\n token = tokens[i];\n parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n [])[0];\n if (parsedInput) {\n skipped = string.substr(0, string.indexOf(parsedInput));\n if (skipped.length > 0) {\n getParsingFlags(config).unusedInput.push(skipped);\n }\n string = string.slice(\n string.indexOf(parsedInput) + parsedInput.length\n );\n totalParsedInputLength += parsedInput.length;\n }\n // don't parse if it's not a known token\n if (formatTokenFunctions[token]) {\n if (parsedInput) {\n getParsingFlags(config).empty = false;\n } else {\n getParsingFlags(config).unusedTokens.push(token);\n }\n addTimeToArrayFromToken(token, parsedInput, config);\n } else if (config._strict && !parsedInput) {\n getParsingFlags(config).unusedTokens.push(token);\n }\n }\n\n // add remaining unparsed input length to the string\n getParsingFlags(config).charsLeftOver =\n stringLength - totalParsedInputLength;\n if (string.length > 0) {\n getParsingFlags(config).unusedInput.push(string);\n }\n\n // clear _12h flag if hour is <= 12\n if (\n config._a[HOUR] <= 12 &&\n getParsingFlags(config).bigHour === true &&\n config._a[HOUR] > 0\n ) {\n getParsingFlags(config).bigHour = undefined;\n }\n\n getParsingFlags(config).parsedDateParts = config._a.slice(0);\n getParsingFlags(config).meridiem = config._meridiem;\n // handle meridiem\n config._a[HOUR] = meridiemFixWrap(\n config._locale,\n config._a[HOUR],\n config._meridiem\n );\n\n // handle era\n era = getParsingFlags(config).era;\n if (era !== null) {\n config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n }\n\n configFromArray(config);\n checkOverflow(config);\n }\n\n function meridiemFixWrap(locale, hour, meridiem) {\n var isPm;\n\n if (meridiem == null) {\n // nothing to do\n return hour;\n }\n if (locale.meridiemHour != null) {\n return locale.meridiemHour(hour, meridiem);\n } else if (locale.isPM != null) {\n // Fallback\n isPm = locale.isPM(meridiem);\n if (isPm && hour < 12) {\n hour += 12;\n }\n if (!isPm && hour === 12) {\n hour = 0;\n }\n return hour;\n } else {\n // this is not supposed to happen\n return hour;\n }\n }\n\n // date from string and array of format strings\n function configFromStringAndArray(config) {\n var tempConfig,\n bestMoment,\n scoreToBeat,\n i,\n currentScore,\n validFormatFound,\n bestFormatIsValid = false,\n configfLen = config._f.length;\n\n if (configfLen === 0) {\n getParsingFlags(config).invalidFormat = true;\n config._d = new Date(NaN);\n return;\n }\n\n for (i = 0; i < configfLen; i++) {\n currentScore = 0;\n validFormatFound = false;\n tempConfig = copyConfig({}, config);\n if (config._useUTC != null) {\n tempConfig._useUTC = config._useUTC;\n }\n tempConfig._f = config._f[i];\n configFromStringAndFormat(tempConfig);\n\n if (isValid(tempConfig)) {\n validFormatFound = true;\n }\n\n // if there is any input that was not parsed add a penalty for that format\n currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n //or tokens\n currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n getParsingFlags(tempConfig).score = currentScore;\n\n if (!bestFormatIsValid) {\n if (\n scoreToBeat == null ||\n currentScore < scoreToBeat ||\n validFormatFound\n ) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n if (validFormatFound) {\n bestFormatIsValid = true;\n }\n }\n } else {\n if (currentScore < scoreToBeat) {\n scoreToBeat = currentScore;\n bestMoment = tempConfig;\n }\n }\n }\n\n extend(config, bestMoment || tempConfig);\n }\n\n function configFromObject(config) {\n if (config._d) {\n return;\n }\n\n var i = normalizeObjectUnits(config._i),\n dayOrDate = i.day === undefined ? i.date : i.day;\n config._a = map(\n [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n function (obj) {\n return obj && parseInt(obj, 10);\n }\n );\n\n configFromArray(config);\n }\n\n function createFromConfig(config) {\n var res = new Moment(checkOverflow(prepareConfig(config)));\n if (res._nextDay) {\n // Adding is smart enough around DST\n res.add(1, 'd');\n res._nextDay = undefined;\n }\n\n return res;\n }\n\n function prepareConfig(config) {\n var input = config._i,\n format = config._f;\n\n config._locale = config._locale || getLocale(config._l);\n\n if (input === null || (format === undefined && input === '')) {\n return createInvalid({ nullInput: true });\n }\n\n if (typeof input === 'string') {\n config._i = input = config._locale.preparse(input);\n }\n\n if (isMoment(input)) {\n return new Moment(checkOverflow(input));\n } else if (isDate(input)) {\n config._d = input;\n } else if (isArray(format)) {\n configFromStringAndArray(config);\n } else if (format) {\n configFromStringAndFormat(config);\n } else {\n configFromInput(config);\n }\n\n if (!isValid(config)) {\n config._d = null;\n }\n\n return config;\n }\n\n function configFromInput(config) {\n var input = config._i;\n if (isUndefined(input)) {\n config._d = new Date(hooks.now());\n } else if (isDate(input)) {\n config._d = new Date(input.valueOf());\n } else if (typeof input === 'string') {\n configFromString(config);\n } else if (isArray(input)) {\n config._a = map(input.slice(0), function (obj) {\n return parseInt(obj, 10);\n });\n configFromArray(config);\n } else if (isObject(input)) {\n configFromObject(config);\n } else if (isNumber(input)) {\n // from milliseconds\n config._d = new Date(input);\n } else {\n hooks.createFromInputFallback(config);\n }\n }\n\n function createLocalOrUTC(input, format, locale, strict, isUTC) {\n var c = {};\n\n if (format === true || format === false) {\n strict = format;\n format = undefined;\n }\n\n if (locale === true || locale === false) {\n strict = locale;\n locale = undefined;\n }\n\n if (\n (isObject(input) && isObjectEmpty(input)) ||\n (isArray(input) && input.length === 0)\n ) {\n input = undefined;\n }\n // object construction must be done this way.\n // https://github.com/moment/moment/issues/1423\n c._isAMomentObject = true;\n c._useUTC = c._isUTC = isUTC;\n c._l = locale;\n c._i = input;\n c._f = format;\n c._strict = strict;\n\n return createFromConfig(c);\n }\n\n function createLocal(input, format, locale, strict) {\n return createLocalOrUTC(input, format, locale, strict, false);\n }\n\n var prototypeMin = deprecate(\n 'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other < this ? this : other;\n } else {\n return createInvalid();\n }\n }\n ),\n prototypeMax = deprecate(\n 'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n function () {\n var other = createLocal.apply(null, arguments);\n if (this.isValid() && other.isValid()) {\n return other > this ? this : other;\n } else {\n return createInvalid();\n }\n }\n );\n\n // Pick a moment m from moments so that m[fn](other) is true for all\n // other. This relies on the function fn to be transitive.\n //\n // moments should either be an array of moment objects or an array, whose\n // first element is an array of moment objects.\n function pickBy(fn, moments) {\n var res, i;\n if (moments.length === 1 && isArray(moments[0])) {\n moments = moments[0];\n }\n if (!moments.length) {\n return createLocal();\n }\n res = moments[0];\n for (i = 1; i < moments.length; ++i) {\n if (!moments[i].isValid() || moments[i][fn](res)) {\n res = moments[i];\n }\n }\n return res;\n }\n\n // TODO: Use [].sort instead?\n function min() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isBefore', args);\n }\n\n function max() {\n var args = [].slice.call(arguments, 0);\n\n return pickBy('isAfter', args);\n }\n\n var now = function () {\n return Date.now ? Date.now() : +new Date();\n };\n\n var ordering = [\n 'year',\n 'quarter',\n 'month',\n 'week',\n 'day',\n 'hour',\n 'minute',\n 'second',\n 'millisecond',\n ];\n\n function isDurationValid(m) {\n var key,\n unitHasDecimal = false,\n i,\n orderLen = ordering.length;\n for (key in m) {\n if (\n hasOwnProp(m, key) &&\n !(\n indexOf.call(ordering, key) !== -1 &&\n (m[key] == null || !isNaN(m[key]))\n )\n ) {\n return false;\n }\n }\n\n for (i = 0; i < orderLen; ++i) {\n if (m[ordering[i]]) {\n if (unitHasDecimal) {\n return false; // only allow non-integers for smallest unit\n }\n if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n unitHasDecimal = true;\n }\n }\n }\n\n return true;\n }\n\n function isValid$1() {\n return this._isValid;\n }\n\n function createInvalid$1() {\n return createDuration(NaN);\n }\n\n function Duration(duration) {\n var normalizedInput = normalizeObjectUnits(duration),\n years = normalizedInput.year || 0,\n quarters = normalizedInput.quarter || 0,\n months = normalizedInput.month || 0,\n weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n days = normalizedInput.day || 0,\n hours = normalizedInput.hour || 0,\n minutes = normalizedInput.minute || 0,\n seconds = normalizedInput.second || 0,\n milliseconds = normalizedInput.millisecond || 0;\n\n this._isValid = isDurationValid(normalizedInput);\n\n // representation for dateAddRemove\n this._milliseconds =\n +milliseconds +\n seconds * 1e3 + // 1000\n minutes * 6e4 + // 1000 * 60\n hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n // Because of dateAddRemove treats 24 hours as different from a\n // day when working around DST, we need to store them separately\n this._days = +days + weeks * 7;\n // It is impossible to translate months into days without knowing\n // which months you are are talking about, so we have to store\n // it separately.\n this._months = +months + quarters * 3 + years * 12;\n\n this._data = {};\n\n this._locale = getLocale();\n\n this._bubble();\n }\n\n function isDuration(obj) {\n return obj instanceof Duration;\n }\n\n function absRound(number) {\n if (number < 0) {\n return Math.round(-1 * number) * -1;\n } else {\n return Math.round(number);\n }\n }\n\n // compare two arrays, return the number of differences\n function compareArrays(array1, array2, dontConvert) {\n var len = Math.min(array1.length, array2.length),\n lengthDiff = Math.abs(array1.length - array2.length),\n diffs = 0,\n i;\n for (i = 0; i < len; i++) {\n if (\n (dontConvert && array1[i] !== array2[i]) ||\n (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n ) {\n diffs++;\n }\n }\n return diffs + lengthDiff;\n }\n\n // FORMATTING\n\n function offset(token, separator) {\n addFormatToken(token, 0, 0, function () {\n var offset = this.utcOffset(),\n sign = '+';\n if (offset < 0) {\n offset = -offset;\n sign = '-';\n }\n return (\n sign +\n zeroFill(~~(offset / 60), 2) +\n separator +\n zeroFill(~~offset % 60, 2)\n );\n });\n }\n\n offset('Z', ':');\n offset('ZZ', '');\n\n // PARSING\n\n addRegexToken('Z', matchShortOffset);\n addRegexToken('ZZ', matchShortOffset);\n addParseToken(['Z', 'ZZ'], function (input, array, config) {\n config._useUTC = true;\n config._tzm = offsetFromString(matchShortOffset, input);\n });\n\n // HELPERS\n\n // timezone chunker\n // '+10:00' > ['10', '00']\n // '-1530' > ['-15', '30']\n var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n function offsetFromString(matcher, string) {\n var matches = (string || '').match(matcher),\n chunk,\n parts,\n minutes;\n\n if (matches === null) {\n return null;\n }\n\n chunk = matches[matches.length - 1] || [];\n parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n }\n\n // Return a moment from input, that is local/utc/zone equivalent to model.\n function cloneWithOffset(input, model) {\n var res, diff;\n if (model._isUTC) {\n res = model.clone();\n diff =\n (isMoment(input) || isDate(input)\n ? input.valueOf()\n : createLocal(input).valueOf()) - res.valueOf();\n // Use low-level api, because this fn is low-level api.\n res._d.setTime(res._d.valueOf() + diff);\n hooks.updateOffset(res, false);\n return res;\n } else {\n return createLocal(input).local();\n }\n }\n\n function getDateOffset(m) {\n // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n // https://github.com/moment/moment/pull/1871\n return -Math.round(m._d.getTimezoneOffset());\n }\n\n // HOOKS\n\n // This function will be called whenever a moment is mutated.\n // It is intended to keep the offset in sync with the timezone.\n hooks.updateOffset = function () {};\n\n // MOMENTS\n\n // keepLocalTime = true means only change the timezone, without\n // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n // +0200, so we adjust the time as needed, to be valid.\n //\n // Keeping the time actually adds/subtracts (one hour)\n // from the actual represented time. That is why we call updateOffset\n // a second time. In case it wants us to change the offset again\n // _changeInProgress == true case, then we have to adjust, because\n // there is no such time in the given timezone.\n function getSetOffset(input, keepLocalTime, keepMinutes) {\n var offset = this._offset || 0,\n localAdjust;\n if (!this.isValid()) {\n return input != null ? this : NaN;\n }\n if (input != null) {\n if (typeof input === 'string') {\n input = offsetFromString(matchShortOffset, input);\n if (input === null) {\n return this;\n }\n } else if (Math.abs(input) < 16 && !keepMinutes) {\n input = input * 60;\n }\n if (!this._isUTC && keepLocalTime) {\n localAdjust = getDateOffset(this);\n }\n this._offset = input;\n this._isUTC = true;\n if (localAdjust != null) {\n this.add(localAdjust, 'm');\n }\n if (offset !== input) {\n if (!keepLocalTime || this._changeInProgress) {\n addSubtract(\n this,\n createDuration(input - offset, 'm'),\n 1,\n false\n );\n } else if (!this._changeInProgress) {\n this._changeInProgress = true;\n hooks.updateOffset(this, true);\n this._changeInProgress = null;\n }\n }\n return this;\n } else {\n return this._isUTC ? offset : getDateOffset(this);\n }\n }\n\n function getSetZone(input, keepLocalTime) {\n if (input != null) {\n if (typeof input !== 'string') {\n input = -input;\n }\n\n this.utcOffset(input, keepLocalTime);\n\n return this;\n } else {\n return -this.utcOffset();\n }\n }\n\n function setOffsetToUTC(keepLocalTime) {\n return this.utcOffset(0, keepLocalTime);\n }\n\n function setOffsetToLocal(keepLocalTime) {\n if (this._isUTC) {\n this.utcOffset(0, keepLocalTime);\n this._isUTC = false;\n\n if (keepLocalTime) {\n this.subtract(getDateOffset(this), 'm');\n }\n }\n return this;\n }\n\n function setOffsetToParsedOffset() {\n if (this._tzm != null) {\n this.utcOffset(this._tzm, false, true);\n } else if (typeof this._i === 'string') {\n var tZone = offsetFromString(matchOffset, this._i);\n if (tZone != null) {\n this.utcOffset(tZone);\n } else {\n this.utcOffset(0, true);\n }\n }\n return this;\n }\n\n function hasAlignedHourOffset(input) {\n if (!this.isValid()) {\n return false;\n }\n input = input ? createLocal(input).utcOffset() : 0;\n\n return (this.utcOffset() - input) % 60 === 0;\n }\n\n function isDaylightSavingTime() {\n return (\n this.utcOffset() > this.clone().month(0).utcOffset() ||\n this.utcOffset() > this.clone().month(5).utcOffset()\n );\n }\n\n function isDaylightSavingTimeShifted() {\n if (!isUndefined(this._isDSTShifted)) {\n return this._isDSTShifted;\n }\n\n var c = {},\n other;\n\n copyConfig(c, this);\n c = prepareConfig(c);\n\n if (c._a) {\n other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n this._isDSTShifted =\n this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n } else {\n this._isDSTShifted = false;\n }\n\n return this._isDSTShifted;\n }\n\n function isLocal() {\n return this.isValid() ? !this._isUTC : false;\n }\n\n function isUtcOffset() {\n return this.isValid() ? this._isUTC : false;\n }\n\n function isUtc() {\n return this.isValid() ? this._isUTC && this._offset === 0 : false;\n }\n\n // ASP.NET json date format regex\n var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n // and further modified to allow for strings containing both week and day\n isoRegex =\n /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n function createDuration(input, key) {\n var duration = input,\n // matching against regexp is expensive, do it on demand\n match = null,\n sign,\n ret,\n diffRes;\n\n if (isDuration(input)) {\n duration = {\n ms: input._milliseconds,\n d: input._days,\n M: input._months,\n };\n } else if (isNumber(input) || !isNaN(+input)) {\n duration = {};\n if (key) {\n duration[key] = +input;\n } else {\n duration.milliseconds = +input;\n }\n } else if ((match = aspNetRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: 0,\n d: toInt(match[DATE]) * sign,\n h: toInt(match[HOUR]) * sign,\n m: toInt(match[MINUTE]) * sign,\n s: toInt(match[SECOND]) * sign,\n ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n };\n } else if ((match = isoRegex.exec(input))) {\n sign = match[1] === '-' ? -1 : 1;\n duration = {\n y: parseIso(match[2], sign),\n M: parseIso(match[3], sign),\n w: parseIso(match[4], sign),\n d: parseIso(match[5], sign),\n h: parseIso(match[6], sign),\n m: parseIso(match[7], sign),\n s: parseIso(match[8], sign),\n };\n } else if (duration == null) {\n // checks for null or undefined\n duration = {};\n } else if (\n typeof duration === 'object' &&\n ('from' in duration || 'to' in duration)\n ) {\n diffRes = momentsDifference(\n createLocal(duration.from),\n createLocal(duration.to)\n );\n\n duration = {};\n duration.ms = diffRes.milliseconds;\n duration.M = diffRes.months;\n }\n\n ret = new Duration(duration);\n\n if (isDuration(input) && hasOwnProp(input, '_locale')) {\n ret._locale = input._locale;\n }\n\n if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n ret._isValid = input._isValid;\n }\n\n return ret;\n }\n\n createDuration.fn = Duration.prototype;\n createDuration.invalid = createInvalid$1;\n\n function parseIso(inp, sign) {\n // We'd normally use ~~inp for this, but unfortunately it also\n // converts floats to ints.\n // inp may be undefined, so careful calling replace on it.\n var res = inp && parseFloat(inp.replace(',', '.'));\n // apply sign while we're at it\n return (isNaN(res) ? 0 : res) * sign;\n }\n\n function positiveMomentsDifference(base, other) {\n var res = {};\n\n res.months =\n other.month() - base.month() + (other.year() - base.year()) * 12;\n if (base.clone().add(res.months, 'M').isAfter(other)) {\n --res.months;\n }\n\n res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n return res;\n }\n\n function momentsDifference(base, other) {\n var res;\n if (!(base.isValid() && other.isValid())) {\n return { milliseconds: 0, months: 0 };\n }\n\n other = cloneWithOffset(other, base);\n if (base.isBefore(other)) {\n res = positiveMomentsDifference(base, other);\n } else {\n res = positiveMomentsDifference(other, base);\n res.milliseconds = -res.milliseconds;\n res.months = -res.months;\n }\n\n return res;\n }\n\n // TODO: remove 'name' arg after deprecation is removed\n function createAdder(direction, name) {\n return function (val, period) {\n var dur, tmp;\n //invert the arguments, but complain about it\n if (period !== null && !isNaN(+period)) {\n deprecateSimple(\n name,\n 'moment().' +\n name +\n '(period, number) is deprecated. Please use moment().' +\n name +\n '(number, period). ' +\n 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n );\n tmp = val;\n val = period;\n period = tmp;\n }\n\n dur = createDuration(val, period);\n addSubtract(this, dur, direction);\n return this;\n };\n }\n\n function addSubtract(mom, duration, isAdding, updateOffset) {\n var milliseconds = duration._milliseconds,\n days = absRound(duration._days),\n months = absRound(duration._months);\n\n if (!mom.isValid()) {\n // No op\n return;\n }\n\n updateOffset = updateOffset == null ? true : updateOffset;\n\n if (months) {\n setMonth(mom, get(mom, 'Month') + months * isAdding);\n }\n if (days) {\n set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n }\n if (milliseconds) {\n mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n }\n if (updateOffset) {\n hooks.updateOffset(mom, days || months);\n }\n }\n\n var add = createAdder(1, 'add'),\n subtract = createAdder(-1, 'subtract');\n\n function isString(input) {\n return typeof input === 'string' || input instanceof String;\n }\n\n // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n function isMomentInput(input) {\n return (\n isMoment(input) ||\n isDate(input) ||\n isString(input) ||\n isNumber(input) ||\n isNumberOrStringArray(input) ||\n isMomentInputObject(input) ||\n input === null ||\n input === undefined\n );\n }\n\n function isMomentInputObject(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'years',\n 'year',\n 'y',\n 'months',\n 'month',\n 'M',\n 'days',\n 'day',\n 'd',\n 'dates',\n 'date',\n 'D',\n 'hours',\n 'hour',\n 'h',\n 'minutes',\n 'minute',\n 'm',\n 'seconds',\n 'second',\n 's',\n 'milliseconds',\n 'millisecond',\n 'ms',\n ],\n i,\n property,\n propertyLen = properties.length;\n\n for (i = 0; i < propertyLen; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function isNumberOrStringArray(input) {\n var arrayTest = isArray(input),\n dataTypeTest = false;\n if (arrayTest) {\n dataTypeTest =\n input.filter(function (item) {\n return !isNumber(item) && isString(input);\n }).length === 0;\n }\n return arrayTest && dataTypeTest;\n }\n\n function isCalendarSpec(input) {\n var objectTest = isObject(input) && !isObjectEmpty(input),\n propertyTest = false,\n properties = [\n 'sameDay',\n 'nextDay',\n 'lastDay',\n 'nextWeek',\n 'lastWeek',\n 'sameElse',\n ],\n i,\n property;\n\n for (i = 0; i < properties.length; i += 1) {\n property = properties[i];\n propertyTest = propertyTest || hasOwnProp(input, property);\n }\n\n return objectTest && propertyTest;\n }\n\n function getCalendarFormat(myMoment, now) {\n var diff = myMoment.diff(now, 'days', true);\n return diff < -6\n ? 'sameElse'\n : diff < -1\n ? 'lastWeek'\n : diff < 0\n ? 'lastDay'\n : diff < 1\n ? 'sameDay'\n : diff < 2\n ? 'nextDay'\n : diff < 7\n ? 'nextWeek'\n : 'sameElse';\n }\n\n function calendar$1(time, formats) {\n // Support for single parameter, formats only overload to the calendar function\n if (arguments.length === 1) {\n if (!arguments[0]) {\n time = undefined;\n formats = undefined;\n } else if (isMomentInput(arguments[0])) {\n time = arguments[0];\n formats = undefined;\n } else if (isCalendarSpec(arguments[0])) {\n formats = arguments[0];\n time = undefined;\n }\n }\n // We want to compare the start of today, vs this.\n // Getting start-of-today depends on whether we're local/utc/offset or not.\n var now = time || createLocal(),\n sod = cloneWithOffset(now, this).startOf('day'),\n format = hooks.calendarFormat(this, sod) || 'sameElse',\n output =\n formats &&\n (isFunction(formats[format])\n ? formats[format].call(this, now)\n : formats[format]);\n\n return this.format(\n output || this.localeData().calendar(format, this, createLocal(now))\n );\n }\n\n function clone() {\n return new Moment(this);\n }\n\n function isAfter(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() > localInput.valueOf();\n } else {\n return localInput.valueOf() < this.clone().startOf(units).valueOf();\n }\n }\n\n function isBefore(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input);\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() < localInput.valueOf();\n } else {\n return this.clone().endOf(units).valueOf() < localInput.valueOf();\n }\n }\n\n function isBetween(from, to, units, inclusivity) {\n var localFrom = isMoment(from) ? from : createLocal(from),\n localTo = isMoment(to) ? to : createLocal(to);\n if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n return false;\n }\n inclusivity = inclusivity || '()';\n return (\n (inclusivity[0] === '('\n ? this.isAfter(localFrom, units)\n : !this.isBefore(localFrom, units)) &&\n (inclusivity[1] === ')'\n ? this.isBefore(localTo, units)\n : !this.isAfter(localTo, units))\n );\n }\n\n function isSame(input, units) {\n var localInput = isMoment(input) ? input : createLocal(input),\n inputMs;\n if (!(this.isValid() && localInput.isValid())) {\n return false;\n }\n units = normalizeUnits(units) || 'millisecond';\n if (units === 'millisecond') {\n return this.valueOf() === localInput.valueOf();\n } else {\n inputMs = localInput.valueOf();\n return (\n this.clone().startOf(units).valueOf() <= inputMs &&\n inputMs <= this.clone().endOf(units).valueOf()\n );\n }\n }\n\n function isSameOrAfter(input, units) {\n return this.isSame(input, units) || this.isAfter(input, units);\n }\n\n function isSameOrBefore(input, units) {\n return this.isSame(input, units) || this.isBefore(input, units);\n }\n\n function diff(input, units, asFloat) {\n var that, zoneDelta, output;\n\n if (!this.isValid()) {\n return NaN;\n }\n\n that = cloneWithOffset(input, this);\n\n if (!that.isValid()) {\n return NaN;\n }\n\n zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n units = normalizeUnits(units);\n\n switch (units) {\n case 'year':\n output = monthDiff(this, that) / 12;\n break;\n case 'month':\n output = monthDiff(this, that);\n break;\n case 'quarter':\n output = monthDiff(this, that) / 3;\n break;\n case 'second':\n output = (this - that) / 1e3;\n break; // 1000\n case 'minute':\n output = (this - that) / 6e4;\n break; // 1000 * 60\n case 'hour':\n output = (this - that) / 36e5;\n break; // 1000 * 60 * 60\n case 'day':\n output = (this - that - zoneDelta) / 864e5;\n break; // 1000 * 60 * 60 * 24, negate dst\n case 'week':\n output = (this - that - zoneDelta) / 6048e5;\n break; // 1000 * 60 * 60 * 24 * 7, negate dst\n default:\n output = this - that;\n }\n\n return asFloat ? output : absFloor(output);\n }\n\n function monthDiff(a, b) {\n if (a.date() < b.date()) {\n // end-of-month calculations work correct when the start month has more\n // days than the end month.\n return -monthDiff(b, a);\n }\n // difference in months\n var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n // b is in (anchor - 1 month, anchor + 1 month)\n anchor = a.clone().add(wholeMonthDiff, 'months'),\n anchor2,\n adjust;\n\n if (b - anchor < 0) {\n anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor - anchor2);\n } else {\n anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n // linear across the month\n adjust = (b - anchor) / (anchor2 - anchor);\n }\n\n //check for negative zero, return zero if negative zero\n return -(wholeMonthDiff + adjust) || 0;\n }\n\n hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n function toString() {\n return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n }\n\n function toISOString(keepOffset) {\n if (!this.isValid()) {\n return null;\n }\n var utc = keepOffset !== true,\n m = utc ? this.clone().utc() : this;\n if (m.year() < 0 || m.year() > 9999) {\n return formatMoment(\n m,\n utc\n ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n if (isFunction(Date.prototype.toISOString)) {\n // native implementation is ~50x faster, use it when we can\n if (utc) {\n return this.toDate().toISOString();\n } else {\n return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n .toISOString()\n .replace('Z', formatMoment(m, 'Z'));\n }\n }\n return formatMoment(\n m,\n utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n );\n }\n\n /**\n * Return a human readable representation of a moment that can\n * also be evaluated to get a new moment which is the same\n *\n * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n */\n function inspect() {\n if (!this.isValid()) {\n return 'moment.invalid(/* ' + this._i + ' */)';\n }\n var func = 'moment',\n zone = '',\n prefix,\n year,\n datetime,\n suffix;\n if (!this.isLocal()) {\n func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n zone = 'Z';\n }\n prefix = '[' + func + '(\"]';\n year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n datetime = '-MM-DD[T]HH:mm:ss.SSS';\n suffix = zone + '[\")]';\n\n return this.format(prefix + year + datetime + suffix);\n }\n\n function format(inputString) {\n if (!inputString) {\n inputString = this.isUtc()\n ? hooks.defaultFormatUtc\n : hooks.defaultFormat;\n }\n var output = formatMoment(this, inputString);\n return this.localeData().postformat(output);\n }\n\n function from(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ to: this, from: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function fromNow(withoutSuffix) {\n return this.from(createLocal(), withoutSuffix);\n }\n\n function to(time, withoutSuffix) {\n if (\n this.isValid() &&\n ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n ) {\n return createDuration({ from: this, to: time })\n .locale(this.locale())\n .humanize(!withoutSuffix);\n } else {\n return this.localeData().invalidDate();\n }\n }\n\n function toNow(withoutSuffix) {\n return this.to(createLocal(), withoutSuffix);\n }\n\n // If passed a locale key, it will set the locale for this\n // instance. Otherwise, it will return the locale configuration\n // variables for this instance.\n function locale(key) {\n var newLocaleData;\n\n if (key === undefined) {\n return this._locale._abbr;\n } else {\n newLocaleData = getLocale(key);\n if (newLocaleData != null) {\n this._locale = newLocaleData;\n }\n return this;\n }\n }\n\n var lang = deprecate(\n 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n function (key) {\n if (key === undefined) {\n return this.localeData();\n } else {\n return this.locale(key);\n }\n }\n );\n\n function localeData() {\n return this._locale;\n }\n\n var MS_PER_SECOND = 1000,\n MS_PER_MINUTE = 60 * MS_PER_SECOND,\n MS_PER_HOUR = 60 * MS_PER_MINUTE,\n MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n // actual modulo - handles negative numbers (for dates before 1970):\n function mod$1(dividend, divisor) {\n return ((dividend % divisor) + divisor) % divisor;\n }\n\n function localStartOfDate(y, m, d) {\n // the date constructor remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return new Date(y, m, d).valueOf();\n }\n }\n\n function utcStartOfDate(y, m, d) {\n // Date.UTC remaps years 0-99 to 1900-1999\n if (y < 100 && y >= 0) {\n // preserve leap years using a full 400 year cycle, then reset\n return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n } else {\n return Date.UTC(y, m, d);\n }\n }\n\n function startOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year(), 0, 1);\n break;\n case 'quarter':\n time = startOfDate(\n this.year(),\n this.month() - (this.month() % 3),\n 1\n );\n break;\n case 'month':\n time = startOfDate(this.year(), this.month(), 1);\n break;\n case 'week':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday()\n );\n break;\n case 'isoWeek':\n time = startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1)\n );\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date());\n break;\n case 'hour':\n time = this._d.valueOf();\n time -= mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n );\n break;\n case 'minute':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_MINUTE);\n break;\n case 'second':\n time = this._d.valueOf();\n time -= mod$1(time, MS_PER_SECOND);\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function endOf(units) {\n var time, startOfDate;\n units = normalizeUnits(units);\n if (units === undefined || units === 'millisecond' || !this.isValid()) {\n return this;\n }\n\n startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n switch (units) {\n case 'year':\n time = startOfDate(this.year() + 1, 0, 1) - 1;\n break;\n case 'quarter':\n time =\n startOfDate(\n this.year(),\n this.month() - (this.month() % 3) + 3,\n 1\n ) - 1;\n break;\n case 'month':\n time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n break;\n case 'week':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - this.weekday() + 7\n ) - 1;\n break;\n case 'isoWeek':\n time =\n startOfDate(\n this.year(),\n this.month(),\n this.date() - (this.isoWeekday() - 1) + 7\n ) - 1;\n break;\n case 'day':\n case 'date':\n time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n break;\n case 'hour':\n time = this._d.valueOf();\n time +=\n MS_PER_HOUR -\n mod$1(\n time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n MS_PER_HOUR\n ) -\n 1;\n break;\n case 'minute':\n time = this._d.valueOf();\n time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n break;\n case 'second':\n time = this._d.valueOf();\n time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n break;\n }\n\n this._d.setTime(time);\n hooks.updateOffset(this, true);\n return this;\n }\n\n function valueOf() {\n return this._d.valueOf() - (this._offset || 0) * 60000;\n }\n\n function unix() {\n return Math.floor(this.valueOf() / 1000);\n }\n\n function toDate() {\n return new Date(this.valueOf());\n }\n\n function toArray() {\n var m = this;\n return [\n m.year(),\n m.month(),\n m.date(),\n m.hour(),\n m.minute(),\n m.second(),\n m.millisecond(),\n ];\n }\n\n function toObject() {\n var m = this;\n return {\n years: m.year(),\n months: m.month(),\n date: m.date(),\n hours: m.hours(),\n minutes: m.minutes(),\n seconds: m.seconds(),\n milliseconds: m.milliseconds(),\n };\n }\n\n function toJSON() {\n // new Date(NaN).toJSON() === null\n return this.isValid() ? this.toISOString() : null;\n }\n\n function isValid$2() {\n return isValid(this);\n }\n\n function parsingFlags() {\n return extend({}, getParsingFlags(this));\n }\n\n function invalidAt() {\n return getParsingFlags(this).overflow;\n }\n\n function creationData() {\n return {\n input: this._i,\n format: this._f,\n locale: this._locale,\n isUTC: this._isUTC,\n strict: this._strict,\n };\n }\n\n addFormatToken('N', 0, 0, 'eraAbbr');\n addFormatToken('NN', 0, 0, 'eraAbbr');\n addFormatToken('NNN', 0, 0, 'eraAbbr');\n addFormatToken('NNNN', 0, 0, 'eraName');\n addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n addFormatToken('y', ['yy', 2], 0, 'eraYear');\n addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n addRegexToken('N', matchEraAbbr);\n addRegexToken('NN', matchEraAbbr);\n addRegexToken('NNN', matchEraAbbr);\n addRegexToken('NNNN', matchEraName);\n addRegexToken('NNNNN', matchEraNarrow);\n\n addParseToken(\n ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n function (input, array, config, token) {\n var era = config._locale.erasParse(input, token, config._strict);\n if (era) {\n getParsingFlags(config).era = era;\n } else {\n getParsingFlags(config).invalidEra = input;\n }\n }\n );\n\n addRegexToken('y', matchUnsigned);\n addRegexToken('yy', matchUnsigned);\n addRegexToken('yyy', matchUnsigned);\n addRegexToken('yyyy', matchUnsigned);\n addRegexToken('yo', matchEraYearOrdinal);\n\n addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n addParseToken(['yo'], function (input, array, config, token) {\n var match;\n if (config._locale._eraYearOrdinalRegex) {\n match = input.match(config._locale._eraYearOrdinalRegex);\n }\n\n if (config._locale.eraYearOrdinalParse) {\n array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n } else {\n array[YEAR] = parseInt(input, 10);\n }\n });\n\n function localeEras(m, format) {\n var i,\n l,\n date,\n eras = this._eras || getLocale('en')._eras;\n for (i = 0, l = eras.length; i < l; ++i) {\n switch (typeof eras[i].since) {\n case 'string':\n // truncate time\n date = hooks(eras[i].since).startOf('day');\n eras[i].since = date.valueOf();\n break;\n }\n\n switch (typeof eras[i].until) {\n case 'undefined':\n eras[i].until = +Infinity;\n break;\n case 'string':\n // truncate time\n date = hooks(eras[i].until).startOf('day').valueOf();\n eras[i].until = date.valueOf();\n break;\n }\n }\n return eras;\n }\n\n function localeErasParse(eraName, format, strict) {\n var i,\n l,\n eras = this.eras(),\n name,\n abbr,\n narrow;\n eraName = eraName.toUpperCase();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n name = eras[i].name.toUpperCase();\n abbr = eras[i].abbr.toUpperCase();\n narrow = eras[i].narrow.toUpperCase();\n\n if (strict) {\n switch (format) {\n case 'N':\n case 'NN':\n case 'NNN':\n if (abbr === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNN':\n if (name === eraName) {\n return eras[i];\n }\n break;\n\n case 'NNNNN':\n if (narrow === eraName) {\n return eras[i];\n }\n break;\n }\n } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n return eras[i];\n }\n }\n }\n\n function localeErasConvertYear(era, year) {\n var dir = era.since <= era.until ? +1 : -1;\n if (year === undefined) {\n return hooks(era.since).year();\n } else {\n return hooks(era.since).year() + (year - era.offset) * dir;\n }\n }\n\n function getEraName() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].name;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].name;\n }\n }\n\n return '';\n }\n\n function getEraNarrow() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].narrow;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].narrow;\n }\n }\n\n return '';\n }\n\n function getEraAbbr() {\n var i,\n l,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (eras[i].since <= val && val <= eras[i].until) {\n return eras[i].abbr;\n }\n if (eras[i].until <= val && val <= eras[i].since) {\n return eras[i].abbr;\n }\n }\n\n return '';\n }\n\n function getEraYear() {\n var i,\n l,\n dir,\n val,\n eras = this.localeData().eras();\n for (i = 0, l = eras.length; i < l; ++i) {\n dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n // truncate time\n val = this.clone().startOf('day').valueOf();\n\n if (\n (eras[i].since <= val && val <= eras[i].until) ||\n (eras[i].until <= val && val <= eras[i].since)\n ) {\n return (\n (this.year() - hooks(eras[i].since).year()) * dir +\n eras[i].offset\n );\n }\n }\n\n return this.year();\n }\n\n function erasNameRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNameRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNameRegex : this._erasRegex;\n }\n\n function erasAbbrRegex(isStrict) {\n if (!hasOwnProp(this, '_erasAbbrRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasAbbrRegex : this._erasRegex;\n }\n\n function erasNarrowRegex(isStrict) {\n if (!hasOwnProp(this, '_erasNarrowRegex')) {\n computeErasParse.call(this);\n }\n return isStrict ? this._erasNarrowRegex : this._erasRegex;\n }\n\n function matchEraAbbr(isStrict, locale) {\n return locale.erasAbbrRegex(isStrict);\n }\n\n function matchEraName(isStrict, locale) {\n return locale.erasNameRegex(isStrict);\n }\n\n function matchEraNarrow(isStrict, locale) {\n return locale.erasNarrowRegex(isStrict);\n }\n\n function matchEraYearOrdinal(isStrict, locale) {\n return locale._eraYearOrdinalRegex || matchUnsigned;\n }\n\n function computeErasParse() {\n var abbrPieces = [],\n namePieces = [],\n narrowPieces = [],\n mixedPieces = [],\n i,\n l,\n erasName,\n erasAbbr,\n erasNarrow,\n eras = this.eras();\n\n for (i = 0, l = eras.length; i < l; ++i) {\n erasName = regexEscape(eras[i].name);\n erasAbbr = regexEscape(eras[i].abbr);\n erasNarrow = regexEscape(eras[i].narrow);\n\n namePieces.push(erasName);\n abbrPieces.push(erasAbbr);\n narrowPieces.push(erasNarrow);\n mixedPieces.push(erasName);\n mixedPieces.push(erasAbbr);\n mixedPieces.push(erasNarrow);\n }\n\n this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n this._erasNarrowRegex = new RegExp(\n '^(' + narrowPieces.join('|') + ')',\n 'i'\n );\n }\n\n // FORMATTING\n\n addFormatToken(0, ['gg', 2], 0, function () {\n return this.weekYear() % 100;\n });\n\n addFormatToken(0, ['GG', 2], 0, function () {\n return this.isoWeekYear() % 100;\n });\n\n function addWeekYearFormatToken(token, getter) {\n addFormatToken(0, [token, token.length], 0, getter);\n }\n\n addWeekYearFormatToken('gggg', 'weekYear');\n addWeekYearFormatToken('ggggg', 'weekYear');\n addWeekYearFormatToken('GGGG', 'isoWeekYear');\n addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n // ALIASES\n\n // PARSING\n\n addRegexToken('G', matchSigned);\n addRegexToken('g', matchSigned);\n addRegexToken('GG', match1to2, match2);\n addRegexToken('gg', match1to2, match2);\n addRegexToken('GGGG', match1to4, match4);\n addRegexToken('gggg', match1to4, match4);\n addRegexToken('GGGGG', match1to6, match6);\n addRegexToken('ggggg', match1to6, match6);\n\n addWeekParseToken(\n ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n function (input, week, config, token) {\n week[token.substr(0, 2)] = toInt(input);\n }\n );\n\n addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n week[token] = hooks.parseTwoDigitYear(input);\n });\n\n // MOMENTS\n\n function getSetWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.week(),\n this.weekday() + this.localeData()._week.dow,\n this.localeData()._week.dow,\n this.localeData()._week.doy\n );\n }\n\n function getSetISOWeekYear(input) {\n return getSetWeekYearHelper.call(\n this,\n input,\n this.isoWeek(),\n this.isoWeekday(),\n 1,\n 4\n );\n }\n\n function getISOWeeksInYear() {\n return weeksInYear(this.year(), 1, 4);\n }\n\n function getISOWeeksInISOWeekYear() {\n return weeksInYear(this.isoWeekYear(), 1, 4);\n }\n\n function getWeeksInYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n }\n\n function getWeeksInWeekYear() {\n var weekInfo = this.localeData()._week;\n return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n }\n\n function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n var weeksTarget;\n if (input == null) {\n return weekOfYear(this, dow, doy).year;\n } else {\n weeksTarget = weeksInYear(input, dow, doy);\n if (week > weeksTarget) {\n week = weeksTarget;\n }\n return setWeekAll.call(this, input, week, weekday, dow, doy);\n }\n }\n\n function setWeekAll(weekYear, week, weekday, dow, doy) {\n var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n this.year(date.getUTCFullYear());\n this.month(date.getUTCMonth());\n this.date(date.getUTCDate());\n return this;\n }\n\n // FORMATTING\n\n addFormatToken('Q', 0, 'Qo', 'quarter');\n\n // PARSING\n\n addRegexToken('Q', match1);\n addParseToken('Q', function (input, array) {\n array[MONTH] = (toInt(input) - 1) * 3;\n });\n\n // MOMENTS\n\n function getSetQuarter(input) {\n return input == null\n ? Math.ceil((this.month() + 1) / 3)\n : this.month((input - 1) * 3 + (this.month() % 3));\n }\n\n // FORMATTING\n\n addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n // PARSING\n\n addRegexToken('D', match1to2, match1to2NoLeadingZero);\n addRegexToken('DD', match1to2, match2);\n addRegexToken('Do', function (isStrict, locale) {\n // TODO: Remove \"ordinalParse\" fallback in next major release.\n return isStrict\n ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n : locale._dayOfMonthOrdinalParseLenient;\n });\n\n addParseToken(['D', 'DD'], DATE);\n addParseToken('Do', function (input, array) {\n array[DATE] = toInt(input.match(match1to2)[0]);\n });\n\n // MOMENTS\n\n var getSetDayOfMonth = makeGetSet('Date', true);\n\n // FORMATTING\n\n addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n // PARSING\n\n addRegexToken('DDD', match1to3);\n addRegexToken('DDDD', match3);\n addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n config._dayOfYear = toInt(input);\n });\n\n // HELPERS\n\n // MOMENTS\n\n function getSetDayOfYear(input) {\n var dayOfYear =\n Math.round(\n (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n ) + 1;\n return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n }\n\n // FORMATTING\n\n addFormatToken('m', ['mm', 2], 0, 'minute');\n\n // PARSING\n\n addRegexToken('m', match1to2, match1to2HasZero);\n addRegexToken('mm', match1to2, match2);\n addParseToken(['m', 'mm'], MINUTE);\n\n // MOMENTS\n\n var getSetMinute = makeGetSet('Minutes', false);\n\n // FORMATTING\n\n addFormatToken('s', ['ss', 2], 0, 'second');\n\n // PARSING\n\n addRegexToken('s', match1to2, match1to2HasZero);\n addRegexToken('ss', match1to2, match2);\n addParseToken(['s', 'ss'], SECOND);\n\n // MOMENTS\n\n var getSetSecond = makeGetSet('Seconds', false);\n\n // FORMATTING\n\n addFormatToken('S', 0, 0, function () {\n return ~~(this.millisecond() / 100);\n });\n\n addFormatToken(0, ['SS', 2], 0, function () {\n return ~~(this.millisecond() / 10);\n });\n\n addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n addFormatToken(0, ['SSSS', 4], 0, function () {\n return this.millisecond() * 10;\n });\n addFormatToken(0, ['SSSSS', 5], 0, function () {\n return this.millisecond() * 100;\n });\n addFormatToken(0, ['SSSSSS', 6], 0, function () {\n return this.millisecond() * 1000;\n });\n addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n return this.millisecond() * 10000;\n });\n addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n return this.millisecond() * 100000;\n });\n addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n return this.millisecond() * 1000000;\n });\n\n // PARSING\n\n addRegexToken('S', match1to3, match1);\n addRegexToken('SS', match1to3, match2);\n addRegexToken('SSS', match1to3, match3);\n\n var token, getSetMillisecond;\n for (token = 'SSSS'; token.length <= 9; token += 'S') {\n addRegexToken(token, matchUnsigned);\n }\n\n function parseMs(input, array) {\n array[MILLISECOND] = toInt(('0.' + input) * 1000);\n }\n\n for (token = 'S'; token.length <= 9; token += 'S') {\n addParseToken(token, parseMs);\n }\n\n getSetMillisecond = makeGetSet('Milliseconds', false);\n\n // FORMATTING\n\n addFormatToken('z', 0, 0, 'zoneAbbr');\n addFormatToken('zz', 0, 0, 'zoneName');\n\n // MOMENTS\n\n function getZoneAbbr() {\n return this._isUTC ? 'UTC' : '';\n }\n\n function getZoneName() {\n return this._isUTC ? 'Coordinated Universal Time' : '';\n }\n\n var proto = Moment.prototype;\n\n proto.add = add;\n proto.calendar = calendar$1;\n proto.clone = clone;\n proto.diff = diff;\n proto.endOf = endOf;\n proto.format = format;\n proto.from = from;\n proto.fromNow = fromNow;\n proto.to = to;\n proto.toNow = toNow;\n proto.get = stringGet;\n proto.invalidAt = invalidAt;\n proto.isAfter = isAfter;\n proto.isBefore = isBefore;\n proto.isBetween = isBetween;\n proto.isSame = isSame;\n proto.isSameOrAfter = isSameOrAfter;\n proto.isSameOrBefore = isSameOrBefore;\n proto.isValid = isValid$2;\n proto.lang = lang;\n proto.locale = locale;\n proto.localeData = localeData;\n proto.max = prototypeMax;\n proto.min = prototypeMin;\n proto.parsingFlags = parsingFlags;\n proto.set = stringSet;\n proto.startOf = startOf;\n proto.subtract = subtract;\n proto.toArray = toArray;\n proto.toObject = toObject;\n proto.toDate = toDate;\n proto.toISOString = toISOString;\n proto.inspect = inspect;\n if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n return 'Moment<' + this.format() + '>';\n };\n }\n proto.toJSON = toJSON;\n proto.toString = toString;\n proto.unix = unix;\n proto.valueOf = valueOf;\n proto.creationData = creationData;\n proto.eraName = getEraName;\n proto.eraNarrow = getEraNarrow;\n proto.eraAbbr = getEraAbbr;\n proto.eraYear = getEraYear;\n proto.year = getSetYear;\n proto.isLeapYear = getIsLeapYear;\n proto.weekYear = getSetWeekYear;\n proto.isoWeekYear = getSetISOWeekYear;\n proto.quarter = proto.quarters = getSetQuarter;\n proto.month = getSetMonth;\n proto.daysInMonth = getDaysInMonth;\n proto.week = proto.weeks = getSetWeek;\n proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n proto.weeksInYear = getWeeksInYear;\n proto.weeksInWeekYear = getWeeksInWeekYear;\n proto.isoWeeksInYear = getISOWeeksInYear;\n proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n proto.date = getSetDayOfMonth;\n proto.day = proto.days = getSetDayOfWeek;\n proto.weekday = getSetLocaleDayOfWeek;\n proto.isoWeekday = getSetISODayOfWeek;\n proto.dayOfYear = getSetDayOfYear;\n proto.hour = proto.hours = getSetHour;\n proto.minute = proto.minutes = getSetMinute;\n proto.second = proto.seconds = getSetSecond;\n proto.millisecond = proto.milliseconds = getSetMillisecond;\n proto.utcOffset = getSetOffset;\n proto.utc = setOffsetToUTC;\n proto.local = setOffsetToLocal;\n proto.parseZone = setOffsetToParsedOffset;\n proto.hasAlignedHourOffset = hasAlignedHourOffset;\n proto.isDST = isDaylightSavingTime;\n proto.isLocal = isLocal;\n proto.isUtcOffset = isUtcOffset;\n proto.isUtc = isUtc;\n proto.isUTC = isUtc;\n proto.zoneAbbr = getZoneAbbr;\n proto.zoneName = getZoneName;\n proto.dates = deprecate(\n 'dates accessor is deprecated. Use date instead.',\n getSetDayOfMonth\n );\n proto.months = deprecate(\n 'months accessor is deprecated. Use month instead',\n getSetMonth\n );\n proto.years = deprecate(\n 'years accessor is deprecated. Use year instead',\n getSetYear\n );\n proto.zone = deprecate(\n 'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n getSetZone\n );\n proto.isDSTShifted = deprecate(\n 'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n isDaylightSavingTimeShifted\n );\n\n function createUnix(input) {\n return createLocal(input * 1000);\n }\n\n function createInZone() {\n return createLocal.apply(null, arguments).parseZone();\n }\n\n function preParsePostFormat(string) {\n return string;\n }\n\n var proto$1 = Locale.prototype;\n\n proto$1.calendar = calendar;\n proto$1.longDateFormat = longDateFormat;\n proto$1.invalidDate = invalidDate;\n proto$1.ordinal = ordinal;\n proto$1.preparse = preParsePostFormat;\n proto$1.postformat = preParsePostFormat;\n proto$1.relativeTime = relativeTime;\n proto$1.pastFuture = pastFuture;\n proto$1.set = set;\n proto$1.eras = localeEras;\n proto$1.erasParse = localeErasParse;\n proto$1.erasConvertYear = localeErasConvertYear;\n proto$1.erasAbbrRegex = erasAbbrRegex;\n proto$1.erasNameRegex = erasNameRegex;\n proto$1.erasNarrowRegex = erasNarrowRegex;\n\n proto$1.months = localeMonths;\n proto$1.monthsShort = localeMonthsShort;\n proto$1.monthsParse = localeMonthsParse;\n proto$1.monthsRegex = monthsRegex;\n proto$1.monthsShortRegex = monthsShortRegex;\n proto$1.week = localeWeek;\n proto$1.firstDayOfYear = localeFirstDayOfYear;\n proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n proto$1.weekdays = localeWeekdays;\n proto$1.weekdaysMin = localeWeekdaysMin;\n proto$1.weekdaysShort = localeWeekdaysShort;\n proto$1.weekdaysParse = localeWeekdaysParse;\n\n proto$1.weekdaysRegex = weekdaysRegex;\n proto$1.weekdaysShortRegex = weekdaysShortRegex;\n proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n proto$1.isPM = localeIsPM;\n proto$1.meridiem = localeMeridiem;\n\n function get$1(format, index, field, setter) {\n var locale = getLocale(),\n utc = createUTC().set(setter, index);\n return locale[field](utc, format);\n }\n\n function listMonthsImpl(format, index, field) {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n\n if (index != null) {\n return get$1(format, index, field, 'month');\n }\n\n var i,\n out = [];\n for (i = 0; i < 12; i++) {\n out[i] = get$1(format, i, field, 'month');\n }\n return out;\n }\n\n // ()\n // (5)\n // (fmt, 5)\n // (fmt)\n // (true)\n // (true, 5)\n // (true, fmt, 5)\n // (true, fmt)\n function listWeekdaysImpl(localeSorted, format, index, field) {\n if (typeof localeSorted === 'boolean') {\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n } else {\n format = localeSorted;\n index = format;\n localeSorted = false;\n\n if (isNumber(format)) {\n index = format;\n format = undefined;\n }\n\n format = format || '';\n }\n\n var locale = getLocale(),\n shift = localeSorted ? locale._week.dow : 0,\n i,\n out = [];\n\n if (index != null) {\n return get$1(format, (index + shift) % 7, field, 'day');\n }\n\n for (i = 0; i < 7; i++) {\n out[i] = get$1(format, (i + shift) % 7, field, 'day');\n }\n return out;\n }\n\n function listMonths(format, index) {\n return listMonthsImpl(format, index, 'months');\n }\n\n function listMonthsShort(format, index) {\n return listMonthsImpl(format, index, 'monthsShort');\n }\n\n function listWeekdays(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n }\n\n function listWeekdaysShort(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n }\n\n function listWeekdaysMin(localeSorted, format, index) {\n return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n }\n\n getSetGlobalLocale('en', {\n eras: [\n {\n since: '0001-01-01',\n until: +Infinity,\n offset: 1,\n name: 'Anno Domini',\n narrow: 'AD',\n abbr: 'AD',\n },\n {\n since: '0000-12-31',\n until: -Infinity,\n offset: 1,\n name: 'Before Christ',\n narrow: 'BC',\n abbr: 'BC',\n },\n ],\n dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n ordinal: function (number) {\n var b = number % 10,\n output =\n toInt((number % 100) / 10) === 1\n ? 'th'\n : b === 1\n ? 'st'\n : b === 2\n ? 'nd'\n : b === 3\n ? 'rd'\n : 'th';\n return number + output;\n },\n });\n\n // Side effect imports\n\n hooks.lang = deprecate(\n 'moment.lang is deprecated. Use moment.locale instead.',\n getSetGlobalLocale\n );\n hooks.langData = deprecate(\n 'moment.langData is deprecated. Use moment.localeData instead.',\n getLocale\n );\n\n var mathAbs = Math.abs;\n\n function abs() {\n var data = this._data;\n\n this._milliseconds = mathAbs(this._milliseconds);\n this._days = mathAbs(this._days);\n this._months = mathAbs(this._months);\n\n data.milliseconds = mathAbs(data.milliseconds);\n data.seconds = mathAbs(data.seconds);\n data.minutes = mathAbs(data.minutes);\n data.hours = mathAbs(data.hours);\n data.months = mathAbs(data.months);\n data.years = mathAbs(data.years);\n\n return this;\n }\n\n function addSubtract$1(duration, input, value, direction) {\n var other = createDuration(input, value);\n\n duration._milliseconds += direction * other._milliseconds;\n duration._days += direction * other._days;\n duration._months += direction * other._months;\n\n return duration._bubble();\n }\n\n // supports only 2.0-style add(1, 's') or add(duration)\n function add$1(input, value) {\n return addSubtract$1(this, input, value, 1);\n }\n\n // supports only 2.0-style subtract(1, 's') or subtract(duration)\n function subtract$1(input, value) {\n return addSubtract$1(this, input, value, -1);\n }\n\n function absCeil(number) {\n if (number < 0) {\n return Math.floor(number);\n } else {\n return Math.ceil(number);\n }\n }\n\n function bubble() {\n var milliseconds = this._milliseconds,\n days = this._days,\n months = this._months,\n data = this._data,\n seconds,\n minutes,\n hours,\n years,\n monthsFromDays;\n\n // if we have a mix of positive and negative values, bubble down first\n // check: https://github.com/moment/moment/issues/2166\n if (\n !(\n (milliseconds >= 0 && days >= 0 && months >= 0) ||\n (milliseconds <= 0 && days <= 0 && months <= 0)\n )\n ) {\n milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n days = 0;\n months = 0;\n }\n\n // The following code bubbles up values, see the tests for\n // examples of what that means.\n data.milliseconds = milliseconds % 1000;\n\n seconds = absFloor(milliseconds / 1000);\n data.seconds = seconds % 60;\n\n minutes = absFloor(seconds / 60);\n data.minutes = minutes % 60;\n\n hours = absFloor(minutes / 60);\n data.hours = hours % 24;\n\n days += absFloor(hours / 24);\n\n // convert days to months\n monthsFromDays = absFloor(daysToMonths(days));\n months += monthsFromDays;\n days -= absCeil(monthsToDays(monthsFromDays));\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n data.days = days;\n data.months = months;\n data.years = years;\n\n return this;\n }\n\n function daysToMonths(days) {\n // 400 years have 146097 days (taking into account leap year rules)\n // 400 years have 12 months === 4800\n return (days * 4800) / 146097;\n }\n\n function monthsToDays(months) {\n // the reverse of daysToMonths\n return (months * 146097) / 4800;\n }\n\n function as(units) {\n if (!this.isValid()) {\n return NaN;\n }\n var days,\n months,\n milliseconds = this._milliseconds;\n\n units = normalizeUnits(units);\n\n if (units === 'month' || units === 'quarter' || units === 'year') {\n days = this._days + milliseconds / 864e5;\n months = this._months + daysToMonths(days);\n switch (units) {\n case 'month':\n return months;\n case 'quarter':\n return months / 3;\n case 'year':\n return months / 12;\n }\n } else {\n // handle milliseconds separately because of floating point math errors (issue #1867)\n days = this._days + Math.round(monthsToDays(this._months));\n switch (units) {\n case 'week':\n return days / 7 + milliseconds / 6048e5;\n case 'day':\n return days + milliseconds / 864e5;\n case 'hour':\n return days * 24 + milliseconds / 36e5;\n case 'minute':\n return days * 1440 + milliseconds / 6e4;\n case 'second':\n return days * 86400 + milliseconds / 1000;\n // Math.floor prevents floating point math errors here\n case 'millisecond':\n return Math.floor(days * 864e5) + milliseconds;\n default:\n throw new Error('Unknown unit ' + units);\n }\n }\n }\n\n function makeAs(alias) {\n return function () {\n return this.as(alias);\n };\n }\n\n var asMilliseconds = makeAs('ms'),\n asSeconds = makeAs('s'),\n asMinutes = makeAs('m'),\n asHours = makeAs('h'),\n asDays = makeAs('d'),\n asWeeks = makeAs('w'),\n asMonths = makeAs('M'),\n asQuarters = makeAs('Q'),\n asYears = makeAs('y'),\n valueOf$1 = asMilliseconds;\n\n function clone$1() {\n return createDuration(this);\n }\n\n function get$2(units) {\n units = normalizeUnits(units);\n return this.isValid() ? this[units + 's']() : NaN;\n }\n\n function makeGetter(name) {\n return function () {\n return this.isValid() ? this._data[name] : NaN;\n };\n }\n\n var milliseconds = makeGetter('milliseconds'),\n seconds = makeGetter('seconds'),\n minutes = makeGetter('minutes'),\n hours = makeGetter('hours'),\n days = makeGetter('days'),\n months = makeGetter('months'),\n years = makeGetter('years');\n\n function weeks() {\n return absFloor(this.days() / 7);\n }\n\n var round = Math.round,\n thresholds = {\n ss: 44, // a few seconds to seconds\n s: 45, // seconds to minute\n m: 45, // minutes to hour\n h: 22, // hours to day\n d: 26, // days to month/week\n w: null, // weeks to month\n M: 11, // months to year\n };\n\n // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n }\n\n function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n var duration = createDuration(posNegDuration).abs(),\n seconds = round(duration.as('s')),\n minutes = round(duration.as('m')),\n hours = round(duration.as('h')),\n days = round(duration.as('d')),\n months = round(duration.as('M')),\n weeks = round(duration.as('w')),\n years = round(duration.as('y')),\n a =\n (seconds <= thresholds.ss && ['s', seconds]) ||\n (seconds < thresholds.s && ['ss', seconds]) ||\n (minutes <= 1 && ['m']) ||\n (minutes < thresholds.m && ['mm', minutes]) ||\n (hours <= 1 && ['h']) ||\n (hours < thresholds.h && ['hh', hours]) ||\n (days <= 1 && ['d']) ||\n (days < thresholds.d && ['dd', days]);\n\n if (thresholds.w != null) {\n a =\n a ||\n (weeks <= 1 && ['w']) ||\n (weeks < thresholds.w && ['ww', weeks]);\n }\n a = a ||\n (months <= 1 && ['M']) ||\n (months < thresholds.M && ['MM', months]) ||\n (years <= 1 && ['y']) || ['yy', years];\n\n a[2] = withoutSuffix;\n a[3] = +posNegDuration > 0;\n a[4] = locale;\n return substituteTimeAgo.apply(null, a);\n }\n\n // This function allows you to set the rounding function for relative time strings\n function getSetRelativeTimeRounding(roundingFunction) {\n if (roundingFunction === undefined) {\n return round;\n }\n if (typeof roundingFunction === 'function') {\n round = roundingFunction;\n return true;\n }\n return false;\n }\n\n // This function allows you to set a threshold for relative time strings\n function getSetRelativeTimeThreshold(threshold, limit) {\n if (thresholds[threshold] === undefined) {\n return false;\n }\n if (limit === undefined) {\n return thresholds[threshold];\n }\n thresholds[threshold] = limit;\n if (threshold === 's') {\n thresholds.ss = limit - 1;\n }\n return true;\n }\n\n function humanize(argWithSuffix, argThresholds) {\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var withSuffix = false,\n th = thresholds,\n locale,\n output;\n\n if (typeof argWithSuffix === 'object') {\n argThresholds = argWithSuffix;\n argWithSuffix = false;\n }\n if (typeof argWithSuffix === 'boolean') {\n withSuffix = argWithSuffix;\n }\n if (typeof argThresholds === 'object') {\n th = Object.assign({}, thresholds, argThresholds);\n if (argThresholds.s != null && argThresholds.ss == null) {\n th.ss = argThresholds.s - 1;\n }\n }\n\n locale = this.localeData();\n output = relativeTime$1(this, !withSuffix, th, locale);\n\n if (withSuffix) {\n output = locale.pastFuture(+this, output);\n }\n\n return locale.postformat(output);\n }\n\n var abs$1 = Math.abs;\n\n function sign(x) {\n return (x > 0) - (x < 0) || +x;\n }\n\n function toISOString$1() {\n // for ISO strings we do not use the normal bubbling rules:\n // * milliseconds bubble up until they become hours\n // * days do not bubble at all\n // * months bubble up until they become years\n // This is because there is no context-free conversion between hours and days\n // (think of clock changes)\n // and also not between days and months (28-31 days per month)\n if (!this.isValid()) {\n return this.localeData().invalidDate();\n }\n\n var seconds = abs$1(this._milliseconds) / 1000,\n days = abs$1(this._days),\n months = abs$1(this._months),\n minutes,\n hours,\n years,\n s,\n total = this.asSeconds(),\n totalSign,\n ymSign,\n daysSign,\n hmsSign;\n\n if (!total) {\n // this is the same as C#'s (Noda) and python (isodate)...\n // but not other JS (goog.date)\n return 'P0D';\n }\n\n // 3600 seconds -> 60 minutes -> 1 hour\n minutes = absFloor(seconds / 60);\n hours = absFloor(minutes / 60);\n seconds %= 60;\n minutes %= 60;\n\n // 12 months -> 1 year\n years = absFloor(months / 12);\n months %= 12;\n\n // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n totalSign = total < 0 ? '-' : '';\n ymSign = sign(this._months) !== sign(total) ? '-' : '';\n daysSign = sign(this._days) !== sign(total) ? '-' : '';\n hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n return (\n totalSign +\n 'P' +\n (years ? ymSign + years + 'Y' : '') +\n (months ? ymSign + months + 'M' : '') +\n (days ? daysSign + days + 'D' : '') +\n (hours || minutes || seconds ? 'T' : '') +\n (hours ? hmsSign + hours + 'H' : '') +\n (minutes ? hmsSign + minutes + 'M' : '') +\n (seconds ? hmsSign + s + 'S' : '')\n );\n }\n\n var proto$2 = Duration.prototype;\n\n proto$2.isValid = isValid$1;\n proto$2.abs = abs;\n proto$2.add = add$1;\n proto$2.subtract = subtract$1;\n proto$2.as = as;\n proto$2.asMilliseconds = asMilliseconds;\n proto$2.asSeconds = asSeconds;\n proto$2.asMinutes = asMinutes;\n proto$2.asHours = asHours;\n proto$2.asDays = asDays;\n proto$2.asWeeks = asWeeks;\n proto$2.asMonths = asMonths;\n proto$2.asQuarters = asQuarters;\n proto$2.asYears = asYears;\n proto$2.valueOf = valueOf$1;\n proto$2._bubble = bubble;\n proto$2.clone = clone$1;\n proto$2.get = get$2;\n proto$2.milliseconds = milliseconds;\n proto$2.seconds = seconds;\n proto$2.minutes = minutes;\n proto$2.hours = hours;\n proto$2.days = days;\n proto$2.weeks = weeks;\n proto$2.months = months;\n proto$2.years = years;\n proto$2.humanize = humanize;\n proto$2.toISOString = toISOString$1;\n proto$2.toString = toISOString$1;\n proto$2.toJSON = toISOString$1;\n proto$2.locale = locale;\n proto$2.localeData = localeData;\n\n proto$2.toIsoString = deprecate(\n 'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n toISOString$1\n );\n proto$2.lang = lang;\n\n // FORMATTING\n\n addFormatToken('X', 0, 0, 'unix');\n addFormatToken('x', 0, 0, 'valueOf');\n\n // PARSING\n\n addRegexToken('x', matchSigned);\n addRegexToken('X', matchTimestamp);\n addParseToken('X', function (input, array, config) {\n config._d = new Date(parseFloat(input) * 1000);\n });\n addParseToken('x', function (input, array, config) {\n config._d = new Date(toInt(input));\n });\n\n //! moment.js\n\n hooks.version = '2.30.1';\n\n setHookCallback(createLocal);\n\n hooks.fn = proto;\n hooks.min = min;\n hooks.max = max;\n hooks.now = now;\n hooks.utc = createUTC;\n hooks.unix = createUnix;\n hooks.months = listMonths;\n hooks.isDate = isDate;\n hooks.locale = getSetGlobalLocale;\n hooks.invalid = createInvalid;\n hooks.duration = createDuration;\n hooks.isMoment = isMoment;\n hooks.weekdays = listWeekdays;\n hooks.parseZone = createInZone;\n hooks.localeData = getLocale;\n hooks.isDuration = isDuration;\n hooks.monthsShort = listMonthsShort;\n hooks.weekdaysMin = listWeekdaysMin;\n hooks.defineLocale = defineLocale;\n hooks.updateLocale = updateLocale;\n hooks.locales = listLocales;\n hooks.weekdaysShort = listWeekdaysShort;\n hooks.normalizeUnits = normalizeUnits;\n hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n hooks.calendarFormat = getCalendarFormat;\n hooks.prototype = proto;\n\n // currently HTML5 input type only supports 24-hour formats\n hooks.HTML5_FMT = {\n DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n TIME: 'HH:mm', // <input type=\"time\" />\n TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n MONTH: 'YYYY-MM', // <input type=\"month\" />\n };\n\n return hooks;\n\n})));\n","/*!\n * XRegExp 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2007-present MIT License\n */\n\n/**\n * XRegExp provides augmented, extensible regular expressions. You get additional regex syntax and\n * flags, beyond what browsers support natively. XRegExp is also a regex utility belt with tools to\n * make your client-side grepping simpler and more powerful, while freeing you from related\n * cross-browser inconsistencies.\n */\n\n// ==--------------------------==\n// Private stuff\n// ==--------------------------==\n\n// Property name used for extended regex instance data\nconst REGEX_DATA = 'xregexp';\n// Optional features that can be installed and uninstalled\nconst features = {\n astral: false,\n namespacing: true\n};\n// Storage for fixed/extended native methods\nconst fixed = {};\n// Storage for regexes cached by `XRegExp.cache`\nlet regexCache = {};\n// Storage for pattern details cached by the `XRegExp` constructor\nlet patternCache = {};\n// Storage for regex syntax tokens added internally or by `XRegExp.addToken`\nconst tokens = [];\n// Token scopes\nconst defaultScope = 'default';\nconst classScope = 'class';\n// Regexes that match native regex syntax, including octals\nconst nativeTokens = {\n // Any native multicharacter token in default scope, or any single character\n 'default': /\\\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\\d*|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|\\(\\?(?:[:=!]|<[=!])|[?*+]\\?|{\\d+(?:,\\d*)?}\\??|[\\s\\S]/,\n // Any native multicharacter token in character class scope, or any single character\n 'class': /\\\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\\dA-Fa-f]{2}|u(?:[\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|c[A-Za-z]|[\\s\\S])|[\\s\\S]/\n};\n// Any backreference or dollar-prefixed character in replacement strings\nconst replacementToken = /\\$(?:\\{([^\\}]+)\\}|<([^>]+)>|(\\d\\d?|[\\s\\S]?))/g;\n// Check for correct `exec` handling of nonparticipating capturing groups\nconst correctExecNpcg = /()??/.exec('')[1] === undefined;\n// Check for ES6 `flags` prop support\nconst hasFlagsProp = /x/.flags !== undefined;\n\nfunction hasNativeFlag(flag) {\n // Can't check based on the presence of properties/getters since browsers might support such\n // properties even when they don't support the corresponding flag in regex construction (tested\n // in Chrome 48, where `'unicode' in /x/` is true but trying to construct a regex with flag `u`\n // throws an error)\n let isSupported = true;\n try {\n // Can't use regex literals for testing even in a `try` because regex literals with\n // unsupported flags cause a compilation error in IE\n new RegExp('', flag);\n\n // Work around a broken/incomplete IE11 polyfill for sticky introduced in core-js 3.6.0\n if (flag === 'y') {\n // Using function to avoid babel transform to regex literal\n const gy = (() => 'gy')();\n const incompleteY = '.a'.replace(new RegExp('a', gy), '.') === '..';\n if (incompleteY) {\n isSupported = false;\n }\n }\n } catch (exception) {\n isSupported = false;\n }\n return isSupported;\n}\n// Check for ES2021 `d` flag support\nconst hasNativeD = hasNativeFlag('d');\n// Check for ES2018 `s` flag support\nconst hasNativeS = hasNativeFlag('s');\n// Check for ES6 `u` flag support\nconst hasNativeU = hasNativeFlag('u');\n// Check for ES6 `y` flag support\nconst hasNativeY = hasNativeFlag('y');\n// Tracker for known flags, including addon flags\nconst registeredFlags = {\n d: hasNativeD,\n g: true,\n i: true,\n m: true,\n s: hasNativeS,\n u: hasNativeU,\n y: hasNativeY\n};\n// Flags to remove when passing to native `RegExp` constructor\nconst nonnativeFlags = hasNativeS ? /[^dgimsuy]+/g : /[^dgimuy]+/g;\n\n/**\n * Attaches extended data and `XRegExp.prototype` properties to a regex object.\n *\n * @private\n * @param {RegExp} regex Regex to augment.\n * @param {Array} captureNames Array with capture names, or `null`.\n * @param {String} xSource XRegExp pattern used to generate `regex`, or `null` if N/A.\n * @param {String} xFlags XRegExp flags used to generate `regex`, or `null` if N/A.\n * @param {Boolean} [isInternalOnly=false] Whether the regex will be used only for internal\n * operations, and never exposed to users. For internal-only regexes, we can improve perf by\n * skipping some operations like attaching `XRegExp.prototype` properties.\n * @returns {!RegExp} Augmented regex.\n */\nfunction augment(regex, captureNames, xSource, xFlags, isInternalOnly) {\n regex[REGEX_DATA] = {\n captureNames\n };\n\n if (isInternalOnly) {\n return regex;\n }\n\n // Can't auto-inherit these since the XRegExp constructor returns a nonprimitive value\n if (regex.__proto__) {\n regex.__proto__ = XRegExp.prototype;\n } else {\n for (const p in XRegExp.prototype) {\n // An `XRegExp.prototype.hasOwnProperty(p)` check wouldn't be worth it here, since this\n // is performance sensitive, and enumerable `Object.prototype` or `RegExp.prototype`\n // extensions exist on `regex.prototype` anyway\n regex[p] = XRegExp.prototype[p];\n }\n }\n\n regex[REGEX_DATA].source = xSource;\n // Emulate the ES6 `flags` prop by ensuring flags are in alphabetical order\n regex[REGEX_DATA].flags = xFlags ? xFlags.split('').sort().join('') : xFlags;\n\n return regex;\n}\n\n/**\n * Removes any duplicate characters from the provided string.\n *\n * @private\n * @param {String} str String to remove duplicate characters from.\n * @returns {string} String with any duplicate characters removed.\n */\nfunction clipDuplicates(str) {\n return str.replace(/([\\s\\S])(?=[\\s\\S]*\\1)/g, '');\n}\n\n/**\n * Copies a regex object while preserving extended data and augmenting with `XRegExp.prototype`\n * properties. The copy has a fresh `lastIndex` property (set to zero). Allows adding and removing\n * flags g and y while copying the regex.\n *\n * @private\n * @param {RegExp} regex Regex to copy.\n * @param {Object} [options] Options object with optional properties:\n * - `addG` {Boolean} Add flag g while copying the regex.\n * - `addY` {Boolean} Add flag y while copying the regex.\n * - `removeG` {Boolean} Remove flag g while copying the regex.\n * - `removeY` {Boolean} Remove flag y while copying the regex.\n * - `isInternalOnly` {Boolean} Whether the copied regex will be used only for internal\n * operations, and never exposed to users. For internal-only regexes, we can improve perf by\n * skipping some operations like attaching `XRegExp.prototype` properties.\n * - `source` {String} Overrides `<regex>.source`, for special cases.\n * @returns {RegExp} Copy of the provided regex, possibly with modified flags.\n */\nfunction copyRegex(regex, options) {\n if (!XRegExp.isRegExp(regex)) {\n throw new TypeError('Type RegExp expected');\n }\n\n const xData = regex[REGEX_DATA] || {};\n let flags = getNativeFlags(regex);\n let flagsToAdd = '';\n let flagsToRemove = '';\n let xregexpSource = null;\n let xregexpFlags = null;\n\n options = options || {};\n\n if (options.removeG) {flagsToRemove += 'g';}\n if (options.removeY) {flagsToRemove += 'y';}\n if (flagsToRemove) {\n flags = flags.replace(new RegExp(`[${flagsToRemove}]+`, 'g'), '');\n }\n\n if (options.addG) {flagsToAdd += 'g';}\n if (options.addY) {flagsToAdd += 'y';}\n if (flagsToAdd) {\n flags = clipDuplicates(flags + flagsToAdd);\n }\n\n if (!options.isInternalOnly) {\n if (xData.source !== undefined) {\n xregexpSource = xData.source;\n }\n // null or undefined; don't want to add to `flags` if the previous value was null, since\n // that indicates we're not tracking original precompilation flags\n if (xData.flags != null) {\n // Flags are only added for non-internal regexes by `XRegExp.globalize`. Flags are never\n // removed for non-internal regexes, so don't need to handle it\n xregexpFlags = flagsToAdd ? clipDuplicates(xData.flags + flagsToAdd) : xData.flags;\n }\n }\n\n // Augment with `XRegExp.prototype` properties, but use the native `RegExp` constructor to avoid\n // searching for special tokens. That would be wrong for regexes constructed by `RegExp`, and\n // unnecessary for regexes constructed by `XRegExp` because the regex has already undergone the\n // translation to native regex syntax\n regex = augment(\n new RegExp(options.source || regex.source, flags),\n hasNamedCapture(regex) ? xData.captureNames.slice(0) : null,\n xregexpSource,\n xregexpFlags,\n options.isInternalOnly\n );\n\n return regex;\n}\n\n/**\n * Converts hexadecimal to decimal.\n *\n * @private\n * @param {String} hex\n * @returns {number}\n */\nfunction dec(hex) {\n return parseInt(hex, 16);\n}\n\n/**\n * Returns a pattern that can be used in a native RegExp in place of an ignorable token such as an\n * inline comment or whitespace with flag x. This is used directly as a token handler function\n * passed to `XRegExp.addToken`.\n *\n * @private\n * @param {String} match Match arg of `XRegExp.addToken` handler\n * @param {String} scope Scope arg of `XRegExp.addToken` handler\n * @param {String} flags Flags arg of `XRegExp.addToken` handler\n * @returns {string} Either '' or '(?:)', depending on which is needed in the context of the match.\n */\nfunction getContextualTokenSeparator(match, scope, flags) {\n const matchEndPos = match.index + match[0].length;\n const precedingChar = match.input[match.index - 1];\n const followingChar = match.input[matchEndPos];\n if (\n // No need to separate tokens if at the beginning or end of a group, before or after a\n // group, or before or after a `|`\n /^[()|]$/.test(precedingChar) ||\n /^[()|]$/.test(followingChar) ||\n // No need to separate tokens if at the beginning or end of the pattern\n match.index === 0 ||\n matchEndPos === match.input.length ||\n // No need to separate tokens if at the beginning of a noncapturing group or lookaround.\n // Looks only at the last 4 chars (at most) for perf when constructing long regexes.\n /\\(\\?(?:[:=!]|<[=!])$/.test(match.input.substring(match.index - 4, match.index)) ||\n // Avoid separating tokens when the following token is a quantifier\n isQuantifierNext(match.input, matchEndPos, flags)\n ) {\n return '';\n }\n // Keep tokens separated. This avoids e.g. inadvertedly changing `\\1 1` or `\\1(?#)1` to `\\11`.\n // This also ensures all tokens remain as discrete atoms, e.g. it prevents converting the\n // syntax error `(? :` into `(?:`.\n return '(?:)';\n}\n\n/**\n * Returns native `RegExp` flags used by a regex object.\n *\n * @private\n * @param {RegExp} regex Regex to check.\n * @returns {string} Native flags in use.\n */\nfunction getNativeFlags(regex) {\n return hasFlagsProp ?\n regex.flags :\n // Explicitly using `RegExp.prototype.toString` (rather than e.g. `String` or concatenation\n // with an empty string) allows this to continue working predictably when\n // `XRegExp.proptotype.toString` is overridden\n /\\/([a-z]*)$/i.exec(RegExp.prototype.toString.call(regex))[1];\n}\n\n/**\n * Determines whether a regex has extended instance data used to track capture names.\n *\n * @private\n * @param {RegExp} regex Regex to check.\n * @returns {boolean} Whether the regex uses named capture.\n */\nfunction hasNamedCapture(regex) {\n return !!(regex[REGEX_DATA] && regex[REGEX_DATA].captureNames);\n}\n\n/**\n * Converts decimal to hexadecimal.\n *\n * @private\n * @param {Number|String} dec\n * @returns {string}\n */\nfunction hex(dec) {\n return parseInt(dec, 10).toString(16);\n}\n\n/**\n * Checks whether the next nonignorable token after the specified position is a quantifier.\n *\n * @private\n * @param {String} pattern Pattern to search within.\n * @param {Number} pos Index in `pattern` to search at.\n * @param {String} flags Flags used by the pattern.\n * @returns {Boolean} Whether the next nonignorable token is a quantifier.\n */\nfunction isQuantifierNext(pattern, pos, flags) {\n const inlineCommentPattern = '\\\\(\\\\?#[^)]*\\\\)';\n const lineCommentPattern = '#[^#\\\\n]*';\n const quantifierPattern = '[?*+]|{\\\\d+(?:,\\\\d*)?}';\n const regex = flags.includes('x') ?\n // Ignore any leading whitespace, line comments, and inline comments\n new RegExp(`^(?:\\\\s|${lineCommentPattern}|${inlineCommentPattern})*(?:${quantifierPattern})`) :\n // Ignore any leading inline comments\n new RegExp(`^(?:${inlineCommentPattern})*(?:${quantifierPattern})`);\n return regex.test(pattern.slice(pos));\n}\n\n/**\n * Determines whether a value is of the specified type, by resolving its internal [[Class]].\n *\n * @private\n * @param {*} value Object to check.\n * @param {String} type Type to check for, in TitleCase.\n * @returns {boolean} Whether the object matches the type.\n */\nfunction isType(value, type) {\n return Object.prototype.toString.call(value) === `[object ${type}]`;\n}\n\n/**\n * Returns the object, or throws an error if it is `null` or `undefined`. This is used to follow\n * the ES5 abstract operation `ToObject`.\n *\n * @private\n * @param {*} value Object to check and return.\n * @returns {*} The provided object.\n */\nfunction nullThrows(value) {\n // null or undefined\n if (value == null) {\n throw new TypeError('Cannot convert null or undefined to object');\n }\n\n return value;\n}\n\n/**\n * Adds leading zeros if shorter than four characters. Used for fixed-length hexadecimal values.\n *\n * @private\n * @param {String} str\n * @returns {string}\n */\nfunction pad4(str) {\n while (str.length < 4) {\n str = `0${str}`;\n }\n return str;\n}\n\n/**\n * Checks for flag-related errors, and strips/applies flags in a leading mode modifier. Offloads\n * the flag preparation logic from the `XRegExp` constructor.\n *\n * @private\n * @param {String} pattern Regex pattern, possibly with a leading mode modifier.\n * @param {String} flags Any combination of flags.\n * @returns {!Object} Object with properties `pattern` and `flags`.\n */\nfunction prepareFlags(pattern, flags) {\n // Recent browsers throw on duplicate flags, so copy this behavior for nonnative flags\n if (clipDuplicates(flags) !== flags) {\n throw new SyntaxError(`Invalid duplicate regex flag ${flags}`);\n }\n\n // Strip and apply a leading mode modifier with any combination of flags except `dgy`\n pattern = pattern.replace(/^\\(\\?([\\w$]+)\\)/, ($0, $1) => {\n if (/[dgy]/.test($1)) {\n throw new SyntaxError(`Cannot use flags dgy in mode modifier ${$0}`);\n }\n // Allow duplicate flags within the mode modifier\n flags = clipDuplicates(flags + $1);\n return '';\n });\n\n // Throw on unknown native or nonnative flags\n for (const flag of flags) {\n if (!registeredFlags[flag]) {\n throw new SyntaxError(`Unknown regex flag ${flag}`);\n }\n }\n\n return {\n pattern,\n flags\n };\n}\n\n/**\n * Prepares an options object from the given value.\n *\n * @private\n * @param {String|Object} value Value to convert to an options object.\n * @returns {Object} Options object.\n */\nfunction prepareOptions(value) {\n const options = {};\n\n if (isType(value, 'String')) {\n XRegExp.forEach(value, /[^\\s,]+/, (match) => {\n options[match] = true;\n });\n\n return options;\n }\n\n return value;\n}\n\n/**\n * Registers a flag so it doesn't throw an 'unknown flag' error.\n *\n * @private\n * @param {String} flag Single-character flag to register.\n */\nfunction registerFlag(flag) {\n if (!/^[\\w$]$/.test(flag)) {\n throw new Error('Flag must be a single character A-Za-z0-9_$');\n }\n\n registeredFlags[flag] = true;\n}\n\n/**\n * Runs built-in and custom regex syntax tokens in reverse insertion order at the specified\n * position, until a match is found.\n *\n * @private\n * @param {String} pattern Original pattern from which an XRegExp object is being built.\n * @param {String} flags Flags being used to construct the regex.\n * @param {Number} pos Position to search for tokens within `pattern`.\n * @param {Number} scope Regex scope to apply: 'default' or 'class'.\n * @param {Object} context Context object to use for token handler functions.\n * @returns {Object} Object with properties `matchLength`, `output`, and `reparse`; or `null`.\n */\nfunction runTokens(pattern, flags, pos, scope, context) {\n let i = tokens.length;\n const leadChar = pattern[pos];\n let result = null;\n let match;\n let t;\n\n // Run in reverse insertion order\n while (i--) {\n t = tokens[i];\n if (\n (t.leadChar && t.leadChar !== leadChar) ||\n (t.scope !== scope && t.scope !== 'all') ||\n (t.flag && !flags.includes(t.flag))\n ) {\n continue;\n }\n\n match = XRegExp.exec(pattern, t.regex, pos, 'sticky');\n if (match) {\n result = {\n matchLength: match[0].length,\n output: t.handler.call(context, match, scope, flags),\n reparse: t.reparse\n };\n // Finished with token tests\n break;\n }\n }\n\n return result;\n}\n\n/**\n * Enables or disables implicit astral mode opt-in. When enabled, flag A is automatically added to\n * all new regexes created by XRegExp. This causes an error to be thrown when creating regexes if\n * the Unicode Base addon is not available, since flag A is registered by that addon.\n *\n * @private\n * @param {Boolean} on `true` to enable; `false` to disable.\n */\nfunction setAstral(on) {\n features.astral = on;\n}\n\n/**\n * Adds named capture groups to the `groups` property of match arrays. See here for details:\n * https://github.com/tc39/proposal-regexp-named-groups\n *\n * @private\n * @param {Boolean} on `true` to enable; `false` to disable.\n */\nfunction setNamespacing(on) {\n features.namespacing = on;\n}\n\n// ==--------------------------==\n// Constructor\n// ==--------------------------==\n\n/**\n * Creates an extended regular expression object for matching text with a pattern. Differs from a\n * native regular expression in that additional syntax and flags are supported. The returned object\n * is in fact a native `RegExp` and works with all native methods.\n *\n * @class XRegExp\n * @constructor\n * @param {String|RegExp} pattern Regex pattern string, or an existing regex object to copy.\n * @param {String} [flags] Any combination of flags.\n * Native flags:\n * - `d` - indices for capturing groups (ES2021)\n * - `g` - global\n * - `i` - ignore case\n * - `m` - multiline anchors\n * - `u` - unicode (ES6)\n * - `y` - sticky (Firefox 3+, ES6)\n * Additional XRegExp flags:\n * - `n` - named capture only\n * - `s` - dot matches all (aka singleline) - works even when not natively supported\n * - `x` - free-spacing and line comments (aka extended)\n * - `A` - 21-bit Unicode properties (aka astral) - requires the Unicode Base addon\n * Flags cannot be provided when constructing one `RegExp` from another.\n * @returns {RegExp} Extended regular expression object.\n * @example\n *\n * // With named capture and flag x\n * XRegExp(`(?<year> [0-9]{4} ) -? # year\n * (?<month> [0-9]{2} ) -? # month\n * (?<day> [0-9]{2} ) # day`, 'x');\n *\n * // Providing a regex object copies it. Native regexes are recompiled using native (not XRegExp)\n * // syntax. Copies maintain extended data, are augmented with `XRegExp.prototype` properties, and\n * // have fresh `lastIndex` properties (set to zero).\n * XRegExp(/regex/);\n */\nfunction XRegExp(pattern, flags) {\n if (XRegExp.isRegExp(pattern)) {\n if (flags !== undefined) {\n throw new TypeError('Cannot supply flags when copying a RegExp');\n }\n return copyRegex(pattern);\n }\n\n // Copy the argument behavior of `RegExp`\n pattern = pattern === undefined ? '' : String(pattern);\n flags = flags === undefined ? '' : String(flags);\n\n if (XRegExp.isInstalled('astral') && !flags.includes('A')) {\n // This causes an error to be thrown if the Unicode Base addon is not available\n flags += 'A';\n }\n\n if (!patternCache[pattern]) {\n patternCache[pattern] = {};\n }\n\n if (!patternCache[pattern][flags]) {\n const context = {\n hasNamedCapture: false,\n captureNames: []\n };\n let scope = defaultScope;\n let output = '';\n let pos = 0;\n let result;\n\n // Check for flag-related errors, and strip/apply flags in a leading mode modifier\n const applied = prepareFlags(pattern, flags);\n let appliedPattern = applied.pattern;\n const appliedFlags = applied.flags;\n\n // Use XRegExp's tokens to translate the pattern to a native regex pattern.\n // `appliedPattern.length` may change on each iteration if tokens use `reparse`\n while (pos < appliedPattern.length) {\n do {\n // Check for custom tokens at the current position\n result = runTokens(appliedPattern, appliedFlags, pos, scope, context);\n // If the matched token used the `reparse` option, splice its output into the\n // pattern before running tokens again at the same position\n if (result && result.reparse) {\n appliedPattern = appliedPattern.slice(0, pos) +\n result.output +\n appliedPattern.slice(pos + result.matchLength);\n }\n } while (result && result.reparse);\n\n if (result) {\n output += result.output;\n pos += (result.matchLength || 1);\n } else {\n // Get the native token at the current position\n const [token] = XRegExp.exec(appliedPattern, nativeTokens[scope], pos, 'sticky');\n output += token;\n pos += token.length;\n if (token === '[' && scope === defaultScope) {\n scope = classScope;\n } else if (token === ']' && scope === classScope) {\n scope = defaultScope;\n }\n }\n }\n\n patternCache[pattern][flags] = {\n // Use basic cleanup to collapse repeated empty groups like `(?:)(?:)` to `(?:)`. Empty\n // groups are sometimes inserted during regex transpilation in order to keep tokens\n // separated. However, more than one empty group in a row is never needed.\n pattern: output.replace(/(?:\\(\\?:\\))+/g, '(?:)'),\n // Strip all but native flags\n flags: appliedFlags.replace(nonnativeFlags, ''),\n // `context.captureNames` has an item for each capturing group, even if unnamed\n captures: context.hasNamedCapture ? context.captureNames : null\n };\n }\n\n const generated = patternCache[pattern][flags];\n return augment(\n new RegExp(generated.pattern, generated.flags),\n generated.captures,\n pattern,\n flags\n );\n}\n\n// Add `RegExp.prototype` to the prototype chain\nXRegExp.prototype = new RegExp();\n\n// ==--------------------------==\n// Public properties\n// ==--------------------------==\n\n/**\n * The XRegExp version number as a string containing three dot-separated parts. For example,\n * '2.0.0-beta-3'.\n *\n * @static\n * @memberOf XRegExp\n * @type String\n */\nXRegExp.version = '5.1.1';\n\n// ==--------------------------==\n// Public methods\n// ==--------------------------==\n\n// Intentionally undocumented; used in tests and addons\nXRegExp._clipDuplicates = clipDuplicates;\nXRegExp._hasNativeFlag = hasNativeFlag;\nXRegExp._dec = dec;\nXRegExp._hex = hex;\nXRegExp._pad4 = pad4;\n\n/**\n * Extends XRegExp syntax and allows custom flags. This is used internally and can be used to\n * create XRegExp addons. If more than one token can match the same string, the last added wins.\n *\n * @memberOf XRegExp\n * @param {RegExp} regex Regex object that matches the new token.\n * @param {Function} handler Function that returns a new pattern string (using native regex syntax)\n * to replace the matched token within all future XRegExp regexes. Has access to persistent\n * properties of the regex being built, through `this`. Invoked with three arguments:\n * - The match array, with named backreference properties.\n * - The regex scope where the match was found: 'default' or 'class'.\n * - The flags used by the regex, including any flags in a leading mode modifier.\n * The handler function becomes part of the XRegExp construction process, so be careful not to\n * construct XRegExps within the function or you will trigger infinite recursion.\n * @param {Object} [options] Options object with optional properties:\n * - `scope` {String} Scope where the token applies: 'default', 'class', or 'all'.\n * - `flag` {String} Single-character flag that triggers the token. This also registers the\n * flag, which prevents XRegExp from throwing an 'unknown flag' error when the flag is used.\n * - `optionalFlags` {String} Any custom flags checked for within the token `handler` that are\n * not required to trigger the token. This registers the flags, to prevent XRegExp from\n * throwing an 'unknown flag' error when any of the flags are used.\n * - `reparse` {Boolean} Whether the `handler` function's output should not be treated as\n * final, and instead be reparseable by other tokens (including the current token). Allows\n * token chaining or deferring.\n * - `leadChar` {String} Single character that occurs at the beginning of any successful match\n * of the token (not always applicable). This doesn't change the behavior of the token unless\n * you provide an erroneous value. However, providing it can increase the token's performance\n * since the token can be skipped at any positions where this character doesn't appear.\n * @example\n *\n * // Basic usage: Add \\a for the ALERT control code\n * XRegExp.addToken(\n * /\\\\a/,\n * () => '\\\\x07',\n * {scope: 'all'}\n * );\n * XRegExp('\\\\a[\\\\a-\\\\n]+').test('\\x07\\n\\x07'); // -> true\n *\n * // Add the U (ungreedy) flag from PCRE and RE2, which reverses greedy and lazy quantifiers.\n * // Since `scope` is not specified, it uses 'default' (i.e., transformations apply outside of\n * // character classes only)\n * XRegExp.addToken(\n * /([?*+]|{\\d+(?:,\\d*)?})(\\??)/,\n * (match) => `${match[1]}${match[2] ? '' : '?'}`,\n * {flag: 'U'}\n * );\n * XRegExp('a+', 'U').exec('aaa')[0]; // -> 'a'\n * XRegExp('a+?', 'U').exec('aaa')[0]; // -> 'aaa'\n */\nXRegExp.addToken = (regex, handler, options) => {\n options = options || {};\n let {optionalFlags} = options;\n\n if (options.flag) {\n registerFlag(options.flag);\n }\n\n if (optionalFlags) {\n optionalFlags = optionalFlags.split('');\n for (const flag of optionalFlags) {\n registerFlag(flag);\n }\n }\n\n // Add to the private list of syntax tokens\n tokens.push({\n regex: copyRegex(regex, {\n addG: true,\n addY: hasNativeY,\n isInternalOnly: true\n }),\n handler,\n scope: options.scope || defaultScope,\n flag: options.flag,\n reparse: options.reparse,\n leadChar: options.leadChar\n });\n\n // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and flags\n // might now produce different results\n XRegExp.cache.flush('patterns');\n};\n\n/**\n * Caches and returns the result of calling `XRegExp(pattern, flags)`. On any subsequent call with\n * the same pattern and flag combination, the cached copy of the regex is returned.\n *\n * @memberOf XRegExp\n * @param {String} pattern Regex pattern string.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Cached XRegExp object.\n * @example\n *\n * let match;\n * while (match = XRegExp.cache('.', 'gs').exec('abc')) {\n * // The regex is compiled once only\n * }\n */\nXRegExp.cache = (pattern, flags) => {\n if (!regexCache[pattern]) {\n regexCache[pattern] = {};\n }\n return regexCache[pattern][flags] || (\n regexCache[pattern][flags] = XRegExp(pattern, flags)\n );\n};\n\n// Intentionally undocumented; used in tests\nXRegExp.cache.flush = (cacheName) => {\n if (cacheName === 'patterns') {\n // Flush the pattern cache used by the `XRegExp` constructor\n patternCache = {};\n } else {\n // Flush the regex cache populated by `XRegExp.cache`\n regexCache = {};\n }\n};\n\n/**\n * Escapes any regular expression metacharacters, for use when matching literal strings. The result\n * can safely be used at any position within a regex that uses any flags.\n *\n * @memberOf XRegExp\n * @param {String} str String to escape.\n * @returns {string} String with regex metacharacters escaped.\n * @example\n *\n * XRegExp.escape('Escaped? <.>');\n * // -> 'Escaped\\?\\u0020<\\.>'\n */\n// Following are the contexts where each metacharacter needs to be escaped because it would\n// otherwise have a special meaning, change the meaning of surrounding characters, or cause an\n// error. Context 'default' means outside character classes only.\n// - `\\` - context: all\n// - `[()*+?.$|` - context: default\n// - `]` - context: default with flag u or if forming the end of a character class\n// - `{}` - context: default with flag u or if part of a valid/complete quantifier pattern\n// - `,` - context: default if in a position that causes an unescaped `{` to turn into a quantifier.\n// Ex: `/^a{1\\,2}$/` matches `'a{1,2}'`, but `/^a{1,2}$/` matches `'a'` or `'aa'`\n// - `#` and <whitespace> - context: default with flag x\n// - `^` - context: default, and context: class if it's the first character in the class\n// - `-` - context: class if part of a valid character class range\nXRegExp.escape = (str) => String(nullThrows(str)).\n // Escape most special chars with a backslash\n replace(/[\\\\\\[\\]{}()*+?.^$|]/g, '\\\\$&').\n // Convert to \\uNNNN for special chars that can't be escaped when used with ES6 flag `u`\n replace(/[\\s#\\-,]/g, (match) => `\\\\u${pad4(hex(match.charCodeAt(0)))}`);\n\n/**\n * Executes a regex search in a specified string. Returns a match array or `null`. If the provided\n * regex uses named capture, named capture properties are included on the match array's `groups`\n * property. Optional `pos` and `sticky` arguments specify the search start position, and whether\n * the match must start at the specified position only. The `lastIndex` property of the provided\n * regex is not used, but is updated for compatibility. Also fixes browser bugs compared to the\n * native `RegExp.prototype.exec` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Number} [pos=0] Zero-based index at which to start the search.\n * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position\n * only. The string `'sticky'` is accepted as an alternative to `true`.\n * @returns {Array} Match array with named capture properties on the `groups` object, or `null`. If\n * the `namespacing` feature is off, named capture properties are directly on the match array.\n * @example\n *\n * // Basic use, with named capturing group\n * let match = XRegExp.exec('U+2620', XRegExp('U\\\\+(?<hex>[0-9A-F]{4})'));\n * match.groups.hex; // -> '2620'\n *\n * // With pos and sticky, in a loop\n * let pos = 3, result = [], match;\n * while (match = XRegExp.exec('<1><2><3><4>5<6>', /<(\\d)>/, pos, 'sticky')) {\n * result.push(match[1]);\n * pos = match.index + match[0].length;\n * }\n * // result -> ['2', '3', '4']\n */\nXRegExp.exec = (str, regex, pos, sticky) => {\n let cacheKey = 'g';\n let addY = false;\n let fakeY = false;\n let match;\n\n addY = hasNativeY && !!(sticky || (regex.sticky && sticky !== false));\n if (addY) {\n cacheKey += 'y';\n } else if (sticky) {\n // Simulate sticky matching by appending an empty capture to the original regex. The\n // resulting regex will succeed no matter what at the current index (set with `lastIndex`),\n // and will not search the rest of the subject string. We'll know that the original regex\n // has failed if that last capture is `''` rather than `undefined` (i.e., if that last\n // capture participated in the match).\n fakeY = true;\n cacheKey += 'FakeY';\n }\n\n regex[REGEX_DATA] = regex[REGEX_DATA] || {};\n\n // Shares cached copies with `XRegExp.match`/`replace`\n const r2 = regex[REGEX_DATA][cacheKey] || (\n regex[REGEX_DATA][cacheKey] = copyRegex(regex, {\n addG: true,\n addY,\n source: fakeY ? `${regex.source}|()` : undefined,\n removeY: sticky === false,\n isInternalOnly: true\n })\n );\n\n pos = pos || 0;\n r2.lastIndex = pos;\n\n // Fixed `exec` required for `lastIndex` fix, named backreferences, etc.\n match = fixed.exec.call(r2, str);\n\n // Get rid of the capture added by the pseudo-sticky matcher if needed. An empty string means\n // the original regexp failed (see above).\n if (fakeY && match && match.pop() === '') {\n match = null;\n }\n\n if (regex.global) {\n regex.lastIndex = match ? r2.lastIndex : 0;\n }\n\n return match;\n};\n\n/**\n * Executes a provided function once per regex match. Searches always start at the beginning of the\n * string and continue until the end, regardless of the state of the regex's `global` property and\n * initial `lastIndex`.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Function} callback Function to execute for each match. Invoked with four arguments:\n * - The match array, with named backreference properties.\n * - The zero-based match index.\n * - The string being traversed.\n * - The regex object being used to traverse the string.\n * @example\n *\n * // Extracts every other digit from a string\n * const evens = [];\n * XRegExp.forEach('1a2345', /\\d/, (match, i) => {\n * if (i % 2) evens.push(+match[0]);\n * });\n * // evens -> [2, 4]\n */\nXRegExp.forEach = (str, regex, callback) => {\n let pos = 0;\n let i = -1;\n let match;\n\n while ((match = XRegExp.exec(str, regex, pos))) {\n // Because `regex` is provided to `callback`, the function could use the deprecated/\n // nonstandard `RegExp.prototype.compile` to mutate the regex. However, since `XRegExp.exec`\n // doesn't use `lastIndex` to set the search position, this can't lead to an infinite loop,\n // at least. Actually, because of the way `XRegExp.exec` caches globalized versions of\n // regexes, mutating the regex will not have any effect on the iteration or matched strings,\n // which is a nice side effect that brings extra safety.\n callback(match, ++i, str, regex);\n\n pos = match.index + (match[0].length || 1);\n }\n};\n\n/**\n * Copies a regex object and adds flag `g`. The copy maintains extended data, is augmented with\n * `XRegExp.prototype` properties, and has a fresh `lastIndex` property (set to zero). Native\n * regexes are not recompiled using XRegExp syntax.\n *\n * @memberOf XRegExp\n * @param {RegExp} regex Regex to globalize.\n * @returns {RegExp} Copy of the provided regex with flag `g` added.\n * @example\n *\n * const globalCopy = XRegExp.globalize(/regex/);\n * globalCopy.global; // -> true\n */\nXRegExp.globalize = (regex) => copyRegex(regex, {addG: true});\n\n/**\n * Installs optional features according to the specified options. Can be undone using\n * `XRegExp.uninstall`.\n *\n * @memberOf XRegExp\n * @param {Object|String} options Options object or string.\n * @example\n *\n * // With an options object\n * XRegExp.install({\n * // Enables support for astral code points in Unicode addons (implicitly sets flag A)\n * astral: true,\n *\n * // Adds named capture groups to the `groups` property of matches\n * namespacing: true\n * });\n *\n * // With an options string\n * XRegExp.install('astral namespacing');\n */\nXRegExp.install = (options) => {\n options = prepareOptions(options);\n\n if (!features.astral && options.astral) {\n setAstral(true);\n }\n\n if (!features.namespacing && options.namespacing) {\n setNamespacing(true);\n }\n};\n\n/**\n * Checks whether an individual optional feature is installed.\n *\n * @memberOf XRegExp\n * @param {String} feature Name of the feature to check. One of:\n * - `astral`\n * - `namespacing`\n * @returns {boolean} Whether the feature is installed.\n * @example\n *\n * XRegExp.isInstalled('astral');\n */\nXRegExp.isInstalled = (feature) => !!(features[feature]);\n\n/**\n * Returns `true` if an object is a regex; `false` if it isn't. This works correctly for regexes\n * created in another frame, when `instanceof` and `constructor` checks would fail.\n *\n * @memberOf XRegExp\n * @param {*} value Object to check.\n * @returns {boolean} Whether the object is a `RegExp` object.\n * @example\n *\n * XRegExp.isRegExp('string'); // -> false\n * XRegExp.isRegExp(/regex/i); // -> true\n * XRegExp.isRegExp(RegExp('^', 'm')); // -> true\n * XRegExp.isRegExp(XRegExp('(?s).')); // -> true\n */\nXRegExp.isRegExp = (value) => Object.prototype.toString.call(value) === '[object RegExp]';\n// Same as `isType(value, 'RegExp')`, but avoiding that function call here for perf since\n// `isRegExp` is used heavily by internals including regex construction\n\n/**\n * Returns the first matched string, or in global mode, an array containing all matched strings.\n * This is essentially a more convenient re-implementation of `String.prototype.match` that gives\n * the result types you actually want (string instead of `exec`-style array in match-first mode,\n * and an empty array instead of `null` when no matches are found in match-all mode). It also lets\n * you override flag g and ignore `lastIndex`, and fixes browser bugs.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {String} [scope='one'] Use 'one' to return the first match as a string. Use 'all' to\n * return an array of all matched strings. If not explicitly specified and `regex` uses flag g,\n * `scope` is 'all'.\n * @returns {String|Array} In match-first mode: First match as a string, or `null`. In match-all\n * mode: Array of all matched strings, or an empty array.\n * @example\n *\n * // Match first\n * XRegExp.match('abc', /\\w/); // -> 'a'\n * XRegExp.match('abc', /\\w/g, 'one'); // -> 'a'\n * XRegExp.match('abc', /x/g, 'one'); // -> null\n *\n * // Match all\n * XRegExp.match('abc', /\\w/g); // -> ['a', 'b', 'c']\n * XRegExp.match('abc', /\\w/, 'all'); // -> ['a', 'b', 'c']\n * XRegExp.match('abc', /x/, 'all'); // -> []\n */\nXRegExp.match = (str, regex, scope) => {\n const global = (regex.global && scope !== 'one') || scope === 'all';\n const cacheKey = ((global ? 'g' : '') + (regex.sticky ? 'y' : '')) || 'noGY';\n\n regex[REGEX_DATA] = regex[REGEX_DATA] || {};\n\n // Shares cached copies with `XRegExp.exec`/`replace`\n const r2 = regex[REGEX_DATA][cacheKey] || (\n regex[REGEX_DATA][cacheKey] = copyRegex(regex, {\n addG: !!global,\n removeG: scope === 'one',\n isInternalOnly: true\n })\n );\n\n const result = String(nullThrows(str)).match(r2);\n\n if (regex.global) {\n regex.lastIndex = (\n (scope === 'one' && result) ?\n // Can't use `r2.lastIndex` since `r2` is nonglobal in this case\n (result.index + result[0].length) : 0\n );\n }\n\n return global ? (result || []) : (result && result[0]);\n};\n\n/**\n * Retrieves the matches from searching a string using a chain of regexes that successively search\n * within previous matches. The provided `chain` array can contain regexes and or objects with\n * `regex` and `backref` properties. When a backreference is specified, the named or numbered\n * backreference is passed forward to the next regex or returned.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {Array} chain Regexes that each search for matches within preceding results.\n * @returns {Array} Matches by the last regex in the chain, or an empty array.\n * @example\n *\n * // Basic usage; matches numbers within <b> tags\n * XRegExp.matchChain('1 <b>2</b> 3 <b>4 a 56</b>', [\n * XRegExp('(?is)<b>.*?</b>'),\n * /\\d+/\n * ]);\n * // -> ['2', '4', '56']\n *\n * // Passing forward and returning specific backreferences\n * const html = `<a href=\"http://xregexp.com/api/\">XRegExp</a>\n * <a href=\"http://www.google.com/\">Google</a>`;\n * XRegExp.matchChain(html, [\n * {regex: /<a href=\"([^\"]+)\">/i, backref: 1},\n * {regex: XRegExp('(?i)^https?://(?<domain>[^/?#]+)'), backref: 'domain'}\n * ]);\n * // -> ['xregexp.com', 'www.google.com']\n */\nXRegExp.matchChain = (str, chain) => (function recurseChain(values, level) {\n const item = chain[level].regex ? chain[level] : {regex: chain[level]};\n const matches = [];\n\n function addMatch(match) {\n if (item.backref) {\n const ERR_UNDEFINED_GROUP = `Backreference to undefined group: ${item.backref}`;\n const isNamedBackref = isNaN(item.backref);\n\n if (isNamedBackref && XRegExp.isInstalled('namespacing')) {\n // `groups` has `null` as prototype, so using `in` instead of `hasOwnProperty`\n if (!(match.groups && item.backref in match.groups)) {\n throw new ReferenceError(ERR_UNDEFINED_GROUP);\n }\n } else if (!match.hasOwnProperty(item.backref)) {\n throw new ReferenceError(ERR_UNDEFINED_GROUP);\n }\n\n const backrefValue = isNamedBackref && XRegExp.isInstalled('namespacing') ?\n match.groups[item.backref] :\n match[item.backref];\n\n matches.push(backrefValue || '');\n } else {\n matches.push(match[0]);\n }\n }\n\n for (const value of values) {\n XRegExp.forEach(value, item.regex, addMatch);\n }\n\n return ((level === chain.length - 1) || !matches.length) ?\n matches :\n recurseChain(matches, level + 1);\n}([str], 0));\n\n/**\n * Returns a new string with one or all matches of a pattern replaced. The pattern can be a string\n * or regex, and the replacement can be a string or a function to be called for each match. To\n * perform a global search and replace, use the optional `scope` argument or include flag g if using\n * a regex. Replacement strings can use `$<n>` or `${n}` for named and numbered backreferences.\n * Replacement functions can use named backreferences via the last argument. Also fixes browser bugs\n * compared to the native `String.prototype.replace` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp|String} search Search pattern to be replaced.\n * @param {String|Function} replacement Replacement string or a function invoked to create it.\n * Replacement strings can include special replacement syntax:\n * - $$ - Inserts a literal $ character.\n * - $&, $0 - Inserts the matched substring.\n * - $` - Inserts the string that precedes the matched substring (left context).\n * - $' - Inserts the string that follows the matched substring (right context).\n * - $n, $nn - Where n/nn are digits referencing an existing capturing group, inserts\n * backreference n/nn.\n * - $<n>, ${n} - Where n is a name or any number of digits that reference an existing capturing\n * group, inserts backreference n.\n * Replacement functions are invoked with three or more arguments:\n * - args[0] - The matched substring (corresponds to `$&` above). If the `namespacing` feature\n * is off, named backreferences are accessible as properties of this argument.\n * - args[1..n] - One argument for each backreference (corresponding to `$1`, `$2`, etc. above).\n * If the regex has no capturing groups, no arguments appear in this position.\n * - args[n+1] - The zero-based index of the match within the entire search string.\n * - args[n+2] - The total string being searched.\n * - args[n+3] - If the the search pattern is a regex with named capturing groups, the last\n * argument is the groups object. Its keys are the backreference names and its values are the\n * backreference values. If the `namespacing` feature is off, this argument is not present.\n * @param {String} [scope] Use 'one' to replace the first match only, or 'all'. Defaults to 'one'.\n * Defaults to 'all' if using a regex with flag g.\n * @returns {String} New string with one or all matches replaced.\n * @example\n *\n * // Regex search, using named backreferences in replacement string\n * const name = XRegExp('(?<first>\\\\w+) (?<last>\\\\w+)');\n * XRegExp.replace('John Smith', name, '$<last>, $<first>');\n * // -> 'Smith, John'\n *\n * // Regex search, using named backreferences in replacement function\n * XRegExp.replace('John Smith', name, (...args) => {\n * const groups = args[args.length - 1];\n * return `${groups.last}, ${groups.first}`;\n * });\n * // -> 'Smith, John'\n *\n * // String search, with replace-all\n * XRegExp.replace('RegExp builds RegExps', 'RegExp', 'XRegExp', 'all');\n * // -> 'XRegExp builds XRegExps'\n */\nXRegExp.replace = (str, search, replacement, scope) => {\n const isRegex = XRegExp.isRegExp(search);\n const global = (search.global && scope !== 'one') || scope === 'all';\n const cacheKey = ((global ? 'g' : '') + (search.sticky ? 'y' : '')) || 'noGY';\n let s2 = search;\n\n if (isRegex) {\n search[REGEX_DATA] = search[REGEX_DATA] || {};\n\n // Shares cached copies with `XRegExp.exec`/`match`. Since a copy is used, `search`'s\n // `lastIndex` isn't updated *during* replacement iterations\n s2 = search[REGEX_DATA][cacheKey] || (\n search[REGEX_DATA][cacheKey] = copyRegex(search, {\n addG: !!global,\n removeG: scope === 'one',\n isInternalOnly: true\n })\n );\n } else if (global) {\n s2 = new RegExp(XRegExp.escape(String(search)), 'g');\n }\n\n // Fixed `replace` required for named backreferences, etc.\n const result = fixed.replace.call(nullThrows(str), s2, replacement);\n\n if (isRegex && search.global) {\n // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)\n search.lastIndex = 0;\n }\n\n return result;\n};\n\n/**\n * Performs batch processing of string replacements. Used like `XRegExp.replace`, but accepts an\n * array of replacement details. Later replacements operate on the output of earlier replacements.\n * Replacement details are accepted as an array with a regex or string to search for, the\n * replacement string or function, and an optional scope of 'one' or 'all'. Uses the XRegExp\n * replacement text syntax, which supports named backreference properties via `$<name>` or\n * `${name}`.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {Array} replacements Array of replacement detail arrays.\n * @returns {String} New string with all replacements.\n * @example\n *\n * str = XRegExp.replaceEach(str, [\n * [XRegExp('(?<name>a)'), 'z$<name>'],\n * [/b/gi, 'y'],\n * [/c/g, 'x', 'one'], // scope 'one' overrides /g\n * [/d/, 'w', 'all'], // scope 'all' overrides lack of /g\n * ['e', 'v', 'all'], // scope 'all' allows replace-all for strings\n * [/f/g, (match) => match.toUpperCase()]\n * ]);\n */\nXRegExp.replaceEach = (str, replacements) => {\n for (const r of replacements) {\n str = XRegExp.replace(str, r[0], r[1], r[2]);\n }\n\n return str;\n};\n\n/**\n * Splits a string into an array of strings using a regex or string separator. Matches of the\n * separator are not included in the result array. However, if `separator` is a regex that contains\n * capturing groups, backreferences are spliced into the result each time `separator` is matched.\n * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably\n * cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to split.\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {Array} Array of substrings.\n * @example\n *\n * // Basic use\n * XRegExp.split('a b c', ' ');\n * // -> ['a', 'b', 'c']\n *\n * // With limit\n * XRegExp.split('a b c', ' ', 2);\n * // -> ['a', 'b']\n *\n * // Backreferences in result array\n * XRegExp.split('..word1..', /([a-z]+)(\\d+)/i);\n * // -> ['..', 'word', '1', '..']\n */\nXRegExp.split = (str, separator, limit) => fixed.split.call(nullThrows(str), separator, limit);\n\n/**\n * Executes a regex search in a specified string. Returns `true` or `false`. Optional `pos` and\n * `sticky` arguments specify the search start position, and whether the match must start at the\n * specified position only. The `lastIndex` property of the provided regex is not used, but is\n * updated for compatibility. Also fixes browser bugs compared to the native\n * `RegExp.prototype.test` and can be used reliably cross-browser.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {RegExp} regex Regex to search with.\n * @param {Number} [pos=0] Zero-based index at which to start the search.\n * @param {Boolean|String} [sticky=false] Whether the match must start at the specified position\n * only. The string `'sticky'` is accepted as an alternative to `true`.\n * @returns {boolean} Whether the regex matched the provided value.\n * @example\n *\n * // Basic use\n * XRegExp.test('abc', /c/); // -> true\n *\n * // With pos and sticky\n * XRegExp.test('abc', /c/, 0, 'sticky'); // -> false\n * XRegExp.test('abc', /c/, 2, 'sticky'); // -> true\n */\n// Do this the easy way :-)\nXRegExp.test = (str, regex, pos, sticky) => !!XRegExp.exec(str, regex, pos, sticky);\n\n/**\n * Uninstalls optional features according to the specified options. Used to undo the actions of\n * `XRegExp.install`.\n *\n * @memberOf XRegExp\n * @param {Object|String} options Options object or string.\n * @example\n *\n * // With an options object\n * XRegExp.uninstall({\n * // Disables support for astral code points in Unicode addons (unless enabled per regex)\n * astral: true,\n *\n * // Don't add named capture groups to the `groups` property of matches\n * namespacing: true\n * });\n *\n * // With an options string\n * XRegExp.uninstall('astral namespacing');\n */\nXRegExp.uninstall = (options) => {\n options = prepareOptions(options);\n\n if (features.astral && options.astral) {\n setAstral(false);\n }\n\n if (features.namespacing && options.namespacing) {\n setNamespacing(false);\n }\n};\n\n/**\n * Returns an XRegExp object that is the union of the given patterns. Patterns can be provided as\n * regex objects or strings. Metacharacters are escaped in patterns provided as strings.\n * Backreferences in provided regex objects are automatically renumbered to work correctly within\n * the larger combined pattern. Native flags used by provided regexes are ignored in favor of the\n * `flags` argument.\n *\n * @memberOf XRegExp\n * @param {Array} patterns Regexes and strings to combine.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @param {Object} [options] Options object with optional properties:\n * - `conjunction` {String} Type of conjunction to use: 'or' (default) or 'none'.\n * @returns {RegExp} Union of the provided regexes and strings.\n * @example\n *\n * XRegExp.union(['a+b*c', /(dogs)\\1/, /(cats)\\1/], 'i');\n * // -> /a\\+b\\*c|(dogs)\\1|(cats)\\2/i\n *\n * XRegExp.union([/man/, /bear/, /pig/], 'i', {conjunction: 'none'});\n * // -> /manbearpig/i\n */\nXRegExp.union = (patterns, flags, options) => {\n options = options || {};\n const conjunction = options.conjunction || 'or';\n let numCaptures = 0;\n let numPriorCaptures;\n let captureNames;\n\n function rewrite(match, paren, backref) {\n const name = captureNames[numCaptures - numPriorCaptures];\n\n // Capturing group\n if (paren) {\n ++numCaptures;\n // If the current capture has a name, preserve the name\n if (name) {\n return `(?<${name}>`;\n }\n // Backreference\n } else if (backref) {\n // Rewrite the backreference\n return `\\\\${+backref + numPriorCaptures}`;\n }\n\n return match;\n }\n\n if (!(isType(patterns, 'Array') && patterns.length)) {\n throw new TypeError('Must provide a nonempty array of patterns to merge');\n }\n\n const parts = /(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/g;\n const output = [];\n for (const pattern of patterns) {\n if (XRegExp.isRegExp(pattern)) {\n numPriorCaptures = numCaptures;\n captureNames = (pattern[REGEX_DATA] && pattern[REGEX_DATA].captureNames) || [];\n\n // Rewrite backreferences. Passing to XRegExp dies on octals and ensures patterns are\n // independently valid; helps keep this simple. Named captures are put back\n output.push(XRegExp(pattern.source).source.replace(parts, rewrite));\n } else {\n output.push(XRegExp.escape(pattern));\n }\n }\n\n const separator = conjunction === 'none' ? '' : '|';\n return XRegExp(output.join(separator), flags);\n};\n\n// ==--------------------------==\n// Fixed/extended native methods\n// ==--------------------------==\n\n/**\n * Adds named capture support (with backreferences returned as `result.name`), and fixes browser\n * bugs in the native `RegExp.prototype.exec`. Use via `XRegExp.exec`.\n *\n * @memberOf RegExp\n * @param {String} str String to search.\n * @returns {Array} Match array with named backreference properties, or `null`.\n */\nfixed.exec = function(str) {\n const origLastIndex = this.lastIndex;\n const match = RegExp.prototype.exec.apply(this, arguments);\n\n if (match) {\n // Fix browsers whose `exec` methods don't return `undefined` for nonparticipating capturing\n // groups. This fixes IE 5.5-8, but not IE 9's quirks mode or emulation of older IEs. IE 9\n // in standards mode follows the spec.\n if (!correctExecNpcg && match.length > 1 && match.includes('')) {\n const r2 = copyRegex(this, {\n removeG: true,\n isInternalOnly: true\n });\n // Using `str.slice(match.index)` rather than `match[0]` in case lookahead allowed\n // matching due to characters outside the match\n String(str).slice(match.index).replace(r2, (...args) => {\n const len = args.length;\n // Skip index 0 and the last 2\n for (let i = 1; i < len - 2; ++i) {\n if (args[i] === undefined) {\n match[i] = undefined;\n }\n }\n });\n }\n\n // Attach named capture properties\n if (this[REGEX_DATA] && this[REGEX_DATA].captureNames) {\n let groupsObject = match;\n if (XRegExp.isInstalled('namespacing')) {\n // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec\n match.groups = Object.create(null);\n groupsObject = match.groups;\n }\n // Skip index 0\n for (let i = 1; i < match.length; ++i) {\n const name = this[REGEX_DATA].captureNames[i - 1];\n if (name) {\n groupsObject[name] = match[i];\n }\n }\n // Preserve any existing `groups` obj that came from native ES2018 named capture\n } else if (!match.groups && XRegExp.isInstalled('namespacing')) {\n match.groups = undefined;\n }\n\n // Fix browsers that increment `lastIndex` after zero-length matches\n if (this.global && !match[0].length && (this.lastIndex > match.index)) {\n this.lastIndex = match.index;\n }\n }\n\n if (!this.global) {\n // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)\n this.lastIndex = origLastIndex;\n }\n\n return match;\n};\n\n/**\n * Fixes browser bugs in the native `RegExp.prototype.test`.\n *\n * @memberOf RegExp\n * @param {String} str String to search.\n * @returns {boolean} Whether the regex matched the provided value.\n */\nfixed.test = function(str) {\n // Do this the easy way :-)\n return !!fixed.exec.call(this, str);\n};\n\n/**\n * Adds named capture support (with backreferences returned as `result.name`), and fixes browser\n * bugs in the native `String.prototype.match`.\n *\n * @memberOf String\n * @param {RegExp|*} regex Regex to search with. If not a regex object, it is passed to `RegExp`.\n * @returns {Array} If `regex` uses flag g, an array of match strings or `null`. Without flag g,\n * the result of calling `regex.exec(this)`.\n */\nfixed.match = function(regex) {\n if (!XRegExp.isRegExp(regex)) {\n // Use the native `RegExp` rather than `XRegExp`\n regex = new RegExp(regex);\n } else if (regex.global) {\n const result = String.prototype.match.apply(this, arguments);\n // Fixes IE bug\n regex.lastIndex = 0;\n\n return result;\n }\n\n return fixed.exec.call(regex, nullThrows(this));\n};\n\n/**\n * Adds support for `${n}` (or `$<n>`) tokens for named and numbered backreferences in replacement\n * text, and provides named backreferences to replacement functions as `arguments[0].name`. Also\n * fixes browser bugs in replacement text syntax when performing a replacement using a nonregex\n * search value, and the value of a replacement regex's `lastIndex` property during replacement\n * iterations and upon completion. Note that this doesn't support SpiderMonkey's proprietary third\n * (`flags`) argument. Use via `XRegExp.replace`.\n *\n * @memberOf String\n * @param {RegExp|String} search Search pattern to be replaced.\n * @param {String|Function} replacement Replacement string or a function invoked to create it.\n * @returns {string} New string with one or all matches replaced.\n */\nfixed.replace = function(search, replacement) {\n const isRegex = XRegExp.isRegExp(search);\n let origLastIndex;\n let captureNames;\n let result;\n\n if (isRegex) {\n if (search[REGEX_DATA]) {\n ({captureNames} = search[REGEX_DATA]);\n }\n // Only needed if `search` is nonglobal\n origLastIndex = search.lastIndex;\n } else {\n search += ''; // Type-convert\n }\n\n // Don't use `typeof`; some older browsers return 'function' for regex objects\n if (isType(replacement, 'Function')) {\n // Stringifying `this` fixes a bug in IE < 9 where the last argument in replacement\n // functions isn't type-converted to a string\n result = String(this).replace(search, (...args) => {\n if (captureNames) {\n let groupsObject;\n\n if (XRegExp.isInstalled('namespacing')) {\n // https://tc39.github.io/proposal-regexp-named-groups/#sec-regexpbuiltinexec\n groupsObject = Object.create(null);\n args.push(groupsObject);\n } else {\n // Change the `args[0]` string primitive to a `String` object that can store\n // properties. This really does need to use `String` as a constructor\n args[0] = new String(args[0]);\n [groupsObject] = args;\n }\n\n // Store named backreferences\n for (let i = 0; i < captureNames.length; ++i) {\n if (captureNames[i]) {\n groupsObject[captureNames[i]] = args[i + 1];\n }\n }\n }\n // ES6 specs the context for replacement functions as `undefined`\n return replacement(...args);\n });\n } else {\n // Ensure that the last value of `args` will be a string when given nonstring `this`,\n // while still throwing on null or undefined context\n result = String(nullThrows(this)).replace(search, (...args) => {\n return String(replacement).replace(replacementToken, replacer);\n\n function replacer($0, bracketed, angled, dollarToken) {\n bracketed = bracketed || angled;\n\n // ES2018 added a new trailing `groups` arg that's passed to replacement functions\n // when the search regex uses native named capture\n const numNonCaptureArgs = isType(args[args.length - 1], 'Object') ? 4 : 3;\n const numCaptures = args.length - numNonCaptureArgs;\n\n // Handle named or numbered backreference with curly or angled braces: ${n}, $<n>\n if (bracketed) {\n // Handle backreference to numbered capture, if `bracketed` is an integer. Use\n // `0` for the entire match. Any number of leading zeros may be used.\n if (/^\\d+$/.test(bracketed)) {\n // Type-convert and drop leading zeros\n const n = +bracketed;\n if (n <= numCaptures) {\n return args[n] || '';\n }\n }\n\n // Handle backreference to named capture. If the name does not refer to an\n // existing capturing group, it's an error. Also handles the error for numbered\n // backference that does not refer to an existing group.\n // Using `indexOf` since having groups with the same name is already an error,\n // otherwise would need `lastIndexOf`.\n const n = captureNames ? captureNames.indexOf(bracketed) : -1;\n if (n < 0) {\n throw new SyntaxError(`Backreference to undefined group ${$0}`);\n }\n return args[n + 1] || '';\n }\n\n // Handle `$`-prefixed variable\n // Handle space/blank first because type conversion with `+` drops space padding\n // and converts spaces and empty strings to `0`\n if (dollarToken === '' || dollarToken === ' ') {\n throw new SyntaxError(`Invalid token ${$0}`);\n }\n if (dollarToken === '&' || +dollarToken === 0) { // $&, $0 (not followed by 1-9), $00\n return args[0];\n }\n if (dollarToken === '$') { // $$\n return '$';\n }\n if (dollarToken === '`') { // $` (left context)\n return args[args.length - 1].slice(0, args[args.length - 2]);\n }\n if (dollarToken === \"'\") { // $' (right context)\n return args[args.length - 1].slice(args[args.length - 2] + args[0].length);\n }\n\n // Handle numbered backreference without braces\n // Type-convert and drop leading zero\n dollarToken = +dollarToken;\n // XRegExp behavior for `$n` and `$nn`:\n // - Backrefs end after 1 or 2 digits. Use `${..}` or `$<..>` for more digits.\n // - `$1` is an error if no capturing groups.\n // - `$10` is an error if less than 10 capturing groups. Use `${1}0` or `$<1>0`\n // instead.\n // - `$01` is `$1` if at least one capturing group, else it's an error.\n // - `$0` (not followed by 1-9) and `$00` are the entire match.\n // Native behavior, for comparison:\n // - Backrefs end after 1 or 2 digits. Cannot reference capturing group 100+.\n // - `$1` is a literal `$1` if no capturing groups.\n // - `$10` is `$1` followed by a literal `0` if less than 10 capturing groups.\n // - `$01` is `$1` if at least one capturing group, else it's a literal `$01`.\n // - `$0` is a literal `$0`.\n if (!isNaN(dollarToken)) {\n if (dollarToken > numCaptures) {\n throw new SyntaxError(`Backreference to undefined group ${$0}`);\n }\n return args[dollarToken] || '';\n }\n\n // `$` followed by an unsupported char is an error, unlike native JS\n throw new SyntaxError(`Invalid token ${$0}`);\n }\n });\n }\n\n if (isRegex) {\n if (search.global) {\n // Fixes IE, Safari bug (last tested IE 9, Safari 5.1)\n search.lastIndex = 0;\n } else {\n // Fixes IE, Opera bug (last tested IE 9, Opera 11.6)\n search.lastIndex = origLastIndex;\n }\n }\n\n return result;\n};\n\n/**\n * Fixes browser bugs in the native `String.prototype.split`. Use via `XRegExp.split`.\n *\n * @memberOf String\n * @param {RegExp|String} separator Regex or string to use for separating the string.\n * @param {Number} [limit] Maximum number of items to include in the result array.\n * @returns {!Array} Array of substrings.\n */\nfixed.split = function(separator, limit) {\n if (!XRegExp.isRegExp(separator)) {\n // Browsers handle nonregex split correctly, so use the faster native method\n return String.prototype.split.apply(this, arguments);\n }\n\n const str = String(this);\n const output = [];\n const origLastIndex = separator.lastIndex;\n let lastLastIndex = 0;\n let lastLength;\n\n // Values for `limit`, per the spec:\n // If undefined: pow(2,32) - 1\n // If 0, Infinity, or NaN: 0\n // If positive number: limit = floor(limit); if (limit >= pow(2,32)) limit -= pow(2,32);\n // If negative number: pow(2,32) - floor(abs(limit))\n // If other: Type-convert, then use the above rules\n // This line fails in very strange ways for some values of `limit` in Opera 10.5-10.63, unless\n // Opera Dragonfly is open (go figure). It works in at least Opera 9.5-10.1 and 11+\n limit = (limit === undefined ? -1 : limit) >>> 0;\n\n XRegExp.forEach(str, separator, (match) => {\n // This condition is not the same as `if (match[0].length)`\n if ((match.index + match[0].length) > lastLastIndex) {\n output.push(str.slice(lastLastIndex, match.index));\n if (match.length > 1 && match.index < str.length) {\n Array.prototype.push.apply(output, match.slice(1));\n }\n lastLength = match[0].length;\n lastLastIndex = match.index + lastLength;\n }\n });\n\n if (lastLastIndex === str.length) {\n if (!separator.test('') || lastLength) {\n output.push('');\n }\n } else {\n output.push(str.slice(lastLastIndex));\n }\n\n separator.lastIndex = origLastIndex;\n return output.length > limit ? output.slice(0, limit) : output;\n};\n\n// ==--------------------------==\n// Built-in syntax/flag tokens\n// ==--------------------------==\n\n/*\n * Letter escapes that natively match literal characters: `\\a`, `\\A`, etc. These should be\n * SyntaxErrors but are allowed in web reality. XRegExp makes them errors for cross-browser\n * consistency and to reserve their syntax, but lets them be superseded by addons.\n */\nXRegExp.addToken(\n /\\\\([ABCE-RTUVXYZaeg-mopqyz]|c(?![A-Za-z])|u(?![\\dA-Fa-f]{4}|{[\\dA-Fa-f]+})|x(?![\\dA-Fa-f]{2}))/,\n (match, scope) => {\n // \\B is allowed in default scope only\n if (match[1] === 'B' && scope === defaultScope) {\n return match[0];\n }\n throw new SyntaxError(`Invalid escape ${match[0]}`);\n },\n {\n scope: 'all',\n leadChar: '\\\\'\n }\n);\n\n/*\n * Unicode code point escape with curly braces: `\\u{N..}`. `N..` is any one or more digit\n * hexadecimal number from 0-10FFFF, and can include leading zeros. Requires the native ES6 `u` flag\n * to support code points greater than U+FFFF. Avoids converting code points above U+FFFF to\n * surrogate pairs (which could be done without flag `u`), since that could lead to broken behavior\n * if you follow a `\\u{N..}` token that references a code point above U+FFFF with a quantifier, or\n * if you use the same in a character class.\n */\nXRegExp.addToken(\n /\\\\u{([\\dA-Fa-f]+)}/,\n (match, scope, flags) => {\n const code = dec(match[1]);\n if (code > 0x10FFFF) {\n throw new SyntaxError(`Invalid Unicode code point ${match[0]}`);\n }\n if (code <= 0xFFFF) {\n // Converting to \\uNNNN avoids needing to escape the literal character and keep it\n // separate from preceding tokens\n return `\\\\u${pad4(hex(code))}`;\n }\n // If `code` is between 0xFFFF and 0x10FFFF, require and defer to native handling\n if (hasNativeU && flags.includes('u')) {\n return match[0];\n }\n throw new SyntaxError('Cannot use Unicode code point above \\\\u{FFFF} without flag u');\n },\n {\n scope: 'all',\n leadChar: '\\\\'\n }\n);\n\n/*\n * Comment pattern: `(?# )`. Inline comments are an alternative to the line comments allowed in\n * free-spacing mode (flag x).\n */\nXRegExp.addToken(\n /\\(\\?#[^)]*\\)/,\n getContextualTokenSeparator,\n {leadChar: '('}\n);\n\n/*\n * Whitespace and line comments, in free-spacing mode (aka extended mode, flag x) only.\n */\nXRegExp.addToken(\n /\\s+|#[^\\n]*\\n?/,\n getContextualTokenSeparator,\n {flag: 'x'}\n);\n\n/*\n * Dot, in dotAll mode (aka singleline mode, flag s) only.\n */\nif (!hasNativeS) {\n XRegExp.addToken(\n /\\./,\n () => '[\\\\s\\\\S]',\n {\n flag: 's',\n leadChar: '.'\n }\n );\n}\n\n/*\n * Named backreference: `\\k<name>`. Backreference names can use RegExpIdentifierName characters\n * only. Also allows numbered backreferences as `\\k<n>`.\n */\nXRegExp.addToken(\n /\\\\k<([^>]+)>/,\n function(match) {\n // Groups with the same name is an error, else would need `lastIndexOf`\n const index = isNaN(match[1]) ? (this.captureNames.indexOf(match[1]) + 1) : +match[1];\n const endIndex = match.index + match[0].length;\n if (!index || index > this.captureNames.length) {\n throw new SyntaxError(`Backreference to undefined group ${match[0]}`);\n }\n // Keep backreferences separate from subsequent literal numbers. This avoids e.g.\n // inadvertedly changing `(?<n>)\\k<n>1` to `()\\11`.\n return `\\\\${index}${\n endIndex === match.input.length || isNaN(match.input[endIndex]) ?\n '' : '(?:)'\n }`;\n },\n {leadChar: '\\\\'}\n);\n\n/*\n * Numbered backreference or octal, plus any following digits: `\\0`, `\\11`, etc. Octals except `\\0`\n * not followed by 0-9 and backreferences to unopened capture groups throw an error. Other matches\n * are returned unaltered. IE < 9 doesn't support backreferences above `\\99` in regex syntax.\n */\nXRegExp.addToken(\n /\\\\(\\d+)/,\n function(match, scope) {\n if (\n !(\n scope === defaultScope &&\n /^[1-9]/.test(match[1]) &&\n +match[1] <= this.captureNames.length\n ) &&\n match[1] !== '0'\n ) {\n throw new SyntaxError(`Cannot use octal escape or backreference to undefined group ${match[0]}`);\n }\n return match[0];\n },\n {\n scope: 'all',\n leadChar: '\\\\'\n }\n);\n\n/*\n * Named capturing group; match the opening delimiter only: `(?<name>`. Capture names can use the\n * RegExpIdentifierName characters only. Names can't be integers. Supports Python-style\n * `(?P<name>` as an alternate syntax to avoid issues in some older versions of Opera which natively\n * supported the Python-style syntax. Otherwise, XRegExp might treat numbered backreferences to\n * Python-style named capture as octals.\n */\nXRegExp.addToken(\n /\\(\\?P?<([\\p{ID_Start}$_][\\p{ID_Continue}$_\\u200C\\u200D]*)>/u,\n function(match) {\n if (!XRegExp.isInstalled('namespacing') && (match[1] === 'length' || match[1] === '__proto__')) {\n throw new SyntaxError(`Cannot use reserved word as capture name ${match[0]}`);\n }\n if (this.captureNames.includes(match[1])) {\n throw new SyntaxError(`Cannot use same name for multiple groups ${match[0]}`);\n }\n this.captureNames.push(match[1]);\n this.hasNamedCapture = true;\n return '(';\n },\n {leadChar: '('}\n);\n\n/*\n * Capturing group; match the opening parenthesis only. Required for support of named capturing\n * groups. Also adds named capture only mode (flag n).\n */\nXRegExp.addToken(\n /\\((?!\\?)/,\n function(match, scope, flags) {\n if (flags.includes('n')) {\n return '(?:';\n }\n this.captureNames.push(null);\n return '(';\n },\n {\n optionalFlags: 'n',\n leadChar: '('\n }\n);\n\nexport default XRegExp;\n","/*!\n * XRegExp.build 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2012-present MIT License\n */\n\nexport default (XRegExp) => {\n const REGEX_DATA = 'xregexp';\n const subParts = /(\\()(?!\\?)|\\\\([1-9]\\d*)|\\\\[\\s\\S]|\\[(?:[^\\\\\\]]|\\\\[\\s\\S])*\\]/g;\n const parts = XRegExp.union([/\\({{([\\w$]+)}}\\)|{{([\\w$]+)}}/, subParts], 'g', {\n conjunction: 'or'\n });\n\n /**\n * Strips a leading `^` and trailing unescaped `$`, if both are present.\n *\n * @private\n * @param {String} pattern Pattern to process.\n * @returns {String} Pattern with edge anchors removed.\n */\n function deanchor(pattern) {\n // Allow any number of empty noncapturing groups before/after anchors, because regexes\n // built/generated by XRegExp sometimes include them\n const leadingAnchor = /^(?:\\(\\?:\\))*\\^/;\n const trailingAnchor = /\\$(?:\\(\\?:\\))*$/;\n\n if (\n leadingAnchor.test(pattern) &&\n trailingAnchor.test(pattern) &&\n // Ensure that the trailing `$` isn't escaped\n trailingAnchor.test(pattern.replace(/\\\\[\\s\\S]/g, ''))\n ) {\n return pattern.replace(leadingAnchor, '').replace(trailingAnchor, '');\n }\n\n return pattern;\n }\n\n /**\n * Converts the provided value to an XRegExp. Native RegExp flags are not preserved.\n *\n * @private\n * @param {String|RegExp} value Value to convert.\n * @param {Boolean} [addFlagX] Whether to apply the `x` flag in cases when `value` is not\n * already a regex generated by XRegExp\n * @returns {RegExp} XRegExp object with XRegExp syntax applied.\n */\n function asXRegExp(value, addFlagX) {\n const flags = addFlagX ? 'x' : '';\n return XRegExp.isRegExp(value) ?\n (value[REGEX_DATA] && value[REGEX_DATA].captureNames ?\n // Don't recompile, to preserve capture names\n value :\n // Recompile as XRegExp\n XRegExp(value.source, flags)\n ) :\n // Compile string as XRegExp\n XRegExp(value, flags);\n }\n\n function interpolate(substitution) {\n return substitution instanceof RegExp ? substitution : XRegExp.escape(substitution);\n }\n\n function reduceToSubpatternsObject(subpatterns, interpolated, subpatternIndex) {\n subpatterns[`subpattern${subpatternIndex}`] = interpolated;\n return subpatterns;\n }\n\n function embedSubpatternAfter(raw, subpatternIndex, rawLiterals) {\n const hasSubpattern = subpatternIndex < rawLiterals.length - 1;\n return raw + (hasSubpattern ? `{{subpattern${subpatternIndex}}}` : '');\n }\n\n /**\n * Provides tagged template literals that create regexes with XRegExp syntax and flags. The\n * provided pattern is handled as a raw string, so backslashes don't need to be escaped.\n *\n * Interpolation of strings and regexes shares the features of `XRegExp.build`. Interpolated\n * patterns are treated as atomic units when quantified, interpolated strings have their special\n * characters escaped, a leading `^` and trailing unescaped `$` are stripped from interpolated\n * regexes if both are present, and any backreferences within an interpolated regex are\n * rewritten to work within the overall pattern.\n *\n * @memberOf XRegExp\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {Function} Handler for template literals that construct regexes with XRegExp syntax.\n * @example\n *\n * XRegExp.tag()`\\b\\w+\\b`.test('word'); // -> true\n *\n * const hours = /1[0-2]|0?[1-9]/;\n * const minutes = /(?<minutes>[0-5][0-9])/;\n * const time = XRegExp.tag('x')`\\b ${hours} : ${minutes} \\b`;\n * time.test('10:59'); // -> true\n * XRegExp.exec('10:59', time).groups.minutes; // -> '59'\n *\n * const backref1 = /(a)\\1/;\n * const backref2 = /(b)\\1/;\n * XRegExp.tag()`${backref1}${backref2}`.test('aabb'); // -> true\n */\n XRegExp.tag = (flags) => (literals, ...substitutions) => {\n const subpatterns = substitutions.map(interpolate).reduce(reduceToSubpatternsObject, {});\n const pattern = literals.raw.map(embedSubpatternAfter).join('');\n return XRegExp.build(pattern, subpatterns, flags);\n };\n\n /**\n * Builds regexes using named subpatterns, for readability and pattern reuse. Backreferences in\n * the outer pattern and provided subpatterns are automatically renumbered to work correctly.\n * Native flags used by provided subpatterns are ignored in favor of the `flags` argument.\n *\n * @memberOf XRegExp\n * @param {String} pattern XRegExp pattern using `{{name}}` for embedded subpatterns. Allows\n * `({{name}})` as shorthand for `(?<name>{{name}})`. Patterns cannot be embedded within\n * character classes.\n * @param {Object} subs Lookup object for named subpatterns. Values can be strings or regexes. A\n * leading `^` and trailing unescaped `$` are stripped from subpatterns, if both are present.\n * @param {String} [flags] Any combination of XRegExp flags.\n * @returns {RegExp} Regex with interpolated subpatterns.\n * @example\n *\n * const time = XRegExp.build('(?x)^ {{hours}} ({{minutes}}) $', {\n * hours: XRegExp.build('{{h12}} : | {{h24}}', {\n * h12: /1[0-2]|0?[1-9]/,\n * h24: /2[0-3]|[01][0-9]/\n * }, 'x'),\n * minutes: /^[0-5][0-9]$/\n * });\n * time.test('10:59'); // -> true\n * XRegExp.exec('10:59', time).groups.minutes; // -> '59'\n */\n XRegExp.build = (pattern, subs, flags) => {\n flags = flags || '';\n // Used with `asXRegExp` calls for `pattern` and subpatterns in `subs`, to work around how\n // some browsers convert `RegExp('\\n')` to a regex that contains the literal characters `\\`\n // and `n`. See more details at <https://github.com/slevithan/xregexp/pull/163>.\n const addFlagX = flags.includes('x');\n const inlineFlags = /^\\(\\?([\\w$]+)\\)/.exec(pattern);\n // Add flags within a leading mode modifier to the overall pattern's flags\n if (inlineFlags) {\n flags = XRegExp._clipDuplicates(flags + inlineFlags[1]);\n }\n\n const data = {};\n for (const p in subs) {\n if (subs.hasOwnProperty(p)) {\n // Passing to XRegExp enables extended syntax and ensures independent validity,\n // lest an unescaped `(`, `)`, `[`, or trailing `\\` breaks the `(?:)` wrapper. For\n // subpatterns provided as native regexes, it dies on octals and adds the property\n // used to hold extended regex instance data, for simplicity.\n const sub = asXRegExp(subs[p], addFlagX);\n data[p] = {\n // Deanchoring allows embedding independently useful anchored regexes. If you\n // really need to keep your anchors, double them (i.e., `^^...$$`).\n pattern: deanchor(sub.source),\n names: sub[REGEX_DATA].captureNames || []\n };\n }\n }\n\n // Passing to XRegExp dies on octals and ensures the outer pattern is independently valid;\n // helps keep this simple. Named captures will be put back.\n const patternAsRegex = asXRegExp(pattern, addFlagX);\n\n // 'Caps' is short for 'captures'\n let numCaps = 0;\n let numPriorCaps;\n let numOuterCaps = 0;\n const outerCapsMap = [0];\n const outerCapNames = patternAsRegex[REGEX_DATA].captureNames || [];\n const output = patternAsRegex.source.replace(parts, ($0, $1, $2, $3, $4) => {\n const subName = $1 || $2;\n let capName;\n let intro;\n let localCapIndex;\n // Named subpattern\n if (subName) {\n if (!data.hasOwnProperty(subName)) {\n throw new ReferenceError(`Undefined property ${$0}`);\n }\n // Named subpattern was wrapped in a capturing group\n if ($1) {\n capName = outerCapNames[numOuterCaps];\n outerCapsMap[++numOuterCaps] = ++numCaps;\n // If it's a named group, preserve the name. Otherwise, use the subpattern name\n // as the capture name\n intro = `(?<${capName || subName}>`;\n } else {\n intro = '(?:';\n }\n numPriorCaps = numCaps;\n const rewrittenSubpattern = data[subName].pattern.replace(subParts, (match, paren, backref) => {\n // Capturing group\n if (paren) {\n capName = data[subName].names[numCaps - numPriorCaps];\n ++numCaps;\n // If the current capture has a name, preserve the name\n if (capName) {\n return `(?<${capName}>`;\n }\n // Backreference\n } else if (backref) {\n localCapIndex = +backref - 1;\n // Rewrite the backreference\n return data[subName].names[localCapIndex] ?\n // Need to preserve the backreference name in case using flag `n`\n `\\\\k<${data[subName].names[localCapIndex]}>` :\n `\\\\${+backref + numPriorCaps}`;\n }\n return match;\n });\n return `${intro}${rewrittenSubpattern})`;\n }\n // Capturing group\n if ($3) {\n capName = outerCapNames[numOuterCaps];\n outerCapsMap[++numOuterCaps] = ++numCaps;\n // If the current capture has a name, preserve the name\n if (capName) {\n return `(?<${capName}>`;\n }\n // Backreference\n } else if ($4) {\n localCapIndex = +$4 - 1;\n // Rewrite the backreference\n return outerCapNames[localCapIndex] ?\n // Need to preserve the backreference name in case using flag `n`\n `\\\\k<${outerCapNames[localCapIndex]}>` :\n `\\\\${outerCapsMap[+$4]}`;\n }\n return $0;\n });\n\n return XRegExp(output, flags);\n };\n};\n","/*!\n * XRegExp.matchRecursive 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2009-present MIT License\n */\n\nexport default (XRegExp) => {\n\n /**\n * Returns a match detail object composed of the provided values.\n *\n * @private\n */\n function row(name, value, start, end) {\n return {\n name,\n value,\n start,\n end\n };\n }\n\n /**\n * Returns an array of match strings between outermost left and right delimiters, or an array of\n * objects with detailed match parts and position data. By default, an error is thrown if\n * delimiters are unbalanced within the subject string.\n *\n * @memberOf XRegExp\n * @param {String} str String to search.\n * @param {String} left Left delimiter as an XRegExp pattern.\n * @param {String} right Right delimiter as an XRegExp pattern.\n * @param {String} [flags] Any combination of XRegExp flags, used for the left and right delimiters.\n * @param {Object} [options] Options object with optional properties:\n * - `valueNames` {Array} Providing `valueNames` changes the return value from an array of\n * matched strings to an array of objects that provide the value and start/end positions\n * for the matched strings as well as the matched delimiters and unmatched string segments.\n * To use this extended information mode, provide an array of 4 strings that name the parts\n * to be returned:\n * 1. String segments outside of (before, between, and after) matches.\n * 2. Matched outermost left delimiters.\n * 3. Matched text between the outermost left and right delimiters.\n * 4. Matched outermost right delimiters.\n * Taken together, these parts include the entire subject string if used with flag g.\n * Use `null` for any of these values to omit unneeded parts from the returned results.\n * - `escapeChar` {String} Single char used to escape delimiters within the subject string.\n * - `unbalanced` {String} Handling mode for unbalanced delimiters. Options are:\n * - 'error' - throw (default)\n * - 'skip' - unbalanced delimiters are treated as part of the text between delimiters, and\n * searches continue at the end of the unbalanced delimiter.\n * - 'skip-lazy' - unbalanced delimiters are treated as part of the text between delimiters,\n * and searches continue one character after the start of the unbalanced delimiter.\n * @returns {Array} Array of matches, or an empty array.\n * @example\n *\n * // Basic usage\n * const str1 = '(t((e))s)t()(ing)';\n * XRegExp.matchRecursive(str1, '\\\\(', '\\\\)', 'g');\n * // -> ['t((e))s', '', 'ing']\n *\n * // Extended information mode with valueNames\n * const str2 = 'Here is <div> <div>an</div></div> example';\n * XRegExp.matchRecursive(str2, '<div\\\\s*>', '</div>', 'gi', {\n * valueNames: ['between', 'left', 'match', 'right']\n * });\n * // -> [\n * // {name: 'between', value: 'Here is ', start: 0, end: 8},\n * // {name: 'left', value: '<div>', start: 8, end: 13},\n * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27},\n * // {name: 'right', value: '</div>', start: 27, end: 33},\n * // {name: 'between', value: ' example', start: 33, end: 41}\n * // ]\n *\n * // Omitting unneeded parts with null valueNames, and using escapeChar\n * const str3 = '...{1}.\\\\{{function(x,y){return {y:x}}}';\n * XRegExp.matchRecursive(str3, '{', '}', 'g', {\n * valueNames: ['literal', null, 'value', null],\n * escapeChar: '\\\\'\n * });\n * // -> [\n * // {name: 'literal', value: '...', start: 0, end: 3},\n * // {name: 'value', value: '1', start: 4, end: 5},\n * // {name: 'literal', value: '.\\\\{', start: 6, end: 9},\n * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37}\n * // ]\n *\n * // Sticky mode via flag y\n * const str4 = '<1><<<2>>><3>4<5>';\n * XRegExp.matchRecursive(str4, '<', '>', 'gy');\n * // -> ['1', '<<2>>', '3']\n *\n * // Skipping unbalanced delimiters instead of erroring\n * const str5 = 'Here is <div> <div>an</div> unbalanced example';\n * XRegExp.matchRecursive(str5, '<div\\\\s*>', '</div>', 'gi', {\n * unbalanced: 'skip'\n * });\n * // -> ['an']\n */\n XRegExp.matchRecursive = (str, left, right, flags, options) => {\n flags = flags || '';\n options = options || {};\n const global = flags.includes('g');\n const sticky = flags.includes('y');\n // Flag `y` is handled manually\n const basicFlags = flags.replace(/y/g, '');\n left = XRegExp(left, basicFlags);\n right = XRegExp(right, basicFlags);\n\n let esc;\n let {escapeChar} = options;\n if (escapeChar) {\n if (escapeChar.length > 1) {\n throw new Error('Cannot use more than one escape character');\n }\n escapeChar = XRegExp.escape(escapeChar);\n // Example of concatenated `esc` regex:\n // `escapeChar`: '%'\n // `left`: '<'\n // `right`: '>'\n // Regex is: /(?:%[\\S\\s]|(?:(?!<|>)[^%])+)+/\n esc = new RegExp(\n `(?:${escapeChar}[\\\\S\\\\s]|(?:(?!${\n // Using `XRegExp.union` safely rewrites backreferences in `left` and `right`.\n // Intentionally not passing `basicFlags` to `XRegExp.union` since any syntax\n // transformation resulting from those flags was already applied to `left` and\n // `right` when they were passed through the XRegExp constructor above.\n XRegExp.union([left, right], '', {conjunction: 'or'}).source\n })[^${escapeChar}])+)+`,\n // Flags `dgy` not needed here\n flags.replace(XRegExp._hasNativeFlag('s') ? /[^imsu]/g : /[^imu]/g, '')\n );\n }\n\n let openTokens = 0;\n let delimStart = 0;\n let delimEnd = 0;\n let lastOuterEnd = 0;\n let outerStart;\n let innerStart;\n let leftMatch;\n let rightMatch;\n const vN = options.valueNames;\n const output = [];\n\n while (true) {\n // If using an escape character, advance to the delimiter's next starting position,\n // skipping any escaped characters in between\n if (escapeChar) {\n delimEnd += (XRegExp.exec(str, esc, delimEnd, 'sticky') || [''])[0].length;\n }\n\n leftMatch = XRegExp.exec(str, left, delimEnd);\n rightMatch = XRegExp.exec(str, right, delimEnd);\n // Keep the leftmost match only\n if (leftMatch && rightMatch) {\n if (leftMatch.index <= rightMatch.index) {\n rightMatch = null;\n } else {\n leftMatch = null;\n }\n }\n\n // Paths (LM: leftMatch, RM: rightMatch, OT: openTokens):\n // LM | RM | OT | Result\n // 1 | 0 | 1 | loop\n // 1 | 0 | 0 | loop\n // 0 | 1 | 1 | loop\n // 0 | 1 | 0 | throw\n // 0 | 0 | 1 | throw\n // 0 | 0 | 0 | break\n // The paths above don't include the sticky mode special case. The loop ends after the\n // first completed match if not `global`.\n if (leftMatch || rightMatch) {\n delimStart = (leftMatch || rightMatch).index;\n delimEnd = delimStart + (leftMatch || rightMatch)[0].length;\n } else if (!openTokens) {\n break;\n }\n if (sticky && !openTokens && delimStart > lastOuterEnd) {\n break;\n }\n if (leftMatch) {\n if (!openTokens) {\n outerStart = delimStart;\n innerStart = delimEnd;\n }\n openTokens += 1;\n } else if (rightMatch && openTokens) {\n openTokens -= 1;\n if (!openTokens) {\n if (vN) {\n if (vN[0] && outerStart > lastOuterEnd) {\n output.push(row(vN[0], str.slice(lastOuterEnd, outerStart), lastOuterEnd, outerStart));\n }\n if (vN[1]) {\n output.push(row(vN[1], str.slice(outerStart, innerStart), outerStart, innerStart));\n }\n if (vN[2]) {\n output.push(row(vN[2], str.slice(innerStart, delimStart), innerStart, delimStart));\n }\n if (vN[3]) {\n output.push(row(vN[3], str.slice(delimStart, delimEnd), delimStart, delimEnd));\n }\n } else {\n output.push(str.slice(innerStart, delimStart));\n }\n lastOuterEnd = delimEnd;\n if (!global) {\n break;\n }\n }\n // Found unbalanced delimiter\n } else {\n const unbalanced = options.unbalanced || 'error';\n if (unbalanced === 'skip' || unbalanced === 'skip-lazy') {\n if (rightMatch) {\n rightMatch = null;\n // No `leftMatch` for unbalanced left delimiter because we've reached the string end\n } else {\n if (unbalanced === 'skip') {\n const outerStartDelimLength = XRegExp.exec(str, left, outerStart, 'sticky')[0].length;\n delimEnd = outerStart + (outerStartDelimLength || 1);\n } else {\n delimEnd = outerStart + 1;\n }\n openTokens = 0;\n }\n } else if (unbalanced === 'error') {\n const delimSide = rightMatch ? 'right' : 'left';\n const errorPos = rightMatch ? delimStart : outerStart;\n throw new Error(`Unbalanced ${delimSide} delimiter found in string at position ${errorPos}`);\n } else {\n throw new Error(`Unsupported value for unbalanced: ${unbalanced}`);\n }\n }\n\n // If the delimiter matched an empty string, avoid an infinite loop\n if (delimStart === delimEnd) {\n delimEnd += 1;\n }\n }\n\n if (global && output.length > 0 && !sticky && vN && vN[0] && str.length > lastOuterEnd) {\n output.push(row(vN[0], str.slice(lastOuterEnd), lastOuterEnd, str.length));\n }\n\n return output;\n };\n};\n","/*!\n * XRegExp Unicode Base 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2008-present MIT License\n */\n\nexport default (XRegExp) => {\n\n /**\n * Adds base support for Unicode matching:\n * - Adds syntax `\\p{..}` for matching Unicode tokens. Tokens can be inverted using `\\P{..}` or\n * `\\p{^..}`. Token names ignore case, spaces, hyphens, and underscores. You can omit the\n * braces for token names that are a single letter (e.g. `\\pL` or `PL`).\n * - Adds flag A (astral), which enables 21-bit Unicode support.\n * - Adds the `XRegExp.addUnicodeData` method used by other addons to provide character data.\n *\n * Unicode Base relies on externally provided Unicode character data. Official addons are\n * available to provide data for Unicode categories, scripts, and properties.\n *\n * @requires XRegExp\n */\n\n // ==--------------------------==\n // Private stuff\n // ==--------------------------==\n\n // Storage for Unicode data\n const unicode = {};\n const unicodeTypes = {};\n\n // Reuse utils\n const dec = XRegExp._dec;\n const hex = XRegExp._hex;\n const pad4 = XRegExp._pad4;\n\n // Generates a token lookup name: lowercase, with hyphens, spaces, and underscores removed\n function normalize(name) {\n return name.replace(/[- _]+/g, '').toLowerCase();\n }\n\n // Gets the decimal code of a literal code unit, \\xHH, \\uHHHH, or a backslash-escaped literal\n function charCode(chr) {\n const esc = /^\\\\[xu](.+)/.exec(chr);\n return esc ?\n dec(esc[1]) :\n chr.charCodeAt(chr[0] === '\\\\' ? 1 : 0);\n }\n\n // Inverts a list of ordered BMP characters and ranges\n function invertBmp(range) {\n let output = '';\n let lastEnd = -1;\n\n XRegExp.forEach(\n range,\n /(\\\\x..|\\\\u....|\\\\?[\\s\\S])(?:-(\\\\x..|\\\\u....|\\\\?[\\s\\S]))?/,\n (m) => {\n const start = charCode(m[1]);\n if (start > (lastEnd + 1)) {\n output += `\\\\u${pad4(hex(lastEnd + 1))}`;\n if (start > (lastEnd + 2)) {\n output += `-\\\\u${pad4(hex(start - 1))}`;\n }\n }\n lastEnd = charCode(m[2] || m[1]);\n }\n );\n\n if (lastEnd < 0xFFFF) {\n output += `\\\\u${pad4(hex(lastEnd + 1))}`;\n if (lastEnd < 0xFFFE) {\n output += '-\\\\uFFFF';\n }\n }\n\n return output;\n }\n\n // Generates an inverted BMP range on first use\n function cacheInvertedBmp(slug) {\n const prop = 'b!';\n return (\n unicode[slug][prop] ||\n (unicode[slug][prop] = invertBmp(unicode[slug].bmp))\n );\n }\n\n // Combines and optionally negates BMP and astral data\n function buildAstral(slug, isNegated) {\n const item = unicode[slug];\n let combined = '';\n\n if (item.bmp && !item.isBmpLast) {\n combined = `[${item.bmp}]${item.astral ? '|' : ''}`;\n }\n if (item.astral) {\n combined += item.astral;\n }\n if (item.isBmpLast && item.bmp) {\n combined += `${item.astral ? '|' : ''}[${item.bmp}]`;\n }\n\n // Astral Unicode tokens always match a code point, never a code unit\n return isNegated ?\n `(?:(?!${combined})(?:[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]|[\\0-\\uFFFF]))` :\n `(?:${combined})`;\n }\n\n // Builds a complete astral pattern on first use\n function cacheAstral(slug, isNegated) {\n const prop = isNegated ? 'a!' : 'a=';\n return (\n unicode[slug][prop] ||\n (unicode[slug][prop] = buildAstral(slug, isNegated))\n );\n }\n\n // ==--------------------------==\n // Core functionality\n // ==--------------------------==\n\n /*\n * Add astral mode (flag A) and Unicode token syntax: `\\p{..}`, `\\P{..}`, `\\p{^..}`, `\\pC`.\n */\n XRegExp.addToken(\n // Use `*` instead of `+` to avoid capturing `^` as the token name in `\\p{^}`\n /\\\\([pP])(?:{(\\^?)(?:(\\w+)=)?([^}]*)}|([A-Za-z]))/,\n (match, scope, flags) => {\n const ERR_DOUBLE_NEG = 'Invalid double negation ';\n const ERR_UNKNOWN_NAME = 'Unknown Unicode token ';\n const ERR_UNKNOWN_REF = 'Unicode token missing data ';\n const ERR_ASTRAL_ONLY = 'Astral mode required for Unicode token ';\n const ERR_ASTRAL_IN_CLASS = 'Astral mode does not support Unicode tokens within character classes';\n const [\n fullToken,\n pPrefix,\n caretNegation,\n typePrefix,\n tokenName,\n tokenSingleCharName\n ] = match;\n // Negated via \\P{..} or \\p{^..}\n let isNegated = pPrefix === 'P' || !!caretNegation;\n // Switch from BMP (0-FFFF) to astral (0-10FFFF) mode via flag A\n const isAstralMode = flags.includes('A');\n // Token lookup name. Check `tokenSingleCharName` first to avoid passing `undefined`\n // via `\\p{}`\n let slug = normalize(tokenSingleCharName || tokenName);\n // Token data object\n let item = unicode[slug];\n\n if (pPrefix === 'P' && caretNegation) {\n throw new SyntaxError(ERR_DOUBLE_NEG + fullToken);\n }\n if (!unicode.hasOwnProperty(slug)) {\n throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken);\n }\n\n if (typePrefix) {\n if (!(unicodeTypes[typePrefix] && unicodeTypes[typePrefix][slug])) {\n throw new SyntaxError(ERR_UNKNOWN_NAME + fullToken);\n }\n }\n\n // Switch to the negated form of the referenced Unicode token\n if (item.inverseOf) {\n slug = normalize(item.inverseOf);\n if (!unicode.hasOwnProperty(slug)) {\n throw new ReferenceError(`${ERR_UNKNOWN_REF + fullToken} -> ${item.inverseOf}`);\n }\n item = unicode[slug];\n isNegated = !isNegated;\n }\n\n if (!(item.bmp || isAstralMode)) {\n throw new SyntaxError(ERR_ASTRAL_ONLY + fullToken);\n }\n if (isAstralMode) {\n if (scope === 'class') {\n throw new SyntaxError(ERR_ASTRAL_IN_CLASS);\n }\n\n return cacheAstral(slug, isNegated);\n }\n\n return scope === 'class' ?\n (isNegated ? cacheInvertedBmp(slug) : item.bmp) :\n `${(isNegated ? '[^' : '[') + item.bmp}]`;\n },\n {\n scope: 'all',\n optionalFlags: 'A',\n leadChar: '\\\\'\n }\n );\n\n /**\n * Adds to the list of Unicode tokens that XRegExp regexes can match via `\\p` or `\\P`.\n *\n * @memberOf XRegExp\n * @param {Array} data Objects with named character ranges. Each object may have properties\n * `name`, `alias`, `isBmpLast`, `inverseOf`, `bmp`, and `astral`. All but `name` are\n * optional, although one of `bmp` or `astral` is required (unless `inverseOf` is set). If\n * `astral` is absent, the `bmp` data is used for BMP and astral modes. If `bmp` is absent,\n * the name errors in BMP mode but works in astral mode. If both `bmp` and `astral` are\n * provided, the `bmp` data only is used in BMP mode, and the combination of `bmp` and\n * `astral` data is used in astral mode. `isBmpLast` is needed when a token matches orphan\n * high surrogates *and* uses surrogate pairs to match astral code points. The `bmp` and\n * `astral` data should be a combination of literal characters and `\\xHH` or `\\uHHHH` escape\n * sequences, with hyphens to create ranges. Any regex metacharacters in the data should be\n * escaped, apart from range-creating hyphens. The `astral` data can additionally use\n * character classes and alternation, and should use surrogate pairs to represent astral code\n * points. `inverseOf` can be used to avoid duplicating character data if a Unicode token is\n * defined as the exact inverse of another token.\n * @param {String} [typePrefix] Enables optionally using this type as a prefix for all of the\n * provided Unicode tokens, e.g. if given `'Type'`, then `\\p{TokenName}` can also be written\n * as `\\p{Type=TokenName}`.\n * @example\n *\n * // Basic use\n * XRegExp.addUnicodeData([{\n * name: 'XDigit',\n * alias: 'Hexadecimal',\n * bmp: '0-9A-Fa-f'\n * }]);\n * XRegExp('\\\\p{XDigit}:\\\\p{Hexadecimal}+').test('0:3D'); // -> true\n */\n XRegExp.addUnicodeData = (data, typePrefix) => {\n const ERR_NO_NAME = 'Unicode token requires name';\n const ERR_NO_DATA = 'Unicode token has no character data ';\n\n if (typePrefix) {\n // Case sensitive to match ES2018\n unicodeTypes[typePrefix] = {};\n }\n\n for (const item of data) {\n if (!item.name) {\n throw new Error(ERR_NO_NAME);\n }\n if (!(item.inverseOf || item.bmp || item.astral)) {\n throw new Error(ERR_NO_DATA + item.name);\n }\n\n const normalizedName = normalize(item.name);\n unicode[normalizedName] = item;\n if (typePrefix) {\n unicodeTypes[typePrefix][normalizedName] = true;\n }\n\n if (item.alias) {\n const normalizedAlias = normalize(item.alias);\n unicode[normalizedAlias] = item;\n if (typePrefix) {\n unicodeTypes[typePrefix][normalizedAlias] = true;\n }\n }\n }\n\n // Reset the pattern cache used by the `XRegExp` constructor, since the same pattern and\n // flags might now produce different results\n XRegExp.cache.flush('patterns');\n };\n\n /**\n * @ignore\n *\n * Return a reference to the internal Unicode definition structure for the given Unicode\n * Property if the given name is a legal Unicode Property for use in XRegExp `\\p` or `\\P` regex\n * constructs.\n *\n * @memberOf XRegExp\n * @param {String} name Name by which the Unicode Property may be recognized (case-insensitive),\n * e.g. `'N'` or `'Number'`. The given name is matched against all registered Unicode\n * Properties and Property Aliases.\n * @returns {Object} Reference to definition structure when the name matches a Unicode Property.\n *\n * @note\n * For more info on Unicode Properties, see also http://unicode.org/reports/tr18/#Categories.\n *\n * @note\n * This method is *not* part of the officially documented API and may change or be removed in\n * the future. It is meant for userland code that wishes to reuse the (large) internal Unicode\n * structures set up by XRegExp.\n */\n XRegExp._getUnicodeProperty = (name) => {\n const slug = normalize(name);\n return unicode[slug];\n };\n};\n","/*!\n * XRegExp Unicode Categories 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2010-present MIT License\n * Unicode data by Mathias Bynens <mathiasbynens.be>\n */\n\nimport categories from '../../tools/output/categories';\n\nexport default (XRegExp) => {\n\n /**\n * Adds support for Unicode's general categories. E.g., `\\p{Lu}` or `\\p{Uppercase Letter}`. See\n * category descriptions in UAX #44 <http://unicode.org/reports/tr44/#GC_Values_Table>. Token\n * names are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 14.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n\n if (!XRegExp.addUnicodeData) {\n throw new ReferenceError('Unicode Base must be loaded before Unicode Categories');\n }\n\n XRegExp.addUnicodeData(categories);\n};\n","/*!\n * XRegExp Unicode Properties 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2012-present MIT License\n * Unicode data by Mathias Bynens <mathiasbynens.be>\n */\n\nimport properties from '../../tools/output/properties';\n\nexport default (XRegExp) => {\n\n /**\n * Adds properties to meet the UTS #18 Level 1 RL1.2 requirements for Unicode regex support. See\n * <http://unicode.org/reports/tr18/#RL1.2>. Following are definitions of these properties from\n * UAX #44 <http://unicode.org/reports/tr44/>:\n *\n * - Alphabetic\n * Characters with the Alphabetic property. Generated from: Lowercase + Uppercase + Lt + Lm +\n * Lo + Nl + Other_Alphabetic.\n *\n * - Default_Ignorable_Code_Point\n * For programmatic determination of default ignorable code points. New characters that should\n * be ignored in rendering (unless explicitly supported) will be assigned in these ranges,\n * permitting programs to correctly handle the default rendering of such characters when not\n * otherwise supported.\n *\n * - Lowercase\n * Characters with the Lowercase property. Generated from: Ll + Other_Lowercase.\n *\n * - Noncharacter_Code_Point\n * Code points permanently reserved for internal use.\n *\n * - Uppercase\n * Characters with the Uppercase property. Generated from: Lu + Other_Uppercase.\n *\n * - White_Space\n * Spaces, separator characters and other control characters which should be treated by\n * programming languages as \"white space\" for the purpose of parsing elements.\n *\n * The properties ASCII, Any, and Assigned are also included but are not defined in UAX #44. UTS\n * #18 RL1.2 additionally requires support for Unicode scripts and general categories. These are\n * included in XRegExp's Unicode Categories and Unicode Scripts addons.\n *\n * Token names are case insensitive, and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 14.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n\n if (!XRegExp.addUnicodeData) {\n throw new ReferenceError('Unicode Base must be loaded before Unicode Properties');\n }\n\n const unicodeData = properties;\n\n // Add non-generated data\n unicodeData.push({\n name: 'Assigned',\n // Since this is defined as the inverse of Unicode category Cn (Unassigned), the Unicode\n // Categories addon is required to use this property\n inverseOf: 'Cn'\n });\n\n XRegExp.addUnicodeData(unicodeData);\n};\n","/*!\n * XRegExp Unicode Scripts 5.1.1\n * <xregexp.com>\n * Steven Levithan (c) 2010-present MIT License\n * Unicode data by Mathias Bynens <mathiasbynens.be>\n */\n\nimport scripts from '../../tools/output/scripts';\n\nexport default (XRegExp) => {\n\n /**\n * Adds support for all Unicode scripts. E.g., `\\p{Latin}`. Token names are case insensitive,\n * and any spaces, hyphens, and underscores are ignored.\n *\n * Uses Unicode 14.0.0.\n *\n * @requires XRegExp, Unicode Base\n */\n\n if (!XRegExp.addUnicodeData) {\n throw new ReferenceError('Unicode Base must be loaded before Unicode Scripts');\n }\n\n XRegExp.addUnicodeData(scripts, 'Script');\n};\n","import XRegExp from './xregexp';\n\nimport build from './addons/build';\nimport matchRecursive from './addons/matchrecursive';\nimport unicodeBase from './addons/unicode-base';\nimport unicodeCategories from './addons/unicode-categories';\nimport unicodeProperties from './addons/unicode-properties';\nimport unicodeScripts from './addons/unicode-scripts';\n\nbuild(XRegExp);\nmatchRecursive(XRegExp);\nunicodeBase(XRegExp);\nunicodeCategories(XRegExp);\nunicodeProperties(XRegExp);\nunicodeScripts(XRegExp);\n\nexport default XRegExp;\n","function isBuffer (obj) {\n return obj &&\n obj.constructor &&\n (typeof obj.constructor.isBuffer === 'function') &&\n obj.constructor.isBuffer(obj)\n}\n\nfunction keyIdentity (key) {\n return key\n}\n\nexport function flatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const maxDepth = opts.maxDepth\n const transformKey = opts.transformKey || keyIdentity\n const output = {}\n\n function step (object, prev, currentDepth) {\n currentDepth = currentDepth || 1\n Object.keys(object).forEach(function (key) {\n const value = object[key]\n const isarray = opts.safe && Array.isArray(value)\n const type = Object.prototype.toString.call(value)\n const isbuffer = isBuffer(value)\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n const newKey = prev\n ? prev + delimiter + transformKey(key)\n : transformKey(key)\n\n if (!isarray && !isbuffer && isobject && Object.keys(value).length &&\n (!opts.maxDepth || currentDepth < maxDepth)) {\n return step(value, newKey, currentDepth + 1)\n }\n\n output[newKey] = value\n })\n }\n\n step(target)\n\n return output\n}\n\nexport function unflatten (target, opts) {\n opts = opts || {}\n\n const delimiter = opts.delimiter || '.'\n const overwrite = opts.overwrite || false\n const transformKey = opts.transformKey || keyIdentity\n const result = {}\n\n const isbuffer = isBuffer(target)\n if (isbuffer || Object.prototype.toString.call(target) !== '[object Object]') {\n return target\n }\n\n // safely ensure that the key is\n // an integer.\n function getkey (key) {\n const parsedKey = Number(key)\n\n return (\n isNaN(parsedKey) ||\n key.indexOf('.') !== -1 ||\n opts.object\n )\n ? key\n : parsedKey\n }\n\n function addKeys (keyPrefix, recipient, target) {\n return Object.keys(target).reduce(function (result, key) {\n result[keyPrefix + delimiter + key] = target[key]\n\n return result\n }, recipient)\n }\n\n function isEmpty (val) {\n const type = Object.prototype.toString.call(val)\n const isArray = type === '[object Array]'\n const isObject = type === '[object Object]'\n\n if (!val) {\n return true\n } else if (isArray) {\n return !val.length\n } else if (isObject) {\n return !Object.keys(val).length\n }\n }\n\n target = Object.keys(target).reduce(function (result, key) {\n const type = Object.prototype.toString.call(target[key])\n const isObject = (type === '[object Object]' || type === '[object Array]')\n if (!isObject || isEmpty(target[key])) {\n result[key] = target[key]\n return result\n } else {\n return addKeys(\n key,\n result,\n flatten(target[key], opts)\n )\n }\n }, {})\n\n Object.keys(target).forEach(function (key) {\n const split = key.split(delimiter).map(transformKey)\n let key1 = getkey(split.shift())\n let key2 = getkey(split[0])\n let recipient = result\n\n while (key2 !== undefined) {\n if (key1 === '__proto__') {\n return\n }\n\n const type = Object.prototype.toString.call(recipient[key1])\n const isobject = (\n type === '[object Object]' ||\n type === '[object Array]'\n )\n\n // do not write over falsey, non-undefined values if overwrite is false\n if (!overwrite && !isobject && typeof recipient[key1] !== 'undefined') {\n return\n }\n\n if ((overwrite && !isobject) || (!overwrite && recipient[key1] == null)) {\n recipient[key1] = (\n typeof key2 === 'number' &&\n !opts.object\n ? []\n : {}\n )\n }\n\n recipient = recipient[key1]\n if (split.length > 0) {\n key1 = getkey(split.shift())\n key2 = getkey(split[0])\n }\n }\n\n // unflatten again for 'messy objects'\n recipient[key1] = unflatten(target[key], opts)\n })\n\n return result\n}\n","import type {\n AnyEqualityComparator,\n Cache,\n CircularState,\n Dictionary,\n State,\n TypeEqualityComparator,\n} from './internalTypes';\n\nconst { getOwnPropertyNames, getOwnPropertySymbols } = Object;\nconst { hasOwnProperty } = Object.prototype;\n\n/**\n * Combine two comparators into a single comparators.\n */\nexport function combineComparators<Meta>(\n comparatorA: AnyEqualityComparator<Meta>,\n comparatorB: AnyEqualityComparator<Meta>,\n) {\n return function isEqual<A, B>(a: A, b: B, state: State<Meta>) {\n return comparatorA(a, b, state) && comparatorB(a, b, state);\n };\n}\n\n/**\n * Wrap the provided `areItemsEqual` method to manage the circular state, allowing\n * for circular references to be safely included in the comparison without creating\n * stack overflows.\n */\nexport function createIsCircular<\n AreItemsEqual extends TypeEqualityComparator<any, any>,\n>(areItemsEqual: AreItemsEqual): AreItemsEqual {\n return function isCircular(\n a: any,\n b: any,\n state: CircularState<Cache<any, any>>,\n ) {\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') {\n return areItemsEqual(a, b, state);\n }\n\n const { cache } = state;\n\n const cachedA = cache.get(a);\n const cachedB = cache.get(b);\n\n if (cachedA && cachedB) {\n return cachedA === b && cachedB === a;\n }\n\n cache.set(a, b);\n cache.set(b, a);\n\n const result = areItemsEqual(a, b, state);\n\n cache.delete(a);\n cache.delete(b);\n\n return result;\n } as AreItemsEqual;\n}\n\n/**\n * Get the properties to strictly examine, which include both own properties that are\n * not enumerable and symbol properties.\n */\nexport function getStrictProperties(\n object: Dictionary,\n): Array<string | symbol> {\n return (getOwnPropertyNames(object) as Array<string | symbol>).concat(\n getOwnPropertySymbols(object),\n );\n}\n\n/**\n * Whether the object contains the property passed as an own property.\n */\nexport const hasOwn =\n Object.hasOwn ||\n ((object: Dictionary, property: number | string | symbol) =>\n hasOwnProperty.call(object, property));\n\n/**\n * Whether the values passed are strictly equal or both NaN.\n */\nexport function sameValueZeroEqual(a: any, b: any): boolean {\n return a === b || (!a && !b && a !== a && b !== b);\n}\n","import { getStrictProperties, hasOwn, sameValueZeroEqual } from './utils';\nimport type {\n Dictionary,\n PrimitiveWrapper,\n State,\n TypedArray,\n} from './internalTypes';\n\nconst PREACT_VNODE = '__v';\nconst PREACT_OWNER = '__o';\nconst REACT_OWNER = '_owner';\n\nconst { getOwnPropertyDescriptor, keys } = Object;\n\n/**\n * Whether the arrays are equal in value.\n */\nexport function areArraysEqual(a: any[], b: any[], state: State<any>) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (!state.equals(a[index], b[index], index, index, a, b, state)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the dates passed are equal in value.\n */\nexport function areDatesEqual(a: Date, b: Date): boolean {\n return sameValueZeroEqual(a.getTime(), b.getTime());\n}\n\n/**\n * Whether the errors passed are equal in value.\n */\nexport function areErrorsEqual(a: Error, b: Error): boolean {\n return (\n a.name === b.name &&\n a.message === b.message &&\n a.cause === b.cause &&\n a.stack === b.stack\n );\n}\n\n/**\n * Whether the functions passed are equal in value.\n */\nexport function areFunctionsEqual(\n a: (...args: any[]) => any,\n b: (...args: any[]) => any,\n): boolean {\n return a === b;\n}\n\n/**\n * Whether the `Map`s are equal in value.\n */\nexport function areMapsEqual(\n a: Map<any, any>,\n b: Map<any, any>,\n state: State<any>,\n): boolean {\n const size = a.size;\n\n if (size !== b.size) {\n return false;\n }\n\n if (!size) {\n return true;\n }\n\n const matchedIndices: Array<true | undefined> = new Array(size);\n const aIterable = a.entries();\n\n let aResult: IteratorResult<[any, any]>;\n let bResult: IteratorResult<[any, any]>;\n let index = 0;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.entries();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (matchedIndices[matchIndex]) {\n matchIndex++;\n continue;\n }\n\n const aEntry = aResult.value;\n const bEntry = bResult.value;\n\n if (\n state.equals(aEntry[0], bEntry[0], index, matchIndex, a, b, state) &&\n state.equals(aEntry[1], bEntry[1], aEntry[0], bEntry[0], a, b, state)\n ) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n\n index++;\n }\n\n return true;\n}\n\n/**\n * Whether the numbers are equal in value.\n */\nexport const areNumbersEqual = sameValueZeroEqual;\n\n/**\n * Whether the objects are equal in value.\n */\nexport function areObjectsEqual(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = keys(a);\n\n let index = properties.length;\n\n if (keys(b).length !== index) {\n return false;\n }\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n if (!isPropertyEqual(a, b, state, properties[index]!)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the objects are equal in value with strict property checking.\n */\nexport function areObjectsEqualStrict(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n): boolean {\n const properties = getStrictProperties(a);\n\n let index = properties.length;\n\n if (getStrictProperties(b).length !== index) {\n return false;\n }\n\n let property: string | symbol;\n let descriptorA: ReturnType<typeof getOwnPropertyDescriptor>;\n let descriptorB: ReturnType<typeof getOwnPropertyDescriptor>;\n\n // Decrementing `while` showed faster results than either incrementing or\n // decrementing `for` loop and than an incrementing `while` loop. Declarative\n // methods like `some` / `every` were not used to avoid incurring the garbage\n // cost of anonymous callbacks.\n while (index-- > 0) {\n property = properties[index]!;\n\n if (!isPropertyEqual(a, b, state, property)) {\n return false;\n }\n\n descriptorA = getOwnPropertyDescriptor(a, property);\n descriptorB = getOwnPropertyDescriptor(b, property);\n\n if (\n (descriptorA || descriptorB) &&\n (!descriptorA ||\n !descriptorB ||\n descriptorA.configurable !== descriptorB.configurable ||\n descriptorA.enumerable !== descriptorB.enumerable ||\n descriptorA.writable !== descriptorB.writable)\n ) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the primitive wrappers passed are equal in value.\n */\nexport function arePrimitiveWrappersEqual(\n a: PrimitiveWrapper,\n b: PrimitiveWrapper,\n): boolean {\n return sameValueZeroEqual(a.valueOf(), b.valueOf());\n}\n\n/**\n * Whether the regexps passed are equal in value.\n */\nexport function areRegExpsEqual(a: RegExp, b: RegExp): boolean {\n return a.source === b.source && a.flags === b.flags;\n}\n\n/**\n * Whether the `Set`s are equal in value.\n */\nexport function areSetsEqual(\n a: Set<any>,\n b: Set<any>,\n state: State<any>,\n): boolean {\n const size = a.size;\n\n if (size !== b.size) {\n return false;\n }\n\n if (!size) {\n return true;\n }\n\n const matchedIndices: Array<true | undefined> = new Array(size);\n const aIterable = a.values();\n\n let aResult: IteratorResult<any>;\n let bResult: IteratorResult<any>;\n\n while ((aResult = aIterable.next())) {\n if (aResult.done) {\n break;\n }\n\n const bIterable = b.values();\n\n let hasMatch = false;\n let matchIndex = 0;\n\n while ((bResult = bIterable.next())) {\n if (bResult.done) {\n break;\n }\n\n if (\n !matchedIndices[matchIndex] &&\n state.equals(\n aResult.value,\n bResult.value,\n aResult.value,\n bResult.value,\n a,\n b,\n state,\n )\n ) {\n hasMatch = matchedIndices[matchIndex] = true;\n break;\n }\n\n matchIndex++;\n }\n\n if (!hasMatch) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the TypedArray instances are equal in value.\n */\nexport function areTypedArraysEqual(a: TypedArray, b: TypedArray) {\n let index = a.length;\n\n if (b.length !== index) {\n return false;\n }\n\n while (index-- > 0) {\n if (a[index] !== b[index]) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Whether the URL instances are equal in value.\n */\nexport function areUrlsEqual(a: URL, b: URL): boolean {\n return (\n a.hostname === b.hostname &&\n a.pathname === b.pathname &&\n a.protocol === b.protocol &&\n a.port === b.port &&\n a.hash === b.hash &&\n a.username === b.username &&\n a.password === b.password\n );\n}\n\nfunction isPropertyEqual(\n a: Dictionary,\n b: Dictionary,\n state: State<any>,\n property: string | symbol,\n) {\n if (\n (property === REACT_OWNER ||\n property === PREACT_OWNER ||\n property === PREACT_VNODE) &&\n (a.$$typeof || b.$$typeof)\n ) {\n return true;\n }\n\n return (\n hasOwn(b, property) &&\n state.equals(a[property], b[property], property, property, a, b, state)\n );\n}\n","import {\n areArraysEqual as areArraysEqualDefault,\n areDatesEqual as areDatesEqualDefault,\n areErrorsEqual as areErrorsEqualDefault,\n areFunctionsEqual as areFunctionsEqualDefault,\n areMapsEqual as areMapsEqualDefault,\n areNumbersEqual as areNumbersEqualDefault,\n areObjectsEqual as areObjectsEqualDefault,\n areObjectsEqualStrict as areObjectsEqualStrictDefault,\n arePrimitiveWrappersEqual as arePrimitiveWrappersEqualDefault,\n areRegExpsEqual as areRegExpsEqualDefault,\n areSetsEqual as areSetsEqualDefault,\n areTypedArraysEqual as areTypedArraysEqualDefault,\n areUrlsEqual as areUrlsEqualDefault,\n} from './equals';\nimport { combineComparators, createIsCircular } from './utils';\nimport type {\n ComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n EqualityComparator,\n InternalEqualityComparator,\n State,\n} from './internalTypes';\n\nconst ARGUMENTS_TAG = '[object Arguments]';\nconst BOOLEAN_TAG = '[object Boolean]';\nconst DATE_TAG = '[object Date]';\nconst ERROR_TAG = '[object Error]';\nconst MAP_TAG = '[object Map]';\nconst NUMBER_TAG = '[object Number]';\nconst OBJECT_TAG = '[object Object]';\nconst REG_EXP_TAG = '[object RegExp]';\nconst SET_TAG = '[object Set]';\nconst STRING_TAG = '[object String]';\nconst URL_TAG = '[object URL]';\n\nconst { isArray } = Array;\nconst isTypedArray =\n typeof ArrayBuffer === 'function' && ArrayBuffer.isView\n ? ArrayBuffer.isView\n : null;\nconst { assign } = Object;\nconst getTag = Object.prototype.toString.call.bind(\n Object.prototype.toString,\n) as (a: object) => string;\n\ninterface CreateIsEqualOptions<Meta> {\n circular: boolean;\n comparator: EqualityComparator<Meta>;\n createState: CreateState<Meta> | undefined;\n equals: InternalEqualityComparator<Meta>;\n strict: boolean;\n}\n\n/**\n * Create a comparator method based on the type-specific equality comparators passed.\n */\nexport function createEqualityComparator<Meta>({\n areArraysEqual,\n areDatesEqual,\n areErrorsEqual,\n areFunctionsEqual,\n areMapsEqual,\n areNumbersEqual,\n areObjectsEqual,\n arePrimitiveWrappersEqual,\n areRegExpsEqual,\n areSetsEqual,\n areTypedArraysEqual,\n areUrlsEqual,\n}: ComparatorConfig<Meta>): EqualityComparator<Meta> {\n /**\n * compare the value of the two objects and return true if they are equivalent in values\n */\n return function comparator(a: any, b: any, state: State<Meta>): boolean {\n // If the items are strictly equal, no need to do a value comparison.\n if (a === b) {\n return true;\n }\n\n // If either of the items are nullish and fail the strictly equal check\n // above, then they must be unequal.\n if (a == null || b == null) {\n return false;\n }\n\n const type = typeof a;\n\n if (type !== typeof b) {\n return false;\n }\n\n if (type !== 'object') {\n if (type === 'number') {\n return areNumbersEqual(a, b, state);\n }\n\n if (type === 'function') {\n return areFunctionsEqual(a, b, state);\n }\n\n // If a primitive value that is not strictly equal, it must be unequal.\n return false;\n }\n\n const constructor = a.constructor;\n\n // Checks are listed in order of commonality of use-case:\n // 1. Common complex object types (plain object, array)\n // 2. Common data values (date, regexp)\n // 3. Less-common complex object types (map, set)\n // 4. Less-common data values (promise, primitive wrappers)\n // Inherently this is both subjective and assumptive, however\n // when reviewing comparable libraries in the wild this order\n // appears to be generally consistent.\n\n // Constructors should match, otherwise there is potential for false positives\n // between class and subclass or custom object and POJO.\n if (constructor !== b.constructor) {\n return false;\n }\n\n // `isPlainObject` only checks against the object's own realm. Cross-realm\n // comparisons are rare, and will be handled in the ultimate fallback, so\n // we can avoid capturing the string tag.\n if (constructor === Object) {\n return areObjectsEqual(a, b, state);\n }\n\n // `isArray()` works on subclasses and is cross-realm, so we can avoid capturing\n // the string tag or doing an `instanceof` check.\n if (isArray(a)) {\n return areArraysEqual(a, b, state);\n }\n\n // `isTypedArray()` works on all possible TypedArray classes, so we can avoid\n // capturing the string tag or comparing against all possible constructors.\n if (isTypedArray != null && isTypedArray(a)) {\n return areTypedArraysEqual(a, b, state);\n }\n\n // Try to fast-path equality checks for other complex object types in the\n // same realm to avoid capturing the string tag. Strict equality is used\n // instead of `instanceof` because it is more performant for the common\n // use-case. If someone is subclassing a native class, it will be handled\n // with the string tag comparison.\n\n if (constructor === Date) {\n return areDatesEqual(a, b, state);\n }\n\n if (constructor === RegExp) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (constructor === Map) {\n return areMapsEqual(a, b, state);\n }\n\n if (constructor === Set) {\n return areSetsEqual(a, b, state);\n }\n\n // Since this is a custom object, capture the string tag to determing its type.\n // This is reasonably performant in modern environments like v8 and SpiderMonkey.\n const tag = getTag(a);\n\n if (tag === DATE_TAG) {\n return areDatesEqual(a, b, state);\n }\n\n // For RegExp, the properties are not enumerable, and therefore will give false positives if\n // tested like a standard object.\n if (tag === REG_EXP_TAG) {\n return areRegExpsEqual(a, b, state);\n }\n\n if (tag === MAP_TAG) {\n return areMapsEqual(a, b, state);\n }\n\n if (tag === SET_TAG) {\n return areSetsEqual(a, b, state);\n }\n\n if (tag === OBJECT_TAG) {\n // The exception for value comparison is custom `Promise`-like class instances. These should\n // be treated the same as standard `Promise` objects, which means strict equality, and if\n // it reaches this point then that strict equality comparison has already failed.\n return (\n typeof a.then !== 'function' &&\n typeof b.then !== 'function' &&\n areObjectsEqual(a, b, state)\n );\n }\n\n // If a URL tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n if (tag === URL_TAG) {\n return areUrlsEqual(a, b, state);\n }\n\n // If an error tag, it should be tested explicitly. Like RegExp, the properties are not\n // enumerable, and therefore will give false positives if tested like a standard object.\n if (tag === ERROR_TAG) {\n return areErrorsEqual(a, b, state);\n }\n\n // If an arguments tag, it should be treated as a standard object.\n if (tag === ARGUMENTS_TAG) {\n return areObjectsEqual(a, b, state);\n }\n\n // As the penultimate fallback, check if the values passed are primitive wrappers. This\n // is very rare in modern JS, which is why it is deprioritized compared to all other object\n // types.\n if (tag === BOOLEAN_TAG || tag === NUMBER_TAG || tag === STRING_TAG) {\n return arePrimitiveWrappersEqual(a, b, state);\n }\n\n // If not matching any tags that require a specific type of comparison, then we hard-code false because\n // the only thing remaining is strict equality, which has already been compared. This is for a few reasons:\n // - Certain types that cannot be introspected (e.g., `WeakMap`). For these types, this is the only\n // comparison that can be made.\n // - For types that can be introspected, but rarely have requirements to be compared\n // (`ArrayBuffer`, `DataView`, etc.), the cost is avoided to prioritize the common\n // use-cases (may be included in a future release, if requested enough).\n // - For types that can be introspected but do not have an objective definition of what\n // equality is (`Error`, etc.), the subjective decision is to be conservative and strictly compare.\n // In all cases, these decisions should be reevaluated based on changes to the language and\n // common development practices.\n return false;\n };\n}\n\n/**\n * Create the configuration object used for building comparators.\n */\nexport function createEqualityComparatorConfig<Meta>({\n circular,\n createCustomConfig,\n strict,\n}: CustomEqualCreatorOptions<Meta>): ComparatorConfig<Meta> {\n let config = {\n areArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areArraysEqualDefault,\n areDatesEqual: areDatesEqualDefault,\n areErrorsEqual: areErrorsEqualDefault,\n areFunctionsEqual: areFunctionsEqualDefault,\n areMapsEqual: strict\n ? combineComparators(areMapsEqualDefault, areObjectsEqualStrictDefault)\n : areMapsEqualDefault,\n areNumbersEqual: areNumbersEqualDefault,\n areObjectsEqual: strict\n ? areObjectsEqualStrictDefault\n : areObjectsEqualDefault,\n arePrimitiveWrappersEqual: arePrimitiveWrappersEqualDefault,\n areRegExpsEqual: areRegExpsEqualDefault,\n areSetsEqual: strict\n ? combineComparators(areSetsEqualDefault, areObjectsEqualStrictDefault)\n : areSetsEqualDefault,\n areTypedArraysEqual: strict\n ? areObjectsEqualStrictDefault\n : areTypedArraysEqualDefault,\n areUrlsEqual: areUrlsEqualDefault,\n };\n\n if (createCustomConfig) {\n config = assign({}, config, createCustomConfig(config));\n }\n\n if (circular) {\n const areArraysEqual = createIsCircular(config.areArraysEqual);\n const areMapsEqual = createIsCircular(config.areMapsEqual);\n const areObjectsEqual = createIsCircular(config.areObjectsEqual);\n const areSetsEqual = createIsCircular(config.areSetsEqual);\n\n config = assign({}, config, {\n areArraysEqual,\n areMapsEqual,\n areObjectsEqual,\n areSetsEqual,\n });\n }\n\n return config;\n}\n\n/**\n * Default equality comparator pass-through, used as the standard `isEqual` creator for\n * use inside the built comparator.\n */\nexport function createInternalEqualityComparator<Meta>(\n compare: EqualityComparator<Meta>,\n): InternalEqualityComparator<Meta> {\n return function (\n a: any,\n b: any,\n _indexOrKeyA: any,\n _indexOrKeyB: any,\n _parentA: any,\n _parentB: any,\n state: State<Meta>,\n ) {\n return compare(a, b, state);\n };\n}\n\n/**\n * Create the `isEqual` function used by the consuming application.\n */\nexport function createIsEqual<Meta>({\n circular,\n comparator,\n createState,\n equals,\n strict,\n}: CreateIsEqualOptions<Meta>) {\n if (createState) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n const { cache = circular ? new WeakMap() : undefined, meta } =\n createState!();\n\n return comparator(a, b, {\n cache,\n equals,\n meta,\n strict,\n } as State<Meta>);\n };\n }\n\n if (circular) {\n return function isEqual<A, B>(a: A, b: B): boolean {\n return comparator(a, b, {\n cache: new WeakMap(),\n equals,\n meta: undefined as Meta,\n strict,\n } as State<Meta>);\n };\n }\n\n const state = {\n cache: undefined,\n equals,\n meta: undefined,\n strict,\n } as State<Meta>;\n\n return function isEqual<A, B>(a: A, b: B): boolean {\n return comparator(a, b, state);\n };\n}\n","import {\n createEqualityComparatorConfig,\n createEqualityComparator,\n createInternalEqualityComparator,\n createIsEqual,\n} from './comparator';\nimport type { CustomEqualCreatorOptions } from './internalTypes';\nimport { sameValueZeroEqual } from './utils';\n\nexport { sameValueZeroEqual };\nexport type {\n AnyEqualityComparator,\n Cache,\n CircularState,\n ComparatorConfig,\n CreateCustomComparatorConfig,\n CreateState,\n CustomEqualCreatorOptions,\n DefaultState,\n Dictionary,\n EqualityComparator,\n EqualityComparatorCreator,\n InternalEqualityComparator,\n PrimitiveWrapper,\n State,\n TypeEqualityComparator,\n TypedArray,\n} from './internalTypes';\n\n/**\n * Whether the items passed are deeply-equal in value.\n */\nexport const deepEqual = createCustomEqual();\n\n/**\n * Whether the items passed are deeply-equal in value based on strict comparison.\n */\nexport const strictDeepEqual = createCustomEqual({ strict: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references.\n */\nexport const circularDeepEqual = createCustomEqual({ circular: true });\n\n/**\n * Whether the items passed are deeply-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularDeepEqual = createCustomEqual({\n circular: true,\n strict: true,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value.\n */\nexport const shallowEqual = createCustomEqual({\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value based on strict comparison\n */\nexport const strictShallowEqual = createCustomEqual({\n strict: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references.\n */\nexport const circularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n});\n\n/**\n * Whether the items passed are shallowly-equal in value, including circular references,\n * based on strict comparison.\n */\nexport const strictCircularShallowEqual = createCustomEqual({\n circular: true,\n createInternalComparator: () => sameValueZeroEqual,\n strict: true,\n});\n\n/**\n * Create a custom equality comparison method.\n *\n * This can be done to create very targeted comparisons in extreme hot-path scenarios\n * where the standard methods are not performant enough, but can also be used to provide\n * support for legacy environments that do not support expected features like\n * `RegExp.prototype.flags` out of the box.\n */\nexport function createCustomEqual<Meta = undefined>(\n options: CustomEqualCreatorOptions<Meta> = {},\n) {\n const {\n circular = false,\n createInternalComparator: createCustomInternalComparator,\n createState,\n strict = false,\n } = options;\n\n const config = createEqualityComparatorConfig<Meta>(options);\n const comparator = createEqualityComparator(config);\n const equals = createCustomInternalComparator\n ? createCustomInternalComparator(comparator)\n : createInternalEqualityComparator(comparator);\n\n return createIsEqual({ circular, comparator, createState, equals, strict });\n}\n","function getType(payload) {\n return Object.prototype.toString.call(payload).slice(8, -1);\n}\n\nfunction isAnyObject(payload) {\n return getType(payload) === \"Object\";\n}\n\nfunction isArray(payload) {\n return getType(payload) === \"Array\";\n}\n\nfunction isBlob(payload) {\n return getType(payload) === \"Blob\";\n}\n\nfunction isBoolean(payload) {\n return getType(payload) === \"Boolean\";\n}\n\nfunction isDate(payload) {\n return getType(payload) === \"Date\" && !isNaN(payload);\n}\n\nfunction isEmptyArray(payload) {\n return isArray(payload) && payload.length === 0;\n}\n\nfunction isPlainObject(payload) {\n if (getType(payload) !== \"Object\")\n return false;\n const prototype = Object.getPrototypeOf(payload);\n return !!prototype && prototype.constructor === Object && prototype === Object.prototype;\n}\n\nfunction isEmptyObject(payload) {\n return isPlainObject(payload) && Object.keys(payload).length === 0;\n}\n\nfunction isEmptyString(payload) {\n return payload === \"\";\n}\n\nfunction isError(payload) {\n return getType(payload) === \"Error\" || payload instanceof Error;\n}\n\nfunction isFile(payload) {\n return getType(payload) === \"File\";\n}\n\nfunction isFullArray(payload) {\n return isArray(payload) && payload.length > 0;\n}\n\nfunction isFullObject(payload) {\n return isPlainObject(payload) && Object.keys(payload).length > 0;\n}\n\nfunction isString(payload) {\n return getType(payload) === \"String\";\n}\n\nfunction isFullString(payload) {\n return isString(payload) && payload !== \"\";\n}\n\nfunction isFunction(payload) {\n return typeof payload === \"function\";\n}\n\nfunction isType(payload, type) {\n if (!(type instanceof Function)) {\n throw new TypeError(\"Type must be a function\");\n }\n if (!Object.prototype.hasOwnProperty.call(type, \"prototype\")) {\n throw new TypeError(\"Type is not a class\");\n }\n const name = type.name;\n return getType(payload) === name || Boolean(payload && payload.constructor === type);\n}\n\nfunction isInstanceOf(value, classOrClassName) {\n if (typeof classOrClassName === \"function\") {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (isType(p, classOrClassName)) {\n return true;\n }\n }\n return false;\n } else {\n for (let p = value; p; p = Object.getPrototypeOf(p)) {\n if (getType(p) === classOrClassName) {\n return true;\n }\n }\n return false;\n }\n}\n\nfunction isMap(payload) {\n return getType(payload) === \"Map\";\n}\n\nfunction isNaNValue(payload) {\n return getType(payload) === \"Number\" && isNaN(payload);\n}\n\nfunction isNumber(payload) {\n return getType(payload) === \"Number\" && !isNaN(payload);\n}\n\nfunction isNegativeNumber(payload) {\n return isNumber(payload) && payload < 0;\n}\n\nfunction isNull(payload) {\n return getType(payload) === \"Null\";\n}\n\nfunction isOneOf(a, b, c, d, e) {\n return (value) => a(value) || b(value) || !!c && c(value) || !!d && d(value) || !!e && e(value);\n}\n\nfunction isUndefined(payload) {\n return getType(payload) === \"Undefined\";\n}\n\nconst isNullOrUndefined = isOneOf(isNull, isUndefined);\n\nfunction isObject(payload) {\n return isPlainObject(payload);\n}\n\nfunction isObjectLike(payload) {\n return isAnyObject(payload);\n}\n\nfunction isPositiveNumber(payload) {\n return isNumber(payload) && payload > 0;\n}\n\nfunction isSymbol(payload) {\n return getType(payload) === \"Symbol\";\n}\n\nfunction isPrimitive(payload) {\n return isBoolean(payload) || isNull(payload) || isUndefined(payload) || isNumber(payload) || isString(payload) || isSymbol(payload);\n}\n\nfunction isPromise(payload) {\n return getType(payload) === \"Promise\";\n}\n\nfunction isRegExp(payload) {\n return getType(payload) === \"RegExp\";\n}\n\nfunction isSet(payload) {\n return getType(payload) === \"Set\";\n}\n\nfunction isWeakMap(payload) {\n return getType(payload) === \"WeakMap\";\n}\n\nfunction isWeakSet(payload) {\n return getType(payload) === \"WeakSet\";\n}\n\nexport { getType, isAnyObject, isArray, isBlob, isBoolean, isDate, isEmptyArray, isEmptyObject, isEmptyString, isError, isFile, isFullArray, isFullObject, isFullString, isFunction, isInstanceOf, isMap, isNaNValue, isNegativeNumber, isNull, isNullOrUndefined, isNumber, isObject, isObjectLike, isOneOf, isPlainObject, isPositiveNumber, isPrimitive, isPromise, isRegExp, isSet, isString, isSymbol, isType, isUndefined, isWeakMap, isWeakSet };\n","import { isArray, isPlainObject, isSymbol } from 'is-what';\n\nfunction concatArrays(originVal, newVal) {\n if (isArray(originVal) && isArray(newVal)) {\n return originVal.concat(newVal);\n }\n return newVal;\n}\n\nfunction assignProp(carry, key, newVal, originalObject) {\n const propType = {}.propertyIsEnumerable.call(originalObject, key) ? \"enumerable\" : \"nonenumerable\";\n if (propType === \"enumerable\")\n carry[key] = newVal;\n if (propType === \"nonenumerable\") {\n Object.defineProperty(carry, key, {\n value: newVal,\n enumerable: false,\n writable: true,\n configurable: true\n });\n }\n}\nfunction mergeRecursively(origin, newComer, compareFn) {\n if (!isPlainObject(newComer))\n return newComer;\n let newObject = {};\n if (isPlainObject(origin)) {\n const props2 = Object.getOwnPropertyNames(origin);\n const symbols2 = Object.getOwnPropertySymbols(origin);\n newObject = [...props2, ...symbols2].reduce((carry, key) => {\n const targetVal = origin[key];\n if (!isSymbol(key) && !Object.getOwnPropertyNames(newComer).includes(key) || isSymbol(key) && !Object.getOwnPropertySymbols(newComer).includes(key)) {\n assignProp(\n carry,\n key,\n targetVal,\n origin\n );\n }\n return carry;\n }, {});\n }\n const props = Object.getOwnPropertyNames(newComer);\n const symbols = Object.getOwnPropertySymbols(newComer);\n const result = [...props, ...symbols].reduce((carry, key) => {\n let newVal = newComer[key];\n const targetVal = isPlainObject(origin) ? origin[key] : void 0;\n if (targetVal !== void 0 && isPlainObject(newVal)) {\n newVal = mergeRecursively(targetVal, newVal, compareFn);\n }\n const propToAssign = compareFn ? compareFn(targetVal, newVal, key) : newVal;\n assignProp(\n carry,\n key,\n propToAssign,\n newComer\n );\n return carry;\n }, newObject);\n return result;\n}\nfunction merge(object, ...otherObjects) {\n return otherObjects.reduce((result, newComer) => {\n return mergeRecursively(result, newComer);\n }, object);\n}\nfunction mergeAndCompare(compareFn, object, ...otherObjects) {\n return otherObjects.reduce((result, newComer) => {\n return mergeRecursively(result, newComer, compareFn);\n }, object);\n}\nfunction mergeAndConcat(object, ...otherObjects) {\n return otherObjects.reduce((result, newComer) => {\n return mergeRecursively(result, newComer, concatArrays);\n }, object);\n}\n\nexport { concatArrays, merge, mergeAndCompare, mergeAndConcat };\n","/**\n * A function that validates whether the given input is an object of type Type\n * @returns true if obj is of type Type, false if not\n */\nexport type FilterFn<Type extends Record<string, unknown>> = (\n obj: unknown,\n) => obj is Type;\n\n/**\n * The supported value types\n */\nexport type ValueType = number | string | boolean | null | Date | object;\n\n/**\n * A function implementing a FilterOperators\n * @param columnValue the value of the input object to test the filter against\n * @param filterValue the value of the filter, e.g. in .eq('colname', 'filterValue'), 'filterValue' would be the filterValue\n * @returns true if the filter applies, false if not\n */\nexport type OperatorFn = (columnValue: any, filterValue: any) => boolean;\n\n/**\n * All supported operators of PostgREST\n */\nexport type FilterOperator =\n | 'or'\n | 'eq'\n | 'neq'\n | 'gt'\n | 'gte'\n | 'lt'\n | 'lte'\n | 'like'\n | 'ilike'\n | 'is'\n | 'in'\n | 'cs'\n | 'cd'\n | 'fts'\n | 'plfts';\n\n/**\n * An object describing a selected path of a query\n *\n */\nexport type Path = {\n /**\n * The aliased path if a column or relation name mapping is used within the path\n */\n alias?: string;\n /**\n * The \"real\" path of a column\n */\n path: string;\n /**\n * The full declaration of a column that includes alias, hints and inner joins\n */\n declaration: string;\n /**\n * The aggregate function applied to the path\n */\n aggregate?: string;\n};\n\n/**\n * A decomposed filter applied to a query\n */\nexport type FilterDefinition = {\n /**\n * The path to which the filter is applied\n */\n path: string;\n /**\n * The aliased path if a column or relation name mapping is used\n */\n alias?: string;\n /**\n * The operator that is applied\n */\n operator: FilterOperator;\n /**\n * Whether or not to negate the results of the filter, e.g. when .not('name', 'eq', 'Paris') is applied\n */\n negate: boolean;\n /**\n * The value of the filter\n */\n value: ValueType;\n};\n\n/**\n * A json representation of PostgREST filters that are applied to a query\n */\nexport type FilterDefinitions = (\n | { or: FilterDefinitions }\n | { and: FilterDefinitions }\n | FilterDefinition\n)[];\n\ntype ArrayElement<ArrayType extends readonly unknown[]> =\n ArrayType extends readonly (infer ElementType)[] ? ElementType : never;\n\nexport const isAndFilter = (\n f: ArrayElement<FilterDefinitions>,\n): f is { and: FilterDefinitions } =>\n Array.isArray((f as { and: FilterDefinitions }).and);\n\nexport const isOrFilter = (\n f: ArrayElement<FilterDefinitions>,\n): f is { or: FilterDefinitions } =>\n Array.isArray((f as { or: FilterDefinitions }).or);\n\nexport const isFilterDefinition = (\n f: ArrayElement<FilterDefinitions>,\n): f is FilterDefinition => !isAndFilter(f) && !isOrFilter(f);\n\nexport type OrderDefinition = {\n column: string;\n ascending: boolean;\n nullsFirst: boolean;\n foreignTable?: string;\n};\n","import {\n type FilterDefinitions,\n type Path,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\nexport const extractPathsFromFilters = (f: FilterDefinitions, p: Path[]) => {\n return f.reduce<Path[]>((prev, filter) => {\n if (isAndFilter(filter)) {\n prev.push(...extractPathsFromFilters(filter.and, p));\n } else if (isOrFilter(filter)) {\n prev.push(...extractPathsFromFilters(filter.or, p));\n } else if (isFilterDefinition(filter)) {\n const relatedPath = p.find((p) => p.path === filter.path);\n const pathElements = filter.path.split('.');\n const aliasElements = filter.alias?.split('.');\n const declaration = pathElements\n .map(\n (el, idx) =>\n `${aliasElements && aliasElements[idx] !== el ? `${aliasElements[idx]}:` : ''}${el}`,\n )\n .join('.');\n prev.push({\n path: filter.path,\n alias: filter.alias,\n declaration: relatedPath ? relatedPath.declaration : declaration,\n });\n }\n return prev;\n }, []);\n};\n","import type { Path } from './query-types';\n\nexport const removeFirstPathElement = (p: Path): Path => {\n const aliasWithoutFirstElement = p.alias\n ? p.alias.split('.').slice(1).join('.')\n : undefined;\n const pathWithoutFirstEelment = p.path.split('.').slice(1).join('.');\n\n return {\n declaration: p.declaration.split('.').slice(1).join('.'),\n path: pathWithoutFirstEelment,\n alias:\n aliasWithoutFirstElement &&\n (aliasWithoutFirstElement.split('.').length > 1 ||\n aliasWithoutFirstElement !== pathWithoutFirstEelment)\n ? aliasWithoutFirstElement\n : undefined,\n };\n};\n","import type { Path } from './query-types';\nimport { removeFirstPathElement } from './remove-first-path-element';\n\nexport type NestedPath = {\n alias?: string;\n path: string;\n declaration: string;\n paths: (Path | NestedPath)[];\n};\n\nexport const isNestedPath = (p: Path | NestedPath): p is NestedPath =>\n Array.isArray((p as NestedPath).paths);\n\n// group paths by first path elements declaration\n// returns [Path, Path, NestedPath, NestedPath, Path]\nexport const groupPathsRecursive = (paths: Path[]): (Path | NestedPath)[] => {\n const grouped = paths.reduce<(Path | NestedPath)[]>((prev, curr) => {\n const levels = curr.path.split('.').length;\n if (levels === 1) {\n prev.push(curr);\n return prev;\n }\n\n // if has more than one level left,\n const firstLevelDeclaration = curr.declaration.split('.')[0];\n const indexOfNested = prev.findIndex(\n (p) => isNestedPath(p) && p.declaration === firstLevelDeclaration,\n );\n const pathWithoutCurrentLevel = removeFirstPathElement(curr);\n if (indexOfNested !== -1) {\n // add to nested\n (prev[indexOfNested] as NestedPath).paths.push(pathWithoutCurrentLevel);\n return prev;\n }\n // create nested\n prev.push({\n declaration: firstLevelDeclaration,\n path: curr.path.split('.')[0],\n paths: [pathWithoutCurrentLevel],\n ...(curr.alias ? { alias: curr.alias.split('.')[0] } : {}),\n });\n return prev;\n }, []);\n\n return grouped.map((p) =>\n isNestedPath(p) ? { ...p, paths: groupPathsRecursive(p.paths) } : p,\n );\n};\n","import XRegExp from 'xregexp';\n\nimport type { Path } from './query-types';\n\nexport const parseSelectParam = (s: string, currentPath?: Path): Path[] => {\n s = s.replace(/\\s/g, '');\n\n let result;\n try {\n result = XRegExp.matchRecursive(`,${s}`, '([^,\\\\(]+)\\\\(', '\\\\)', 'g', {\n valueNames: {\n '0': null,\n '1': 'tableName',\n '2': 'selectedColumns',\n '3': null,\n },\n }).map((item) => {\n if (\n item.name === 'tableName' &&\n item.value &&\n !item.value.startsWith(',')\n ) {\n item.value = ',' + item.value;\n }\n return item;\n });\n } catch (e) {\n const path = currentPath?.path\n ? `${currentPath?.declaration} with alias ${currentPath?.alias} at path ${currentPath?.path}`\n : 'root';\n throw new Error(`Unable to parse ${s} at ${path}`, {\n cause: e,\n });\n }\n\n const foreignTables = result.reduce((prev, curr, idx, matches) => {\n if (curr.name === 'selectedColumns' && curr.value.length > 0) {\n const name = matches[idx - 1].value.slice(1, -1);\n prev = { ...prev, [name]: curr.value };\n }\n return prev;\n }, {});\n\n const columns = s\n .replace(\n new RegExp(\n `${Object.entries(foreignTables)\n .map(([table, selectedColumns]) =>\n `${table}(${selectedColumns})`\n .replace(/\\(/g, '\\\\(')\n .replace(/\\)/g, '\\\\)')\n .replace(/\\*/g, '\\\\*'),\n )\n .join('|')}`,\n 'g',\n ),\n '',\n )\n .replace(/(,)\\1+/g, ',')\n .split(',')\n .filter((c) => c.length > 0)\n .map((c) => {\n const split = c.split(':');\n const hasAlias = split.length > 1;\n\n const aggregateSplit = split[hasAlias ? 1 : 0].split('.');\n const hasAggregate =\n aggregateSplit.length > 1 && aggregateSplit[1].endsWith('()');\n\n return {\n declaration: [currentPath?.declaration, c].filter(Boolean).join('.'),\n alias:\n hasAlias || currentPath?.alias\n ? [currentPath?.alias ?? currentPath?.path, split[0]]\n .filter(Boolean)\n .join('.')\n : undefined,\n path: [\n currentPath?.path,\n hasAggregate ? aggregateSplit[0] : split[hasAlias ? 1 : 0],\n ]\n .filter(Boolean)\n .join('.'),\n ...(hasAggregate ? { aggregate: aggregateSplit[1].slice(0, -2) } : {}),\n };\n });\n\n return [\n ...columns,\n ...Object.entries(foreignTables).flatMap(\n ([currentDeclaration, selectedColumns]) => {\n // example for declaration\n // alias:organisation!contact_organisation_id_fkey!inner\n const aliasSplit = currentDeclaration.split(':');\n\n const currentAliasElem =\n aliasSplit.length > 1 ? aliasSplit[0] : undefined;\n\n const currentPathDeclaration = aliasSplit[aliasSplit.length - 1];\n const currentPathElem = currentPathDeclaration.split('!')[0];\n\n const path = [currentPath?.path, currentPathElem]\n .filter(Boolean)\n .join('.');\n\n const alias = [\n currentPath?.alias ?? currentPath?.path,\n currentAliasElem ?? currentPathElem,\n ]\n .filter(Boolean)\n .join('.');\n\n const declaration = [currentPath?.declaration, currentDeclaration]\n .filter(Boolean)\n .join('.');\n\n return parseSelectParam(`${selectedColumns}`, {\n path,\n alias: currentPath?.alias || currentAliasElem ? alias : undefined,\n declaration,\n });\n },\n ),\n ];\n};\n","// removes alias from every level of declaration\nexport const removeAliasFromDeclaration = (d: string) =>\n d\n .split('.')\n .map((el) => el.split(':').pop() as string)\n .join('.');\n","import {\n type NestedPath,\n groupPathsRecursive,\n isNestedPath,\n} from '../lib/group-paths-recursive';\nimport type { Path } from '../lib/query-types';\n\n// Transforms a list of Path[] into a select statement\nexport const buildSelectStatement = (paths: Path[]): string => {\n return buildSelectStatementFromGroupedPaths(groupPathsRecursive(paths));\n};\n\n// Transforms a list of (Path | NestedPath)[] grouped statements into a select statement\nexport const buildSelectStatementFromGroupedPaths = (\n paths: (Path | NestedPath)[],\n): string =>\n paths\n .map((i) => {\n if (isNestedPath(i)) {\n return `${i.declaration}(${buildSelectStatement(i.paths)})`;\n }\n return `${i.alias ? `${i.alias}:` : ''}${i.path}`;\n })\n .join(',');\n","import { type NestedPath, isNestedPath } from '../lib/group-paths-recursive';\nimport type { Path } from '../lib/query-types';\n\nexport const DEDUPE_ALIAS_PREFIX = 'd';\n\nexport const dedupeGroupedPathsRecursive = (\n grouped: (Path | NestedPath)[],\n): (Path | NestedPath)[] => {\n const dedupeCounters = new Map<string, number>();\n\n return grouped.map((p, idx, a) => {\n // never dedupe non-nested paths because even if there is a duplicate we always want to dedupe the nested path instead\n // e.g. inbox_id,inbox_id(name) should be deduped to inbox_id,d_0_inbox_id:inbox_id(name)\n if (!isNestedPath(p)) return p;\n\n // dedupe current nested path if there is another path with the same `path`\n if (a.some((i, itemIdx) => i.path === p.path && idx !== itemIdx)) {\n const counter = dedupeCounters.get(p.path) || 0;\n dedupeCounters.set(p.path, counter + 1);\n const alias = [DEDUPE_ALIAS_PREFIX, counter, p.path].join('_');\n return {\n ...p,\n alias,\n declaration: `${alias}:${p.declaration}`,\n paths: dedupeGroupedPathsRecursive(p.paths),\n };\n }\n\n return {\n ...p,\n paths: dedupeGroupedPathsRecursive(p.paths),\n };\n });\n};\n","import { extractPathsFromFilters } from '../lib/extract-paths-from-filter';\nimport {\n type NestedPath,\n groupPathsRecursive,\n} from '../lib/group-paths-recursive';\nimport { parseSelectParam } from '../lib/parse-select-param';\nimport type { FilterDefinitions, Path } from '../lib/query-types';\nimport { removeAliasFromDeclaration } from '../lib/remove-alias-from-declaration';\nimport { buildSelectStatementFromGroupedPaths } from './build-select-statement';\nimport { dedupeGroupedPathsRecursive } from './dedupe';\n\nexport type BuildNormalizedQueryOps<Q extends string = '*'> = {\n query?: Q | null;\n // if true, will not add any paths from the cache to the query\n disabled?: boolean;\n queriesForTable: () => { paths: Path[]; filters: FilterDefinitions }[];\n};\n\nexport type BuildNormalizedQueryReturn = {\n // The joint select query\n selectQuery: string;\n // All paths the user is querying for\n groupedUserQueryPaths: (NestedPath | Path)[] | null;\n // All paths the user is querying for + all paths that are currently loaded into the cache\n groupedPaths: (NestedPath | Path)[];\n};\n\n/**\n * returns select statement that includes the users query + all paths currently loaded into cache to later perform a \"smart update\"\n *\n * the select statement does not contain any user-defined aliases. only custom ones to dedupe.\n * without deduping, we would not be able to query inbox_id,inbox:inbox_id(name),\n * because it will result in a select of inbox_id,inbox_id(name), which does not work.\n * to dedupe, we add a custom alias to the query, e.g. dedupe_0:inbox_id,inbox_id(name)\n * we then later remove them when normalizing the data\n **/\nexport const buildNormalizedQuery = <Q extends string = '*'>({\n query,\n disabled,\n queriesForTable,\n}: BuildNormalizedQueryOps<Q>): BuildNormalizedQueryReturn | null => {\n // parse user query\n const userQueryPaths = query ? parseSelectParam(query) : null;\n\n // unique set of declaration without paths.\n // alias not needed for paths\n // declaration without alias!\n const paths: Path[] = userQueryPaths\n ? userQueryPaths.map((q) => ({\n declaration: removeAliasFromDeclaration(q.declaration),\n path: q.path,\n }))\n : [];\n\n if (!disabled) {\n for (const tableQuery of queriesForTable()) {\n for (const filterPath of extractPathsFromFilters(\n tableQuery.filters,\n tableQuery.paths,\n )) {\n // add paths used in filter\n const path = tableQuery.paths.find(\n (p) => p.path === filterPath.path && p.alias === filterPath.alias,\n ) ?? {\n path: filterPath.path,\n declaration: filterPath.path,\n };\n // add unique\n if (\n paths.every(\n (p) =>\n removeAliasFromDeclaration(p.declaration) !==\n removeAliasFromDeclaration(path.declaration),\n )\n ) {\n // do not use alias\n paths.push({\n path: path.path,\n declaration: removeAliasFromDeclaration(path.declaration),\n });\n }\n }\n // add paths used in query\n for (const path of tableQuery.paths) {\n if (\n paths.every(\n (p) =>\n removeAliasFromDeclaration(p.declaration) !==\n removeAliasFromDeclaration(path.declaration),\n ) &&\n // do not add agg functions\n !path.declaration.endsWith('.count') &&\n // do not add wildcard queries\n !path.declaration.endsWith('*')\n ) {\n paths.push({\n path: path.path,\n declaration: removeAliasFromDeclaration(path.declaration),\n });\n }\n }\n }\n }\n\n const groupedPaths = groupPathsRecursive(paths);\n const groupedDedupedPaths = dedupeGroupedPathsRecursive(groupedPaths);\n\n const selectQuery = buildSelectStatementFromGroupedPaths(groupedDedupedPaths);\n if (selectQuery.length === 0) return null;\n return {\n selectQuery,\n groupedUserQueryPaths: userQueryPaths\n ? groupPathsRecursive(userQueryPaths)\n : null,\n groupedPaths: groupedDedupedPaths,\n };\n};\n","import { flatten } from 'flat';\n\nimport { get } from '../lib/get';\nimport { type NestedPath, isNestedPath } from '../lib/group-paths-recursive';\nimport { isPlainObject } from '../lib/is-plain-object';\nimport type { Path } from '../lib/query-types';\nimport type { BuildNormalizedQueryReturn } from './build-normalized-query';\n\n/**\n * The parsed response of the mutation fetcher\n **/\nexport type MutationFetcherResponse<R> = {\n /**\n * Normalized response. A flat json object with a depth of 1, where the keys are the full json paths.\n **/\n normalizedData: R;\n /**\n * Result of the query passed by the user\n **/\n userQueryData?: R;\n};\n\nexport const buildMutationFetcherResponse = <R>(\n /**\n * response of the select query built by `buildNormalizedQuery`. contains dedupe aliases.\n **/\n input: R,\n {\n groupedPaths,\n groupedUserQueryPaths,\n }: Pick<BuildNormalizedQueryReturn, 'groupedPaths' | 'groupedUserQueryPaths'>,\n): MutationFetcherResponse<R> => {\n return {\n normalizedData: normalizeResponse<R>(groupedPaths, input),\n userQueryData: groupedUserQueryPaths\n ? buildUserQueryData<R>(groupedUserQueryPaths, groupedPaths, input)\n : undefined,\n };\n};\n\n/**\n * Normalize the response by removing the dedupe alias and flattening it\n **/\nexport const normalizeResponse = <R>(\n groups: (Path | NestedPath)[],\n obj: R,\n): R => {\n if (groups.some((p) => p.path === '*')) {\n // if wildcard, add every non nested value\n // for every nested value, check if groups contains a nested path for it. if not, also add it.\n // reason is that the wildcard does not select relations\n\n Object.entries(obj as Record<string, unknown>).forEach(([k, v]) => {\n if (typeof v === 'object' || Array.isArray(v)) {\n if (!groups.some((g) => isNestedPath(g) && g.path === k)) {\n groups.push({\n path: k,\n declaration: k,\n });\n }\n } else if (!groups.some((g) => g.path === k)) {\n groups.push({\n path: k,\n declaration: k,\n });\n }\n });\n }\n\n return groups.reduce<R>((prev, curr) => {\n // prefer alias over path because of dedupe alias\n const value = get(obj, curr.alias || curr.path);\n\n if (typeof value === 'undefined') return prev;\n if (value === null) {\n return {\n ...prev,\n // add hint to path if it has dedupe alias\n // can happen if the same relation is queried multiple times via different fkeys\n [`${curr.path}${\n curr.alias?.startsWith('d_') && curr.declaration.split('!').length > 1\n ? `!${curr.declaration.split('!')[1]}`\n : ''\n }`]: value,\n };\n }\n if (!isNestedPath(curr)) {\n return {\n ...prev,\n ...flatten({\n [curr.path]:\n value !== null &&\n (isPlainObject(value) || (Array.isArray(value) && value.length > 0))\n ? flatten(value)\n : value,\n }),\n };\n }\n if (Array.isArray(value)) {\n return {\n ...prev,\n ...(flatten({\n [curr.path]: value.map((v) => normalizeResponse(curr.paths, v)),\n }) as R),\n };\n }\n return {\n ...prev,\n ...flatten({\n // add hint to path if it has dedupe alias\n // can happen if the same relation is queried multiple times via different fkeys\n [`${curr.path}${\n curr.alias?.startsWith('d_') && curr.declaration.split('!').length > 1\n ? `!${curr.declaration.split('!')[1]}`\n : ''\n }`]: normalizeResponse(curr.paths, value as Record<string, unknown>),\n }),\n };\n }, {} as R);\n};\n\n/**\n * Build userQueryData from response\n *\n * note that `paths` is reflecting `obj`, not `userQueryPaths`.\n * iterate over `userQueryPaths` and find the corresponding path in `paths`.\n * Then, get value using the found alias and path from `obj`.\n **/\nconst buildUserQueryData = <R>(\n userQueryGroups: (Path | NestedPath)[],\n pathGroups: (Path | NestedPath)[],\n obj: R,\n): R => {\n if (pathGroups.some((p) => p.path === '*')) {\n // if wildcard, add every non nested value\n // for every nested value, check if pathGroups contains a nested path for it. if not, also add it.\n // reason is that the wildcard does not select relations\n\n Object.entries(obj as Record<string, unknown>).forEach(([k, v]) => {\n if (typeof v === 'object' || Array.isArray(v)) {\n if (!pathGroups.some((g) => isNestedPath(g) && g.path === k)) {\n pathGroups.push({\n path: k,\n declaration: k,\n });\n }\n } else if (!pathGroups.some((g) => g.path === k)) {\n pathGroups.push({\n path: k,\n declaration: k,\n });\n }\n });\n }\n\n if (userQueryGroups.some((p) => p.path === '*')) {\n // if wildcard, add every non nested value\n // for every nested value, check if pathGroups contains a nested path for it. if not, also add it.\n // reason is that the wildcard does not select relations\n\n Object.entries(obj as Record<string, unknown>).forEach(([k, v]) => {\n if (typeof v === 'object' || Array.isArray(v)) {\n if (!pathGroups.some((g) => isNestedPath(g) && g.path === k)) {\n userQueryGroups.push({\n path: k,\n declaration: k,\n });\n }\n } else if (!userQueryGroups.some((g) => g.path === k)) {\n userQueryGroups.push({\n path: k,\n declaration: k,\n });\n }\n });\n }\n\n return userQueryGroups.reduce<R>((prev, curr) => {\n if (curr.path === '*') return prev;\n // paths is reflecting the obj\n const inputPath = pathGroups.find(\n (p) => p.path === curr.path && isNestedPath(p) === isNestedPath(curr),\n );\n if (!inputPath) {\n // should never happen though since userQueryPaths is a subset of paths\n throw new Error(`Path ${curr.path} not found in response paths`);\n }\n const value = get(obj, inputPath.alias || inputPath.path);\n\n if (typeof value === 'undefined') return prev;\n if (value === null || !isNestedPath(curr) || !isNestedPath(inputPath)) {\n (prev as Record<string, unknown>)[curr.alias ? curr.alias : curr.path] =\n value;\n } else if (Array.isArray(value)) {\n (prev as Record<string, unknown>)[curr.alias ? curr.alias : curr.path] =\n value.map((v) => buildUserQueryData(curr.paths, inputPath.paths, v));\n } else {\n (prev as Record<string, unknown>)[curr.alias ? curr.alias : curr.path] =\n buildUserQueryData(\n curr.paths,\n inputPath.paths,\n value as Record<string, unknown>,\n );\n }\n return prev;\n }, {} as R);\n};\n","export const get = (obj: any, path: string, defaultValue: any = undefined) => {\n const split = path.split(/((?:\\.|,|\\[|\\]|->>|->)+)/g);\n let result: any = obj;\n for (let i = -1; i < split.length; i += 2) {\n const separator = split[i];\n let key: string | number = split[i + 1];\n if (!key) {\n continue;\n }\n if (separator?.endsWith('->') || separator?.endsWith('->>')) {\n if (/^\\d+$/.test(key)) {\n key = Number.parseInt(key, 10);\n }\n }\n if (separator?.endsWith('->>')) {\n result = `${result ? result[key] : result}`;\n } else {\n result = result ? result[key] : result;\n }\n }\n return result === undefined || result === obj ? defaultValue : result;\n};\n","export function isPlainObject(\n value: unknown,\n): value is Record<string, unknown> {\n return Object.prototype.toString.call(value) === '[object Object]';\n}\n","/**\n * Parses a url and returns the table name the url is interacting with.\n *\n * For mutations, the .split('?') goes unused.\n *\n * @param url The url we are pulling the table name from\n * @returns Table name\n */\nexport const getTableFromUrl = (url: string): string => {\n // Split the url\n const split = url.toString().split('/');\n // Pop the last part of the path off and remove any params if they exist\n const table = split.pop()?.split('?').shift() as string;\n // Pop an additional position to check for rpc\n const maybeRpc = split.pop() as string;\n // Rejoin the result to include rpc otherwise just table name\n return [maybeRpc === 'rpc' ? maybeRpc : null, table]\n .filter(Boolean)\n .join('/');\n};\n","export type MaybeLikeQueryBuilder<Result> = unknown;\n\nexport type LikeQueryBuilder<Result> = {\n url: URL;\n};\n\nexport const isLikeQueryBuilder = <Result>(\n v: MaybeLikeQueryBuilder<Result>,\n): v is LikeQueryBuilder<Result> => {\n if (typeof v !== 'object' || v === null) return false;\n const obj = v as LikeQueryBuilder<Result>;\n\n return typeof obj['url'] === 'object';\n};\n","import { getTableFromUrl } from './get-table-from-url';\nimport { MaybeLikePostgrestBuilder } from './like-postgrest-builder';\nimport { isLikeQueryBuilder } from './like-query-builder';\n\nexport const getTable = <Result>(\n query: MaybeLikePostgrestBuilder<Result>,\n): string => {\n if (!isLikeQueryBuilder(query)) {\n throw new Error('Invalid PostgrestBuilder');\n }\n\n return getTableFromUrl(query['url'].pathname);\n};\n","import type { PostgrestHasMorePaginationResponse } from './response-types';\n\nexport type PostgrestPaginationCacheData<Result> = Result[][];\n\nexport const isPostgrestPaginationCacheData = <Result>(\n q: unknown,\n): q is PostgrestPaginationCacheData<Result> => {\n if (!Array.isArray(q)) return false;\n return q.length === 0 || Array.isArray(q[0]);\n};\n\nexport type PostgrestHasMorePaginationCacheData<Result> =\n PostgrestHasMorePaginationResponse<Result>[];\n\nexport const isPostgrestHasMorePaginationCacheData = <Result>(\n q: unknown,\n): q is PostgrestHasMorePaginationCacheData<Result> => {\n if (!Array.isArray(q)) return false;\n if (q.length === 0) return true;\n const firstPage = q[0];\n return (\n Array.isArray(\n (firstPage as PostgrestHasMorePaginationResponse<Result>).data,\n ) &&\n typeof (firstPage as PostgrestHasMorePaginationResponse<Result>).hasMore ===\n 'boolean'\n );\n};\n","import type {\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\n\n// Convencience type to not bloat up implementation\nexport type AnyPostgrestResponse<Result> =\n | PostgrestSingleResponse<Result>\n | PostgrestMaybeSingleResponse<Result>\n | PostgrestResponse<Result>;\n\nexport const isAnyPostgrestResponse = <Result>(\n q: unknown,\n): q is AnyPostgrestResponse<Result> => {\n if (!q) return false;\n return (\n typeof (q as AnyPostgrestResponse<Result>).data === 'object' ||\n Array.isArray((q as AnyPostgrestResponse<Result>).data)\n );\n};\n\nexport type PostgrestPaginationResponse<Result> = Result[];\n\nexport const isPostgrestPaginationResponse = <Result>(\n q: unknown,\n): q is PostgrestPaginationResponse<Result> => {\n return Array.isArray(q);\n};\n\nexport type PostgrestHasMorePaginationResponse<Result> = {\n data: Result[];\n hasMore: boolean;\n};\n\nexport const isPostgrestHasMorePaginationResponse = <Result>(\n q: unknown,\n): q is PostgrestHasMorePaginationResponse<Result> => {\n if (!q) return false;\n return (\n Array.isArray((q as PostgrestHasMorePaginationResponse<Result>).data) &&\n typeof (q as PostgrestHasMorePaginationResponse<Result>).hasMore ===\n 'boolean'\n );\n};\n","import { flatten, unflatten } from 'flat';\n\nimport { sortSearchParams } from './sort-search-param';\n\n/**\n * Encodes an object by url-encoding an ordered lists of all paths and their values.\n */\nexport const encodeObject = (obj: Record<string, unknown>): string => {\n const sortedEntries = Object.entries(\n flatten(obj) as Record<string, unknown>,\n ).sort(([a], [b]) => a.length - b.length);\n const bodyParams = new URLSearchParams();\n sortedEntries.forEach(([key, value]) => {\n bodyParams.append(key, String(value));\n });\n return sortSearchParams(bodyParams).toString();\n};\n\n/**\n * Decodes a URL-encoded string back into a nested object.\n * This is the reverse operation of encodeObject.\n */\nexport const decodeObject = (\n encodedString: string,\n): Record<string, unknown> => {\n const params = new URLSearchParams(encodedString);\n const flatObject: Record<string, unknown> = {};\n\n // Convert URLSearchParams back to a flat object\n params.forEach((value, key) => {\n // Try to convert string values to appropriate types\n let parsedValue: unknown = value;\n\n // Try to parse numbers\n if (/^-?\\d+$/.test(value)) {\n parsedValue = parseInt(value, 10);\n } else if (/^-?\\d+\\.\\d+$/.test(value)) {\n parsedValue = parseFloat(value);\n } else if (value === 'true') {\n parsedValue = true;\n } else if (value === 'false') {\n parsedValue = false;\n } else if (value === 'null') {\n parsedValue = null;\n }\n\n flatObject[key] = parsedValue;\n });\n\n // Unflatten the object to restore nested structure\n return unflatten(flatObject);\n};\n","export const sortSearchParams = (params: URLSearchParams) =>\n new URLSearchParams(\n Array.from(params.entries()).sort((a, b) => {\n const x = `${a[0]}${a[1]}`;\n const y = `${b[0]}${b[1]}`;\n return x > y ? 1 : -1;\n }),\n );\n","import type {\n PostgrestBuilder,\n PostgrestClientOptions,\n} from '@supabase/postgrest-js';\n\nexport const isPostgrestBuilder = <Result>(\n q: unknown,\n): q is PostgrestBuilder<PostgrestClientOptions, Result> => {\n return (\n typeof (q as PostgrestBuilder<PostgrestClientOptions, Result>)\n .throwOnError === 'function'\n );\n};\n","import type {\n PostgrestClientOptions,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport type { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nexport const isPostgrestTransformBuilder = <\n ClientOptions extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n q: unknown,\n): q is PostgrestTransformBuilder<\n ClientOptions,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n> => {\n return (\n typeof (\n q as PostgrestTransformBuilder<\n ClientOptions,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >\n ).abortSignal === 'function'\n );\n};\n","export const setFilterValue = (\n searchParams: URLSearchParams,\n path: string,\n op: string,\n value: string,\n) => {\n const filters = searchParams.getAll(path);\n // delete all\n searchParams.delete(path);\n\n // re-create\n for (const f of filters) {\n if (f.startsWith(`${op}.`)) {\n continue;\n }\n searchParams.append(path, f);\n }\n\n searchParams.append(path, `${op}.${value}`);\n};\n","/**\n * Check if a value is a valid ISO DateTime string\n * @param v\n * @returns\n */\nexport const isISODateString = (v: unknown): boolean =>\n typeof v === 'string' &&\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/.test(\n v,\n );\n","import { isISODateString } from './is-iso-date-string';\nimport type { ValueType } from './query-types';\n\n/**\n * Safely parse any value to a ValueType\n * @param v Any value\n * @returns a ValueType\n */\nexport const parseValue = (v: any): ValueType => {\n if (isISODateString(v)) return new Date(v);\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n};\n","import type { OrderDefinition } from './query-types';\n\n/**\n * Parses orderByKey back to OrderDefinition\n * @param key generated by PostgrestParser\n * @returns The parsed OrderDefinition\n */\nexport const parseOrderByKey = (v: string): OrderDefinition[] => {\n return v.split('|').map((orderBy) => {\n const [tableDef, orderDef] = orderBy.split(':');\n const [foreignTableOrCol, maybeCol] = tableDef.split('.');\n const [dir, nulls] = orderDef.split('.');\n return {\n ascending: dir === 'asc',\n nullsFirst: nulls === 'nullsFirst',\n foreignTable: maybeCol ? foreignTableOrCol : undefined,\n column: maybeCol ? maybeCol : foreignTableOrCol,\n };\n });\n};\n","import { OrderDefinition } from './query-types';\n\nexport const parseOrderBy = (searchParams: URLSearchParams) => {\n const orderBy: OrderDefinition[] = [];\n searchParams.forEach((value, key) => {\n const split = key.split('.');\n if (split[split.length === 2 ? 1 : 0] === 'order') {\n // separated by ,\n const orderByDefs = value.split(',');\n orderByDefs.forEach((def) => {\n const [column, ascending, nullsFirst] = def.split('.');\n orderBy.push({\n ascending: ascending === 'asc',\n column,\n nullsFirst: nullsFirst === 'nullsfirst',\n foreignTable: split.length === 2 ? split[0] : undefined,\n });\n });\n }\n });\n\n return orderBy;\n};\n","import {\n type FilterDefinition,\n type FilterDefinitions,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\n// Helper to search for filters in a filter definition\nexport const findFilters = (\n f: FilterDefinitions,\n by: Partial<FilterDefinition>,\n) => {\n const filters: FilterDefinition[] = [];\n f.forEach((filter) => {\n if (isAndFilter(filter)) {\n filters.push(...findFilters(filter.and, by));\n }\n if (isOrFilter(filter)) {\n filters.push(...findFilters(filter.or, by));\n }\n if (isFilterDefinition(filter)) {\n if (\n (typeof by.path === 'undefined' || filter.path === by.path) &&\n (typeof by.alias === 'undefined' || filter.alias === by.alias) &&\n (typeof by.value === 'undefined' || filter.value === by.value) &&\n (typeof by.negate === 'undefined' || filter.negate === by.negate) &&\n (typeof by.operator === 'undefined' || filter.operator === by.operator)\n ) {\n filters.push(filter);\n }\n }\n });\n return filters;\n};\n","import type {\n PostgrestClientOptions,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nimport { isPlainObject } from './lib/is-plain-object';\nimport { parseOrderBy } from './lib/parse-order-by';\nimport type { PostgrestPaginationResponse } from './lib/response-types';\n\nexport type PostgrestCursorPaginationFetcher<Type, Args> = (\n args: Args,\n) => Promise<Type>;\n\nexport type PostgrestCursorPaginationKeyDecoder<Args> = (args: Args) => {\n orderBy?: string;\n uqOrderBy?: string;\n};\n\nexport const createCursorPaginationFetcher = <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n Args,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n Relationships\n >)\n | null,\n config: {\n decode: PostgrestCursorPaginationKeyDecoder<Args>;\n orderBy: string;\n uqOrderBy?: string;\n rpcArgs?: { orderBy: string; uqOrderBy?: string };\n },\n): PostgrestCursorPaginationFetcher<\n PostgrestPaginationResponse<Result>,\n Args\n> | null => {\n if (!queryFactory) return null;\n return async (args) => {\n const cursor = config.decode(args);\n\n const query = queryFactory();\n\n if (config.rpcArgs) {\n if (query['method'] === 'GET') {\n if (cursor.orderBy) {\n query['url'].searchParams.set(config.rpcArgs.orderBy, cursor.orderBy);\n }\n if (config.rpcArgs.uqOrderBy && cursor.uqOrderBy) {\n query['url'].searchParams.set(\n config.rpcArgs.uqOrderBy,\n cursor.uqOrderBy,\n );\n }\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [config.rpcArgs.orderBy]: cursor.orderBy,\n ...(cursor.uqOrderBy && config.rpcArgs.uqOrderBy\n ? { [config.rpcArgs.uqOrderBy]: cursor.uqOrderBy }\n : {}),\n };\n }\n\n const { data } = await query.throwOnError();\n\n // cannot be null because of .throwOnError()\n return data as Result[];\n }\n\n const orderByDef = parseOrderBy(query['url'].searchParams);\n const orderBy = orderByDef.find((o) => o.column === config.orderBy);\n\n if (!orderBy) {\n throw new Error(`No ordering key found for path ${config.orderBy}`);\n }\n\n const uqOrderBy = config.uqOrderBy\n ? orderByDef.find((o) => o.column === config.uqOrderBy)\n : null;\n\n if (cursor.orderBy && config.uqOrderBy && cursor.uqOrderBy && uqOrderBy) {\n const operator = orderBy.ascending ? 'gt' : 'lt';\n const uqOperator = uqOrderBy.ascending ? 'gt' : 'lt';\n\n query['url'].searchParams.append(\n 'or',\n `(${config.orderBy}.${operator}.\"${cursor.orderBy}\",and(${config.orderBy}.eq.\"${cursor.orderBy}\",${config.uqOrderBy}.${uqOperator}.\"${cursor.uqOrderBy}\"))`,\n );\n } else if (cursor.orderBy) {\n const operator = orderBy.ascending ? 'gt' : 'lt';\n query['url'].searchParams.append(\n config.orderBy,\n `${operator}.${cursor.orderBy}`,\n );\n }\n\n const { data, error } = await query;\n\n if (error) throw error;\n\n // cannot be null because of .throwOnError()\n return data as Result[];\n };\n};\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type DeleteFetcher<T extends GenericTable, R> = (\n input: Partial<T['Row']>[],\n) => Promise<MutationFetcherResponse<R>[] | null>;\n\nexport type DeleteFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['delete']>[0];\n\nexport const buildDeleteFetcher =\n <\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n >(\n qb: PostgrestQueryBuilder<O, S, T, R>,\n primaryKeys: (keyof T['Row'])[],\n opts: BuildNormalizedQueryOps<Q> &\n DeleteFetcherOptions<O, S, T, RelationName>,\n ): DeleteFetcher<T, R> =>\n async (\n input: Partial<T['Row']>[],\n ): Promise<MutationFetcherResponse<R>[] | null> => {\n let filterBuilder = qb.delete(opts);\n\n if (primaryKeys.length === 1) {\n const primaryKey = primaryKeys[0] as string;\n filterBuilder.in(\n primaryKey,\n input.map((i) => {\n const v = i[primaryKey];\n if (!v) {\n throw new Error(\n `Missing value for primary key ${primaryKey as string}`,\n );\n }\n return v;\n // TODO i wont bother with this, but maybe i can nerdsnipe somone else into it\n }) as any[],\n );\n } else {\n filterBuilder = filterBuilder.or(\n input\n .map(\n (i) =>\n `and(${primaryKeys.map((c) => {\n const v = i[c];\n if (!v) {\n throw new Error(\n `Missing value for primary key ${c as string}`,\n );\n }\n return `${c as string}.eq.${v}`;\n })})`,\n )\n .join(','),\n );\n }\n\n const primaryKeysData = input.map((i) =>\n primaryKeys.reduce<R>((prev, key) => {\n return {\n ...prev,\n [key]: i[key],\n };\n }, {} as R),\n );\n\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n // make sure that primary keys are included in the select query\n const groupedPathsWithPrimaryKeys = groupedPaths;\n const addKeys: string[] = [];\n primaryKeys.forEach((key) => {\n if (!groupedPathsWithPrimaryKeys.find((p) => p.path === key)) {\n groupedPathsWithPrimaryKeys.push({\n declaration: key as string,\n path: key as string,\n });\n addKeys.push(key as string);\n }\n });\n const { data } = await filterBuilder\n .select([selectQuery, ...addKeys].join(','))\n .throwOnError();\n return (data as R[]).map((d) =>\n buildMutationFetcherResponse(d, {\n groupedPaths: groupedPathsWithPrimaryKeys,\n groupedUserQueryPaths,\n }),\n );\n }\n\n await filterBuilder.throwOnError();\n\n if (opts.queriesForTable().length > 0) {\n // if there is at least one query on the table we are deleting from, return primary keys\n return primaryKeysData.map((pk) => ({ normalizedData: pk }));\n }\n\n return null;\n };\n","import type { PostgrestFilter } from '../postgrest-filter';\nimport type { PostgrestQueryParserOptions } from '../postgrest-query-parser';\nimport type { DecodedKey } from './types';\n\nexport type RevalidateRelationOpt<Type> = {\n schema?: string;\n relation: string;\n relationIdColumn: string;\n fKeyColumn: keyof Type;\n};\n\nexport type RevalidateRelations<Type extends Record<string, unknown>> =\n RevalidateRelationOpt<Type>[];\n\nexport type RevalidateRelationsProps<Type extends Record<string, unknown>> = {\n input: Partial<Type>;\n decodedKey: Pick<DecodedKey, 'schema' | 'table' | 'queryKey'>;\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<PostgrestFilter<Type>, 'applyFilters'>;\n};\n\nexport const shouldRevalidateRelation = <Type extends Record<string, unknown>>(\n relations: RevalidateRelations<Type>,\n {\n input,\n getPostgrestFilter,\n decodedKey: { schema, table, queryKey },\n }: RevalidateRelationsProps<Type>,\n): boolean =>\n Boolean(\n relations.find(\n (r) =>\n (!r.schema || r.schema === schema) &&\n r.relation === table &&\n typeof input[r.fKeyColumn] !== 'undefined' &&\n getPostgrestFilter(queryKey, {\n exclusivePaths: [r.relationIdColumn],\n }).applyFilters({\n [r.relationIdColumn]: input[r.fKeyColumn],\n }),\n ),\n );\n","import type { DecodedKey } from './types';\n\nexport type RevalidateTableOpt = { schema?: string; table: string };\n\nexport type RevalidateTables = RevalidateTableOpt[];\n\nexport type RevalidateTablesProps = {\n decodedKey: Pick<DecodedKey, 'schema' | 'table'>;\n};\n\nexport const shouldRevalidateTable = (\n tables: RevalidateTables,\n { decodedKey: { schema, table } }: RevalidateTablesProps,\n): boolean =>\n Boolean(\n tables.find((t) => (!t.schema || t.schema === schema) && t.table === table),\n );\n","import type {\n PostgrestHasMorePaginationCacheData,\n PostgrestPaginationCacheData,\n} from '../lib/cache-data-types';\n\nexport const toHasMorePaginationCacheData = <\n Type extends Record<string, unknown>,\n>(\n a: Type[],\n currentData: PostgrestHasMorePaginationCacheData<Type>,\n chunkSize: number,\n) => {\n // return array in chunks\n const hasMoreCache = currentData.map((p) => p.hasMore);\n return a.reduce<PostgrestHasMorePaginationCacheData<Type>>(\n (resultArray, item, index) => {\n // default limit is 1000\n // ref: https://github.com/supabase/supabase/discussions/3765#discussioncomment-1581021\n const chunkIndex = Math.floor(index / chunkSize);\n\n if (!resultArray[chunkIndex]) {\n let hasMore = hasMoreCache[chunkIndex];\n if (!hasMore) {\n // if new page, set to hasMore of last page\n hasMore = hasMoreCache[hasMoreCache.length - 1];\n }\n if (chunkIndex > 0) {\n // if not first page, set prev has more to true\n resultArray[chunkIndex - 1].hasMore = true;\n }\n resultArray[chunkIndex] = {\n data: [],\n hasMore:\n hasMoreCache[chunkIndex] ??\n hasMoreCache[hasMoreCache.length - 1] ??\n false,\n }; // start a new chunk\n }\n\n resultArray[chunkIndex].data.push(item);\n\n return resultArray;\n },\n [],\n );\n};\n\nexport const toPaginationCacheData = <Type extends Record<string, unknown>>(\n a: Type[],\n chunkSize: number,\n) => {\n return a.reduce<PostgrestPaginationCacheData<Type>>(\n (resultArray, item, index) => {\n // default limit is 1000\n // ref: https://github.com/supabase/supabase/discussions/3765#discussioncomment-1581021\n const chunkIndex = Math.floor(index / chunkSize);\n\n if (!resultArray[chunkIndex]) {\n resultArray[chunkIndex] = []; // start a new chunk\n }\n\n resultArray[chunkIndex].push(item);\n\n return resultArray;\n },\n [],\n );\n};\n","import {\n isPostgrestHasMorePaginationCacheData,\n isPostgrestPaginationCacheData,\n} from './lib/cache-data-types';\nimport { isAnyPostgrestResponse } from './lib/response-types';\nimport { shouldRevalidateRelation } from './mutate/should-revalidate-relation';\nimport { shouldRevalidateTable } from './mutate/should-revalidate-table';\nimport {\n toHasMorePaginationCacheData,\n toPaginationCacheData,\n} from './mutate/transformers';\nimport type { DecodedKey, MutatorFn, RevalidateOpts } from './mutate/types';\nimport type { PostgrestFilter } from './postgrest-filter';\nimport type { PostgrestQueryParserOptions } from './postgrest-query-parser';\n\nconst filterByPks = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n primaryKeys: (keyof Type)[],\n) => {\n return currentData.filter((i) =>\n primaryKeys.some((pk) => i[pk] !== input[pk]),\n );\n};\n\nexport type DeleteItemOperation<Type extends Record<string, unknown>> = {\n table: string;\n schema: string;\n input: Type;\n primaryKeys: (keyof Type)[];\n} & RevalidateOpts<Type>;\n\nexport type DeleteItemCache<KeyType, Type extends Record<string, unknown>> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Should return a PostgrestFilter for the given query.\n * This is exposed as a function so results can be cached by the cache library.\n */\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<PostgrestFilter<Type>, 'applyFilters' | 'denormalize'>;\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The mutation function from the cache library\n */\n mutate: (key: KeyType, fn: MutatorFn<Type>) => Promise<void> | void;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\n\nexport const deleteItem = async <KeyType, Type extends Record<string, unknown>>(\n op: DeleteItemOperation<Type>,\n cache: DeleteItemCache<KeyType, Type>,\n) => {\n const {\n revalidateRelations: revalidateRelationsOpt,\n revalidateTables: revalidateTablesOpt,\n schema,\n table,\n } = op;\n const { cacheKeys, decode, getPostgrestFilter, mutate, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n const filter = getPostgrestFilter(key.queryKey);\n // parse input into expected target format\n if (key.schema === schema && key.table === table) {\n if (key.isHead === true) {\n mutations.push(revalidate(k));\n } else {\n const transformedInput = filter.denormalize(op.input);\n if (\n // For delete, the input has to have a value for all primary keys\n op.primaryKeys.every(\n (pk) => typeof transformedInput[pk as string] !== 'undefined',\n )\n ) {\n const limit = key.limit ?? 1000;\n mutations.push(\n mutate(k, (currentData) => {\n // Return early if undefined or null\n if (!currentData) return currentData;\n\n if (isPostgrestHasMorePaginationCacheData<Type>(currentData)) {\n return toHasMorePaginationCacheData(\n filterByPks<Type>(\n transformedInput,\n currentData.flatMap((p) => p.data),\n op.primaryKeys,\n ),\n currentData,\n limit,\n );\n } else if (isPostgrestPaginationCacheData<Type>(currentData)) {\n return toPaginationCacheData(\n filterByPks<Type>(\n transformedInput,\n currentData.flat(),\n op.primaryKeys,\n ),\n limit,\n );\n } else if (isAnyPostgrestResponse<Type>(currentData)) {\n const { data } = currentData;\n if (!Array.isArray(data)) {\n if (\n data &&\n op.primaryKeys.some(\n (pk) => transformedInput[pk] !== data[pk],\n )\n ) {\n return currentData;\n } else {\n return { data: null };\n }\n }\n\n const newData = filterByPks(\n transformedInput,\n data,\n op.primaryKeys,\n );\n\n return {\n data: newData,\n count: newData.length,\n };\n }\n }),\n );\n }\n }\n }\n\n if (\n revalidateTablesOpt &&\n shouldRevalidateTable(revalidateTablesOpt, { decodedKey: key })\n ) {\n mutations.push(revalidate(k));\n }\n\n if (\n revalidateRelationsOpt &&\n shouldRevalidateRelation(revalidateRelationsOpt, {\n input: op.input,\n getPostgrestFilter,\n decodedKey: key,\n })\n ) {\n mutations.push(revalidate(k));\n }\n }\n\n await Promise.all(mutations);\n};\n","import { isPostgrestBuilder } from './lib/is-postgrest-builder';\nimport type { AnyPostgrestResponse } from './lib/response-types';\n\nexport const fetcher = async <Result>(\n q: PromiseLike<AnyPostgrestResponse<Result>>,\n) => {\n if (isPostgrestBuilder(q)) {\n q = q.throwOnError();\n }\n return await q;\n};\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type InsertFetcher<T extends GenericTable, R> = (\n input: T['Insert'][],\n) => Promise<MutationFetcherResponse<R>[] | null>;\n\nexport type InsertFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['insert']>[1];\n\nfunction buildInsertFetcher<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, Re>,\n opts: BuildNormalizedQueryOps<Q> & InsertFetcherOptions<O, S, T, Re>,\n): InsertFetcher<T, R> {\n return async (\n input: T['Insert'][],\n ): Promise<MutationFetcherResponse<R>[] | null> => {\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n const { data } = await qb\n .insert(input as any, opts)\n .select(selectQuery)\n .throwOnError();\n // data cannot be null because of throwOnError()\n return (data as R[]).map((d) =>\n buildMutationFetcherResponse(d, {\n groupedUserQueryPaths,\n groupedPaths,\n }),\n );\n }\n await qb.insert(input as any).throwOnError();\n return input.map((d) => ({ normalizedData: d as R }));\n };\n}\n\nexport { buildInsertFetcher };\n","/*\n * Binary search in JavaScript.\n * Returns the index of of the element in a sorted array or (-n-1) where n is the insertion point for the new element.\n * Parameters:\n * ar - A sorted array\n * el - An element to search for\n * compare - A comparator function. The function takes two arguments: (a, b) and returns:\n * a negative number if a is less than b;\n * 0 if a is equal to b;\n * a positive number of a is greater than b.\n * The array may contain duplicate elements. If there are more than one equal elements in the array,\n * the returned value can be the index of any one of the equal elements.\n */\nexport function binarySearch<Type>(\n arr: Type[],\n el: Type,\n compare: (a: Type, b: Type) => number,\n) {\n let m = 0;\n let n = arr.length - 1;\n while (m <= n) {\n const k = (n + m) >> 1;\n const cmp = compare(el, arr[k]);\n if (cmp > 0) {\n m = k + 1;\n } else if (cmp < 0) {\n n = k - 1;\n } else {\n return k;\n }\n }\n return m;\n}\n","export const ifDateGetTime = (v: unknown) => {\n if (v instanceof Date) return v.getTime();\n if (typeof v === 'string') {\n const t = new Date(v).getTime();\n if (!isNaN(t)) return t;\n }\n return v;\n};\n","import { get as defaultGet } from './get';\nimport { ifDateGetTime } from './if-date-get-time';\nimport type { OrderDefinition } from './query-types';\n\nexport const buildSortedComparator = <Type extends Record<string, unknown>>(\n orderBy: OrderDefinition[],\n) => {\n return (a: Type, b: Type) => {\n for (const { column, ascending, nullsFirst, foreignTable } of orderBy) {\n const aValue = ifDateGetTime(\n defaultGet(\n a,\n `${foreignTable ? `${foreignTable}.` : ''}${column}`,\n null,\n ),\n );\n\n const bValue = ifDateGetTime(\n defaultGet(\n b,\n `${foreignTable ? `${foreignTable}.` : ''}${column}`,\n null,\n ),\n );\n\n // go to next if value is equals\n if (aValue === bValue) continue;\n\n // nullsFirst / nullsLast\n if (aValue === null || aValue === undefined) {\n return nullsFirst ? -1 : 1;\n }\n\n if (bValue === null || bValue === undefined) {\n return nullsFirst ? 1 : -1;\n }\n\n // otherwise, if we're ascending, lowest sorts first\n if (ascending) {\n return aValue < bValue ? -1 : 1;\n }\n\n // if descending, highest sorts first\n return aValue < bValue ? 1 : -1;\n }\n\n return 0;\n };\n};\n","import { binarySearch } from './binary-search';\nimport type { OrderDefinition } from './query-types';\nimport { buildSortedComparator } from './sorted-comparator';\n\nexport const findIndexOrdered = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n orderBy: OrderDefinition[],\n): number => binarySearch(currentData, input, buildSortedComparator(orderBy));\n","import {\n isPostgrestHasMorePaginationCacheData,\n isPostgrestPaginationCacheData,\n} from './lib/cache-data-types';\nimport { findIndexOrdered } from './lib/find-index-ordered';\nimport { parseOrderByKey } from './lib/parse-order-by-key';\nimport type { OrderDefinition } from './lib/query-types';\nimport { isAnyPostgrestResponse } from './lib/response-types';\nimport { shouldRevalidateRelation } from './mutate/should-revalidate-relation';\nimport { shouldRevalidateTable } from './mutate/should-revalidate-table';\nimport {\n toHasMorePaginationCacheData,\n toPaginationCacheData,\n} from './mutate/transformers';\nimport type { DecodedKey, MutatorFn, RevalidateOpts } from './mutate/types';\nimport type { PostgrestFilter } from './postgrest-filter';\nimport type { PostgrestQueryParserOptions } from './postgrest-query-parser';\n\nexport const mutateOperation = <Type extends Record<string, unknown>>(\n input: Partial<Type>,\n mutate: (current: Type) => Type,\n currentData: Type[],\n primaryKeys: (keyof Type)[],\n filter: Pick<PostgrestFilter<Type>, 'apply'>,\n orderBy?: OrderDefinition[],\n) => {\n // find item\n const itemIdx = currentData.findIndex((oldItem) =>\n primaryKeys.every((pk) => oldItem[pk] === input[pk]),\n );\n\n if (itemIdx === -1) {\n // if not exists, do nothing\n return currentData;\n }\n\n let newItemIdx = itemIdx;\n const newItem = mutate(currentData[newItemIdx]);\n\n // if exists, remove\n currentData.splice(itemIdx, 1);\n\n if (orderBy && Array.isArray(orderBy) && orderBy.length > 0) {\n // if ordered, find new idx\n newItemIdx = findIndexOrdered(newItem, currentData, orderBy);\n }\n\n if (newItemIdx === -1) {\n // default to prepend\n newItemIdx = 0;\n }\n\n // check that new item is still a valid member of the list and has all required paths\n if (filter.apply(newItem)) {\n currentData.splice(newItemIdx, 0, newItem);\n }\n\n return currentData;\n};\n\nexport type MutateItemOperation<Type extends Record<string, unknown>> = {\n table: string;\n schema: string;\n input: Partial<Type>;\n mutate: (current: Type) => Type;\n primaryKeys: (keyof Type)[];\n} & RevalidateOpts<Type>;\n\nexport type MutateItemCache<KeyType, Type extends Record<string, unknown>> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Should return a PostgrestFilter for the given query.\n * This is exposed as a function so results can be cached by the cache library.\n */\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<\n PostgrestFilter<Type>,\n | 'applyFilters'\n | 'denormalize'\n | 'hasFiltersOnPaths'\n | 'applyFiltersOnPaths'\n | 'apply'\n | 'hasWildcardPath'\n | 'hasAggregatePath'\n >;\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The mutation function from the cache library\n */\n mutate: (key: KeyType, fn: MutatorFn<Type>) => Promise<void> | void;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\n\nexport const mutateItem = async <KeyType, Type extends Record<string, unknown>>(\n op: MutateItemOperation<Type>,\n cache: MutateItemCache<KeyType, Type>,\n) => {\n const {\n mutate: mutateInput,\n revalidateRelations: revalidateRelationsOpt,\n revalidateTables: revalidateTablesOpt,\n schema,\n table,\n primaryKeys,\n } = op;\n const { cacheKeys, decode, getPostgrestFilter, mutate, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n const filter = getPostgrestFilter(key.queryKey);\n if (key.schema === schema && key.table === table) {\n // parse input into expected target format\n const transformedInput = filter.denormalize(op.input);\n if (\n // For mutate, the input has to have a value for all primary keys\n op.primaryKeys.every(\n (pk) => typeof transformedInput[pk as string] !== 'undefined',\n ) && // allow mutate if either the filter does not apply eq filters on any pk\n (!filter.hasFiltersOnPaths(op.primaryKeys as string[]) ||\n // or input matches all pk filters\n filter.applyFiltersOnPaths(\n transformedInput,\n op.primaryKeys as string[],\n ))\n ) {\n const limit = key.limit ?? 1000;\n const orderBy = key.orderByKey\n ? parseOrderByKey(key.orderByKey)\n : undefined;\n if (\n key.isHead === true ||\n filter.hasWildcardPath ||\n filter.hasAggregatePath\n ) {\n // we cannot know whether the new item after mutating still has all paths required for a query if it contains a wildcard,\n // because we do not know what columns a table has. we must always revalidate then.\n mutations.push(revalidate(k));\n } else {\n mutations.push(\n mutate(k, (currentData) => {\n // Return early if undefined or null\n if (!currentData) return currentData;\n\n if (isPostgrestHasMorePaginationCacheData<Type>(currentData)) {\n return toHasMorePaginationCacheData(\n mutateOperation<Type>(\n transformedInput,\n mutateInput,\n currentData.flatMap((p) => p.data),\n primaryKeys,\n filter,\n orderBy,\n ),\n currentData,\n limit,\n );\n } else if (isPostgrestPaginationCacheData<Type>(currentData)) {\n return toPaginationCacheData(\n mutateOperation<Type>(\n transformedInput,\n mutateInput,\n currentData.flat(),\n primaryKeys,\n filter,\n orderBy,\n ),\n limit,\n );\n } else if (isAnyPostgrestResponse<Type>(currentData)) {\n const { data } = currentData;\n\n if (!Array.isArray(data)) {\n if (data === null) {\n return {\n data,\n count: currentData.count,\n };\n }\n const newData = mutateInput(data);\n return {\n // Check if the new data is still valid given the key\n data: filter.apply(newData) ? newData : null,\n count: currentData.count,\n };\n }\n\n const newData = mutateOperation<Type>(\n transformedInput,\n mutateInput,\n // deep copy data to avoid mutating the original\n JSON.parse(JSON.stringify(data)),\n primaryKeys,\n filter,\n orderBy,\n );\n\n return {\n data: newData,\n count: newData.length,\n };\n }\n return currentData;\n }),\n );\n }\n }\n }\n\n if (\n revalidateTablesOpt &&\n shouldRevalidateTable(revalidateTablesOpt, { decodedKey: key })\n ) {\n mutations.push(revalidate(k));\n }\n\n if (\n revalidateRelationsOpt &&\n shouldRevalidateRelation(revalidateRelationsOpt, {\n input: op.input,\n getPostgrestFilter,\n decodedKey: key,\n })\n ) {\n mutations.push(revalidate(k));\n }\n }\n await Promise.all(mutations);\n};\n","import type {\n PostgrestClientOptions,\n PostgrestTransformBuilder,\n} from '@supabase/postgrest-js';\nimport { GenericSchema } from '@supabase/postgrest-js/dist/cjs/types';\n\nimport { isPlainObject } from './lib/is-plain-object';\nimport type {\n PostgrestHasMorePaginationResponse,\n PostgrestPaginationResponse,\n} from './lib/response-types';\n\nexport type PostgrestOffsetPaginationFetcher<Type, Args> = (\n args: Args,\n) => Promise<Type>;\n\nexport type PostgrestOffsetPaginationKeyDecoder<Args> = (args: Args) => {\n limit?: number;\n offset?: number;\n};\n\nexport const createOffsetPaginationFetcher = <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n Args,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n Relationships\n >)\n | null,\n {\n decode,\n pageSize,\n rpcArgs,\n }: {\n decode: PostgrestOffsetPaginationKeyDecoder<Args>;\n pageSize: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): PostgrestOffsetPaginationFetcher<\n PostgrestPaginationResponse<Result>,\n Args\n> | null => {\n if (!queryFactory) return null;\n\n return async (args) => {\n const decodedKey = decode(args);\n const limit = decodedKey.limit ? decodedKey.limit : pageSize;\n const offset = decodedKey.offset ?? 0;\n\n const query = queryFactory();\n\n return rpcArgs\n ? await rpcOffsetPaginationFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, { limit, offset, rpcArgs })\n : await offsetPaginationFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, { limit, offset });\n };\n};\n\nexport const offsetPaginationFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n { limit, offset }: { limit: number; offset: number },\n) => {\n const { data } = await query.range(offset, offset + limit - 1).throwOnError();\n // cannot be null because of .throwOnError()\n return data as Result[];\n};\n\nexport const rpcOffsetPaginationFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n {\n limit,\n offset,\n rpcArgs,\n }: {\n limit: number;\n offset: number;\n rpcArgs: { limit: string; offset: string };\n },\n) => {\n if (query['method'] === 'GET') {\n query['url'].searchParams.set(rpcArgs.limit, String(limit));\n query['url'].searchParams.set(rpcArgs.offset, String(offset));\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [rpcArgs.limit]: limit,\n [rpcArgs.offset]: offset,\n };\n }\n\n const { data } = await query.throwOnError();\n\n // cannot be null because of .throwOnError()\n return data as Result[];\n};\n\nexport const createOffsetPaginationHasMoreFetcher = <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n Args,\n RelationName = unknown,\n Relationships = unknown,\n>(\n queryFactory:\n | (() => PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >)\n | null,\n {\n decode,\n pageSize,\n rpcArgs,\n }: {\n decode: PostgrestOffsetPaginationKeyDecoder<Args>;\n pageSize: number;\n rpcArgs?: { limit: string; offset: string };\n },\n): PostgrestOffsetPaginationFetcher<\n PostgrestHasMorePaginationResponse<Result>,\n Args\n> | null => {\n if (!queryFactory) return null;\n return async (args) => {\n const decodedKey = decode(args);\n const limit = decodedKey.limit ? decodedKey.limit : pageSize;\n const offset = decodedKey.offset ?? 0;\n const query = queryFactory();\n return rpcArgs\n ? await rpcOffsetPaginationHasMoreFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, {\n limit,\n offset,\n pageSize,\n rpcArgs,\n })\n : await offsetPaginationHasMoreFetcher<\n Options,\n Schema,\n Row,\n Result,\n RelationName,\n Relationships\n >(query, {\n limit,\n offset,\n pageSize,\n });\n };\n};\n\nexport const offsetPaginationHasMoreFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n {\n limit,\n offset,\n pageSize,\n }: { limit: number; offset: number; pageSize: number },\n) => {\n const { data } = await query.range(offset, offset + limit).throwOnError();\n\n let hasMore = false;\n if (data && data.length === pageSize + 1) {\n hasMore = true;\n data.pop();\n }\n return {\n // cannot be null because of .throwOnError()\n data: data as Result[],\n hasMore,\n };\n};\n\nexport const rpcOffsetPaginationHasMoreFetcher = async <\n Options extends PostgrestClientOptions,\n Schema extends GenericSchema,\n Row extends Record<string, unknown>,\n Result,\n RelationName = unknown,\n Relationships = unknown,\n>(\n query: PostgrestTransformBuilder<\n Options,\n Schema,\n Row,\n Result[],\n RelationName,\n Relationships\n >,\n {\n limit,\n offset,\n pageSize,\n rpcArgs,\n }: {\n limit: number;\n offset: number;\n pageSize: number;\n rpcArgs: { limit: string; offset: string };\n },\n) => {\n if (query['method'] === 'GET') {\n query['url'].searchParams.set(rpcArgs.limit, String(limit + 1));\n query['url'].searchParams.set(rpcArgs.offset, String(offset));\n } else {\n query['body'] = {\n ...(isPlainObject(query['body']) ? query['body'] : {}),\n [rpcArgs.limit]: limit + 1,\n [rpcArgs.offset]: offset,\n };\n }\n\n const { data } = await query.throwOnError();\n\n let hasMore = false;\n if (data && data.length === pageSize + 1) {\n hasMore = true;\n data.pop();\n }\n return {\n // cannot be null because of .throwOnError()\n data: data as Result[],\n hasMore,\n };\n};\n","import { unflatten } from 'flat';\n\nimport {\n groupPathsRecursive,\n isNestedPath,\n} from '../lib/group-paths-recursive';\nimport type { Path } from '../lib/query-types';\n\n/**\n * Denormalize a normalized response object using the paths of the target query\n **/\nexport const denormalize = <R extends Record<string, unknown>>(\n // the paths into which we need to transform\n paths: Path[],\n // the normalized response data\n obj: R,\n): R => {\n const groups = groupPathsRecursive(paths);\n\n if (groups.some((g) => g.path === '*')) {\n // if a wildcard path is present, we expand the groups with all values from the object that are not part of a nested path from `paths`.\n // This will include also unwanted values, e.g. from a join on another relation because its impossible for us to distinguish between json columns and joins.\n Object.keys(obj).forEach((k) => {\n const keyParts = k.split('.');\n if (\n keyParts.length > 1 &&\n groups.some((g) => isNestedPath(g) && g.path === keyParts[0])\n ) {\n // skip if key is actually part of a nested path from the groups\n return;\n }\n if (groups.some((g) => g.path === keyParts[0])) {\n // skip if key is already part of the groups\n return;\n }\n\n groups.push({\n declaration: keyParts[0],\n path: keyParts[0],\n });\n });\n }\n\n return groups.reduce<R>((prev, curr) => {\n // skip the wildcard since we already handled it above\n if (curr.path === '*') return prev;\n let value = obj[curr.path];\n\n if (!isNestedPath(curr)) {\n if (typeof value === 'undefined') {\n // if simple array, e.g. ['a', 'b', 'c'], unflatten\n const array = Object.entries(obj).reduce<any[]>((prev, [k, v]) => {\n // test if key is curr_path.0, curr_path.1 etc.\n if (new RegExp(`^${curr.path}.\\\\d+$`).test(k)) {\n prev.push(v);\n }\n return prev;\n }, []);\n if (array.length > 0) {\n value = array;\n }\n }\n if (typeof value === 'undefined') {\n // if json(b) column, unflatten\n let isArray = false;\n const jsonValue = Object.entries(obj).reduce<Record<string, unknown>>(\n (prev, [k, v]) => {\n if (k.startsWith(`${curr.path}.`)) {\n const key = k.slice(curr.path.length + 1);\n const maybeIdx = key.match(/^\\b\\d+\\b/);\n if (maybeIdx && isFlatNestedArray(prev)) {\n isArray = true;\n prev = {\n ...prev,\n [maybeIdx[0]]: {\n ...(prev[maybeIdx[0]] ? prev[maybeIdx[0]] : {}),\n [key.slice(maybeIdx[0].length + 1)]: v,\n },\n };\n } else {\n prev[maybeIdx ? maybeIdx[0] : key] = v;\n }\n }\n return prev;\n },\n {},\n );\n if (Object.keys(jsonValue).length > 0) {\n if (isArray) {\n value = Object.values(jsonValue).map((v) => unflatten(v));\n } else {\n value = unflatten(jsonValue);\n }\n }\n }\n if (typeof value === 'undefined') {\n return prev;\n }\n return {\n ...prev,\n [curr.alias || curr.path]: value,\n };\n }\n\n // if value is null or an empty array, the relation is not set and we can return the \"empty\" value\n if (value === null || (Array.isArray(value) && value.length === 0)) {\n return {\n ...prev,\n [curr.alias || curr.path]: value,\n };\n }\n\n let isArray = false;\n const flatNestedObjectOrArray = Object.entries(obj).reduce<\n Record<string, Record<string, unknown>> | Record<string, unknown>\n >((prev, [k, v]) => {\n const isNested =\n k.startsWith(`${curr.path}.`) ||\n (k.includes('!') &&\n k.startsWith(`${removeFirstAlias(curr.declaration)}.`));\n\n if (!isNested) return prev;\n // either set to key, or to idx.key\n // is either path.key or path!hint.key\n const flatKey = k.slice(\n (k.includes('!') ? removeFirstAlias(curr.declaration) : curr.path)\n .length + 1,\n );\n const maybeIdx = flatKey.match(/^\\b\\d+\\b/);\n if (maybeIdx && isFlatNestedArray(prev)) {\n isArray = true;\n const key = flatKey.slice(maybeIdx[0].length + 1);\n return {\n ...prev,\n [maybeIdx[0]]: {\n ...(prev[maybeIdx[0]] ? prev[maybeIdx[0]] : {}),\n [key]: v,\n },\n };\n }\n return {\n ...prev,\n [flatKey]: v,\n };\n }, {});\n\n if (Object.keys(flatNestedObjectOrArray).length === 0) return prev;\n if (isArray && isFlatNestedArray(flatNestedObjectOrArray)) {\n return {\n ...prev,\n [curr.alias || curr.path]: Object.values(flatNestedObjectOrArray).map(\n (v) => denormalize(curr.paths, v),\n ),\n };\n }\n return {\n ...prev,\n [curr.alias || curr.path]: denormalize(\n curr.paths,\n flatNestedObjectOrArray,\n ),\n };\n }, {} as R);\n};\n\n// just to make ts happy\nconst isFlatNestedArray = (\n obj: Record<string, Record<string, unknown>> | Record<string, unknown>,\n): obj is Record<string, Record<string, unknown>> => true;\n\nconst removeFirstAlias = (key: string): string => {\n const split = key.split(':');\n if (split.length === 1) return key;\n split.shift();\n return split.join(':');\n};\n","import {\n type FilterDefinitions,\n isAndFilter,\n isFilterDefinition,\n isOrFilter,\n} from './query-types';\n\nexport const filterFilterDefinitionsByPaths = (\n f: FilterDefinitions,\n paths: string[],\n) => {\n return f.reduce<FilterDefinitions>((prev, filter) => {\n if (isAndFilter(filter)) {\n const filters = filterFilterDefinitionsByPaths(filter.and, paths);\n if (filters.length > 0) {\n prev.push({ and: filters });\n }\n } else if (isOrFilter(filter)) {\n const filters = filterFilterDefinitionsByPaths(filter.or, paths);\n if (filters.length > 0) {\n prev.push({ or: filters });\n }\n } else if (isFilterDefinition(filter) && paths.includes(filter.path)) {\n prev.push(filter);\n }\n return prev;\n }, []);\n};\n","export const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && !Array.isArray(v) && v !== null;\n","export type MaybeLikePostgrestBuilder<Result> = unknown;\n\nexport type LikePostgrestBuilder<Result> = {\n url: URL;\n method: 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE';\n headers: Headers;\n schema?: string;\n body?: unknown;\n};\n\nexport const isLikePostgrestBuilder = <Result>(\n v: MaybeLikePostgrestBuilder<Result>,\n): v is LikePostgrestBuilder<Result> => {\n if (typeof v !== 'object' || v === null) return false;\n const obj = v as LikePostgrestBuilder<Result>;\n\n return (\n typeof obj['url'] === 'object' &&\n typeof obj['headers'] === 'object' &&\n typeof obj['method'] === 'string'\n );\n};\n","import { deepEqual } from 'fast-equals';\n\nimport type { FilterOperator, OperatorFn } from './query-types';\n\n/**\n * Builds a regex for a (i)like postgres operator by replacing the \"%\" with a regex wildcard \".*\"\n * @param search The search value\n * @returns A RegExp representing the (i)like operation\n */\nconst buildLikeRegex = (search: string) =>\n new RegExp(`^${search.replace(/%/g, '.*')}$`);\n\n/**\n * A poor humans attempt to implement postgres text search in javascript.\n * Converts the search string into a regex before testing it against all tokens.\n */\nconst textSearch: OperatorFn = (c, v) => {\n const regExp = `^${v\n .split('&')\n .map((v: string) => v.trim().toLowerCase())\n .join('|')\n .replace(/:\\*/g, '.*')}$`;\n const tokens = c\n .match(/'(.*?)'/g)\n .map((t: string) => t.replace(/'/g, '').toLowerCase());\n return tokens.some((t: string) => new RegExp(regExp).test(t));\n};\n\n/**\n * Date instances do not work with equality operators, which is why their times are compared instead.\n *\n * ref: https://stackoverflow.com/questions/492994/compare-two-dates-with-javascript\n * @param v The input value\n * @returns If the input value is an instanceof Date, return v.getTime(), else the input value\n */\nconst ifDateGetTime = (v: any) => (v instanceof Date ? v.getTime() : v);\n\nconst enclose = (v: string, char: string) => {\n if (!v.startsWith(char)) v = `${char}${v}`;\n if (!v.endsWith(char)) v = `${v}${char}`;\n return v;\n};\n\n/**\n * An object containing all FilterOperator implementations\n */\nexport const OPERATOR_MAP: { [Key in FilterOperator]?: OperatorFn } = {\n eq: (c, v) => ifDateGetTime(c) === ifDateGetTime(v),\n neq: (c, v) => ifDateGetTime(c) !== ifDateGetTime(v),\n gt: (c, v) => c > v,\n gte: (c, v) => c >= v,\n lt: (c, v) => c < v,\n lte: (c, v) => c <= v,\n like: (c, v) => buildLikeRegex(v).test(c.toString()),\n ilike: (c, v) =>\n buildLikeRegex(v.toLowerCase()).test(c.toString().toLowerCase()),\n is: (c, v) => c === v,\n in: (c, v) => {\n const parsedValue = v.slice(1, -1).split(',');\n return parsedValue.some((i: string) => i === c);\n },\n // contains\n cs: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return v.every((i: string) => c.some((colVal) => deepEqual(colVal, i)));\n },\n // containedBy\n cd: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return c.every((i: string) =>\n v.some((cmpVal: any) => deepEqual(cmpVal, i)),\n );\n },\n fts: textSearch,\n plfts: (c, v) =>\n buildLikeRegex(enclose(v.toLowerCase(), '%')).test(\n c.toString().toLowerCase(),\n ),\n};\n","/**\n * Returns the index of the last element in the array where predicate is true, and -1\n * otherwise.\n * @param array The source array to search in\n * @param predicate find calls predicate once for each element of the array, in descending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n */\nexport function findLastIndex<T>(\n array: T[],\n predicate: (value: T, index: number, obj: T[]) => boolean,\n): number {\n let l = array.length;\n while (l--) {\n if (predicate(array[l], l, array)) return l;\n }\n return -1;\n}\n","/**\n *\n * @param i Ahhh gotta love typescript\n * @returns\n */\nexport const isNotNull = <I>(i: I | null): i is I => i !== null;\n","import { findLastIndex } from './lib/find-last-index';\nimport { isNotNull } from './lib/is-not-null';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseSelectParam } from './lib/parse-select-param';\nimport { parseValue } from './lib/parse-value';\nimport type {\n FilterDefinition,\n FilterDefinitions,\n FilterOperator,\n Path,\n} from './lib/query-types';\n\nexport const SUPPORTED_OPERATORS = ['or', ...Object.keys(OPERATOR_MAP)];\n\nexport type PostgrestQueryParserOptions = {\n /**\n * If defined, will use only filters that apply to the given paths\n */\n exclusivePaths?: string[];\n};\n\nexport class PostgrestQueryParser {\n private readonly _params: URLSearchParams;\n\n private _filters: FilterDefinitions | undefined;\n private _paths: Path[] | undefined;\n\n constructor(\n query: string,\n public readonly opts?: PostgrestQueryParserOptions,\n ) {\n this._params = new URLSearchParams(query);\n }\n\n /**\n * Getter that returns the paths and their aliases that the query selects. Will do the computation only once.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\")\n * .select(\n * `name,\n * city:cities (\n * test:name\n * ),\n * countries (\n * capital,\n * population,\n * some_ref (\n * test:first,\n * second\n * )\n * )`\n * );\n * console.log(p.paths);\n * // [\n * // { alias: undefined, path: \"name\" },\n * // { alias: \"city.test\", path: \"cities.name\" },\n * // { alias: undefined, path: \"countries.capital\" },\n * // { alias: undefined, path: \"countries.population\" },\n * // {\n * // alias: \"countries.some_ref.test\",\n * // path: \"countries.some_ref.first\",\n * // },\n * // { alias: undefined, path: \"countries.some_ref.second\" },\n * // ];\n * ```\n *\n * @returns an array of paths that the query selects, containing the columns and aliases\n */\n get paths(): Path[] {\n if (!this._paths) {\n const select = this._params.get('select');\n this._paths = select ? parseSelectParam(select) : [];\n }\n return this._paths;\n }\n\n /**\n * Getter that returns the filters that this query applies in a json object.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\").select('*')\n * .or(\"full_name.eq.20,test.neq.true,and(full_name.eq.Test Name,email.eq.test@mail.com)\")\n * .eq(\"id\", \"123\")\n * .contains(\"id\", \"456\")\n * );\n *\n * console.log(p.filters);\n *\n * // [\n * // {\n * // or: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 20,\n * // },\n * // {\n * // path: \"test\",\n * // negate: false,\n * // operator: \"neq\",\n * // value: true,\n * // },\n * // {\n * // and: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"Test Name\",\n * // },\n * // {\n * // path: \"email\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"test@mail.com\",\n * // },\n * // ],\n * // },\n * // ],\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 123,\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"cs\",\n * // value: 456,\n * // },\n * // ];\n * ```\n *\n * @returns a FilterDefinitions object\n */\n get filters(): FilterDefinitions {\n if (!this._filters) {\n const filters: FilterDefinitions = [];\n this._params.forEach((value, key) => {\n if (\n SUPPORTED_OPERATORS.some(\n (f) => key === f || value.split('.').includes(f),\n )\n ) {\n const filter = this.parseFilterString(`${key}.${value}`, undefined);\n if (filter !== null) filters.push(filter);\n }\n });\n this._filters = filters;\n }\n return this._filters;\n }\n\n private parseFilterString(\n filter: string,\n prefix?: string,\n ):\n | FilterDefinition\n | { or: FilterDefinitions }\n | { and: FilterDefinitions }\n | null {\n if (filter.startsWith('and(') && filter.endsWith(')')) {\n // nested and\n const andFilters = filter\n .slice(4, -1)\n .split(',')\n .map((s) => this.parseFilterString(s, prefix))\n .filter(isNotNull);\n if (andFilters.length === 0) return null;\n else return { and: andFilters };\n }\n\n const split = filter.split('.');\n\n // or\n if ([split[0], split[1]].includes('or')) {\n let foreignTable: string | undefined;\n if (split[1] === 'or') {\n // with foreign table\n foreignTable = split[0];\n }\n\n const orFilters = filter\n .slice(4 + (foreignTable ? foreignTable.length + 1 : 0), -1)\n .split(',')\n .reduce<string[]>((prev, curr, idx, filters) => {\n if (curr.startsWith('and(')) {\n // nested and\n prev = [...prev, [curr, filters[idx + 1]].join()];\n } else if (!curr.endsWith(')')) {\n prev = [...prev, curr];\n }\n return prev;\n }, [])\n .map((s) => this.parseFilterString(s, foreignTable))\n .filter(isNotNull);\n if (orFilters.length === 0) return null;\n else return { or: orFilters };\n }\n\n const operatorIdx = findLastIndex(split, (s) =>\n SUPPORTED_OPERATORS.includes(s),\n );\n if (operatorIdx === -1)\n throw new Error(\n `Could not find a valid operator in ${split.join('.')}. Supported are ${SUPPORTED_OPERATORS.join(',')}.`,\n );\n const negate = split[operatorIdx - 1] === 'not';\n\n const pathOrAlias = [\n prefix,\n ...split.slice(0, negate ? operatorIdx - 1 : operatorIdx),\n ]\n .filter(Boolean)\n .join('.')\n .replace(/\\s/g, '');\n\n let path = pathOrAlias;\n let alias;\n // filter paths can use either the real path or the alias\n // search for alias and path in paths of query\n // if none is found, its a path because the alias would need to be defined\n // in the query\n for (const p of this.paths) {\n if (p.path === pathOrAlias) {\n alias = p.alias;\n break;\n }\n if (p.alias === pathOrAlias) {\n path = p.path;\n alias = p.alias;\n break;\n }\n }\n\n if (\n this.opts &&\n Array.isArray(this.opts.exclusivePaths) &&\n !this.opts.exclusivePaths.includes(path)\n ) {\n return null;\n }\n\n const operator = split[operatorIdx] as FilterOperator;\n const value = split.slice(operatorIdx + 1).join('.');\n return {\n path,\n alias,\n negate,\n operator,\n value: parseValue(value),\n };\n }\n}\n","import { denormalize } from './filter/denormalize';\nimport { extractPathsFromFilters } from './lib/extract-paths-from-filter';\nimport { filterFilterDefinitionsByPaths } from './lib/filter-filter-definitions-by-paths';\nimport { get } from './lib/get';\nimport { isObject } from './lib/is-object';\nimport {\n MaybeLikePostgrestBuilder,\n isLikePostgrestBuilder,\n} from './lib/like-postgrest-builder';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseValue } from './lib/parse-value';\nimport type {\n FilterDefinition,\n FilterDefinitions,\n FilterFn,\n OperatorFn,\n Path,\n ValueType,\n} from './lib/query-types';\nimport {\n PostgrestQueryParser,\n type PostgrestQueryParserOptions,\n} from './postgrest-query-parser';\n\nexport class PostgrestFilter<Result extends Record<string, unknown>> {\n private _fn: FilterFn<Result> | undefined;\n private _selectFn: FilterFn<Result> | undefined;\n private _filtersFn: FilterFn<Result> | undefined;\n private _filterPaths: Path[];\n public hasWildcardPath: boolean | undefined;\n public hasAggregatePath: boolean | undefined;\n\n constructor(\n public readonly params: { filters: FilterDefinitions; paths: Path[] },\n ) {\n this._filterPaths = extractPathsFromFilters(\n this.params.filters,\n this.params.paths,\n );\n this.hasWildcardPath = this.params.paths.some((p) =>\n p.declaration.endsWith('*'),\n );\n this.hasAggregatePath = this.params.paths.some((p) => Boolean(p.aggregate));\n }\n\n public static fromQuery(query: string, opts?: PostgrestQueryParserOptions) {\n const parser = new PostgrestQueryParser(query, opts);\n return new PostgrestFilter({\n filters: parser.filters,\n paths: parser.paths,\n });\n }\n\n public static fromBuilder<\n Result extends Record<string, unknown> = Record<string, unknown>,\n >(\n fb: MaybeLikePostgrestBuilder<Result>,\n opts?: PostgrestQueryParserOptions,\n ): PostgrestFilter<Result> {\n if (!isLikePostgrestBuilder(fb)) {\n throw new Error('Invalid PostgrestBuilder');\n }\n\n const parser = new PostgrestQueryParser(\n fb['url'].searchParams.toString(),\n opts,\n );\n return new PostgrestFilter<Result>({\n filters: parser.filters,\n paths: parser.paths,\n });\n }\n\n denormalize<Type extends Record<string, unknown>>(obj: Type): Type {\n return denormalize([...this.params.paths, ...this._filterPaths], obj);\n }\n\n apply(obj: unknown): obj is Result {\n if (!this._fn) {\n this._fn = (obj): obj is Result =>\n this.applyFilters(obj) && this.hasPaths(obj);\n }\n return this._fn(obj);\n }\n\n applyFilters(obj: unknown): obj is Result {\n if (!this._filtersFn) {\n const filterFns = this.params.filters.map((d) => this.buildFilterFn(d));\n this._filtersFn = (obj): obj is Result =>\n filterFns.every((fn) => isObject(obj) && fn(obj));\n }\n return this._filtersFn(obj);\n }\n\n hasFiltersOnPaths(paths: string[]): boolean {\n return (\n filterFilterDefinitionsByPaths(this.params.filters, paths).length > 0\n );\n }\n\n applyFiltersOnPaths(obj: unknown, paths: string[]): obj is Result {\n const filterFns = filterFilterDefinitionsByPaths(\n this.params.filters,\n paths,\n ).map((d) => this.buildFilterFn(d));\n const filtersFn = (obj: unknown): obj is Result =>\n filterFns.every((fn) => isObject(obj) && fn(obj));\n return filtersFn(obj);\n }\n\n hasPaths(obj: unknown): obj is Result {\n if (!this._selectFn) {\n this._selectFn = (obj): obj is Result =>\n this.params.paths.every((p) =>\n this.hasPathRecursive(obj, p.alias ?? p.path),\n );\n }\n return this._selectFn(obj);\n }\n\n private hasPathRecursive(obj: unknown, path: string): boolean {\n // obj is valid if v is null, because the foreign key relation can be null\n if (obj === null) return true;\n\n // normalise json operators \"->\" and \"->>\" to \".\"\n const pathElements = path.replace(/->>|->/g, '.').split('.');\n\n // we are at the deepest level\n if (pathElements.length === 1) {\n // else check if the path exists\n return typeof get(obj, pathElements[0]) !== 'undefined';\n }\n\n // go deeper\n const currentPathElement = pathElements.shift();\n const v = get(obj, currentPathElement!);\n\n // undefined means the path does not exist\n if (typeof v === 'undefined') return false;\n\n // if we have an array, check if all elements have the path\n if (Array.isArray(v)) {\n return v.every((i) => this.hasPathRecursive(i, pathElements.join('.')));\n }\n\n // if we dont have an array, continue recursively\n return this.hasPathRecursive(v, pathElements.join('.'));\n }\n\n private applyFilterFn(\n obj: object | any[],\n path: string,\n {\n filterFn,\n value,\n negate,\n }: { filterFn: OperatorFn; value: ValueType; negate: boolean },\n ): boolean {\n // parse json operators \"->\" and \"->>\" to \".\"\n const pathElements = path.replace(/->>|->/g, '.').split('.');\n\n const v = get(obj, pathElements[0]);\n\n if (typeof v === 'undefined') {\n // if obj is an array, we should apply the filter to all elements of the array\n if (Array.isArray(obj)) {\n return obj.every((o) =>\n this.applyFilterFn(o, path, { filterFn, value, negate }),\n );\n }\n return false;\n }\n\n if (pathElements.length > 1) {\n // recursively resolve json path\n return this.applyFilterFn(\n v as Record<string, unknown>,\n pathElements.slice(1).join('.'),\n {\n filterFn,\n value,\n negate,\n },\n );\n }\n\n const res = filterFn(parseValue(v), value);\n if (negate) return !res;\n return res;\n }\n\n private buildFilterFn(\n def:\n | FilterDefinition\n | { or: FilterDefinitions }\n | { and: FilterDefinitions },\n ): (obj: object) => boolean {\n if ('or' in def) {\n return (obj: object) => def.or.some((d) => this.buildFilterFn(d)(obj));\n }\n if ('and' in def) {\n return (obj: object) => def.and.every((d) => this.buildFilterFn(d)(obj));\n }\n const { operator, path, value, negate, alias } = def;\n const filterFn = OPERATOR_MAP[operator];\n if (!filterFn)\n throw new Error(\n `Unable to build filter function for ${JSON.stringify(\n def,\n )}. Operator ${operator} is not supported.`,\n );\n\n return (obj: object) =>\n this.applyFilterFn(obj, alias ?? path, { filterFn, value, negate });\n }\n}\n","import { encodeObject } from './lib/encode-object';\nimport { getTableFromUrl } from './lib/get-table-from-url';\nimport { isObject } from './lib/is-object';\nimport {\n MaybeLikePostgrestBuilder,\n isLikePostgrestBuilder,\n} from './lib/like-postgrest-builder';\nimport { parseOrderBy } from './lib/parse-order-by';\nimport type { OrderDefinition } from './lib/query-types';\nimport { sortSearchParams } from './lib/sort-search-param';\nimport {\n PostgrestQueryParser,\n type PostgrestQueryParserOptions,\n} from './postgrest-query-parser';\n\nexport class PostgrestParser<Result> extends PostgrestQueryParser {\n private readonly _url: URL;\n private readonly _headers: Headers;\n private readonly _body: object | undefined;\n private readonly _method: 'GET' | 'HEAD' | 'POST' | 'PATCH' | 'DELETE';\n\n public readonly queryKey: string;\n public readonly bodyKey: string | undefined;\n public readonly count: string | null;\n public readonly schema: string;\n public readonly table: string;\n public readonly isHead: boolean | undefined;\n public readonly limit: number | undefined;\n public readonly offset: number | undefined;\n public readonly orderBy: OrderDefinition[] = [];\n public readonly orderByKey: string;\n\n constructor(\n fb: MaybeLikePostgrestBuilder<Result>,\n public readonly opts?: PostgrestQueryParserOptions,\n ) {\n if (!isLikePostgrestBuilder(fb)) {\n throw new Error('Invalid PostgrestBuilder');\n }\n\n super(new URL(fb['url']).searchParams.toString(), opts);\n\n this._url = new URL(fb['url']);\n this._headers = fb['headers'];\n this._body = isObject(fb['body']) ? { ...fb['body'] } : undefined;\n this._method = fb['method'];\n\n this.queryKey = sortSearchParams(this._url.searchParams).toString();\n\n this.table = getTableFromUrl(this._url.toString());\n\n if (this._body) {\n this.bodyKey = encodeObject(this._body as Record<string, unknown>);\n }\n\n // 'Prefer': return=minimal|representation,count=exact|planned|estimated\n const preferHeaders: Record<string, string> = (\n this._headers.get('Prefer') || ''\n )\n .split(',')\n .reduce<Record<string, string>>((prev, curr) => {\n const s = curr.split('=');\n return {\n ...prev,\n [s[0]]: s[1],\n };\n }, {});\n this.count = preferHeaders['count'] ?? null;\n\n this.schema = fb['schema'] as string;\n\n this.isHead = this._method === 'HEAD';\n\n const limit = this._url.searchParams.get('limit');\n this.limit = limit ? Number(limit) : undefined;\n const offset = this._url.searchParams.get('offset');\n this.offset = offset ? Number(offset) : undefined;\n\n this.orderBy = parseOrderBy(this._url.searchParams);\n this.orderByKey = this.orderBy\n .map(\n ({ column, ascending, nullsFirst, foreignTable }) =>\n `${foreignTable ? `${foreignTable}.` : ''}${column}:${\n ascending ? 'asc' : 'desc'\n }.${nullsFirst ? 'nullsFirst' : 'nullsLast'}`,\n )\n .join('|');\n }\n}\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type UpdateFetcher<T extends GenericTable, R> = (\n input: Partial<T['Row']>,\n) => Promise<MutationFetcherResponse<R> | null>;\n\nexport type UpdateFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['update']>[1] & {\n stripPrimaryKeys?: boolean;\n};\n\nexport const buildUpdateFetcher =\n <\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n >(\n qb: PostgrestQueryBuilder<O, S, T, Re>,\n primaryKeys: (keyof T['Row'])[],\n {\n stripPrimaryKeys = true,\n ...opts\n }: BuildNormalizedQueryOps<Q> & UpdateFetcherOptions<O, S, T>,\n ): UpdateFetcher<T, R> =>\n async (\n input: Partial<T['Row']>,\n ): Promise<MutationFetcherResponse<R> | null> => {\n const payload = stripPrimaryKeys\n ? primaryKeys.reduce<typeof input>(\n (acc, key) => {\n delete acc[key];\n return acc;\n },\n { ...input },\n )\n : input;\n let filterBuilder = qb.update(payload as any, opts); // todo fix type;\n for (const key of primaryKeys) {\n const value = input[key];\n // The value can be 0 or false, so we need to check if it's null or undefined instead of falsy\n if (value === null || value === undefined)\n throw new Error(`Missing value for primary key ${String(key)}`);\n // todo fix type\n filterBuilder = filterBuilder.eq(key as string, value as any);\n }\n\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n const { data } = await filterBuilder\n .select(selectQuery)\n .throwOnError()\n .single();\n return buildMutationFetcherResponse(data as R, {\n groupedPaths,\n groupedUserQueryPaths,\n });\n }\n await filterBuilder.throwOnError().single();\n return { normalizedData: input as R };\n };\n","import type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\n\nimport {\n type MutationFetcherResponse,\n buildMutationFetcherResponse,\n} from './fetch/build-mutation-fetcher-response';\nimport {\n type BuildNormalizedQueryOps,\n buildNormalizedQuery,\n} from './fetch/build-normalized-query';\n\nexport type UpsertFetcher<T extends GenericTable, R> = (\n input: T['Insert'][],\n) => Promise<MutationFetcherResponse<R>[] | null>;\n\nexport type UpsertFetcherOptions<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n Re = T extends { Relationships: infer R } ? R : unknown,\n> = Parameters<PostgrestQueryBuilder<O, S, T, Re>['upsert']>[1];\n\nexport const buildUpsertFetcher =\n <\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n >(\n qb: PostgrestQueryBuilder<O, S, T, Re>,\n opts: BuildNormalizedQueryOps<Q> & UpsertFetcherOptions<O, S, T>,\n ): UpsertFetcher<T, R> =>\n async (\n input: T['Insert'][],\n ): Promise<MutationFetcherResponse<R>[] | null> => {\n const query = buildNormalizedQuery<Q>(opts);\n if (query) {\n const { selectQuery, groupedUserQueryPaths, groupedPaths } = query;\n const { data } = await qb\n .upsert(input as any, opts) // todo fix type\n .throwOnError()\n .select(selectQuery);\n return (data as R[]).map((d) =>\n buildMutationFetcherResponse(d, {\n groupedPaths,\n groupedUserQueryPaths,\n }),\n );\n }\n await qb\n .upsert(input as any) // todo fix type\n .throwOnError();\n return input.map((d) => ({\n normalizedData: d as R,\n }));\n };\n","import { merge as mergeAnything } from 'merge-anything';\n\nimport {\n isPostgrestHasMorePaginationCacheData,\n isPostgrestPaginationCacheData,\n} from './lib/cache-data-types';\nimport { findIndexOrdered } from './lib/find-index-ordered';\nimport { parseOrderByKey } from './lib/parse-order-by-key';\nimport type { OrderDefinition } from './lib/query-types';\nimport { isAnyPostgrestResponse } from './lib/response-types';\nimport { shouldRevalidateRelation } from './mutate/should-revalidate-relation';\nimport { shouldRevalidateTable } from './mutate/should-revalidate-table';\nimport {\n toHasMorePaginationCacheData,\n toPaginationCacheData,\n} from './mutate/transformers';\nimport type { DecodedKey, MutatorFn, RevalidateOpts } from './mutate/types';\nimport type { PostgrestFilter } from './postgrest-filter';\nimport type { PostgrestQueryParserOptions } from './postgrest-query-parser';\n\ntype MergeFn<Type extends Record<string, unknown>> = (\n current: Type,\n input: Type,\n) => Type;\n\nexport const upsert = <Type extends Record<string, unknown>>(\n input: Type,\n currentData: Type[],\n primaryKeys: (keyof Type)[],\n filter: Pick<PostgrestFilter<Type>, 'apply'>,\n mergeFn?: MergeFn<Type>,\n orderBy?: OrderDefinition[],\n) => {\n const merge = mergeFn ?? (mergeAnything as MergeFn<Type>);\n\n // find item\n const itemIdx = currentData.findIndex((oldItem) =>\n primaryKeys.every((pk) => oldItem[pk] === input[pk]),\n );\n\n let newItem = input;\n let newItemIdx = itemIdx;\n\n if (itemIdx !== -1) {\n // if exists, merge and remove\n newItem = merge(currentData[itemIdx], input) as Type;\n currentData.splice(itemIdx, 1);\n }\n\n if (orderBy && Array.isArray(orderBy) && orderBy.length > 0) {\n // if ordered, find new idx\n newItemIdx = findIndexOrdered(newItem, currentData, orderBy);\n }\n\n if (newItemIdx === -1) {\n // default to prepend\n newItemIdx = 0;\n }\n\n // check that new item is still a valid member of the list and has all required paths\n if (filter.apply(newItem)) {\n currentData.splice(newItemIdx, 0, newItem);\n }\n\n return currentData;\n};\n\nexport type UpsertItemOperation<Type extends Record<string, unknown>> = {\n table: string;\n schema: string;\n input: Type;\n primaryKeys: (keyof Type)[];\n merge?: (current: Type, input: Type) => Type;\n} & RevalidateOpts<Type>;\n\nexport type UpsertItemCache<KeyType, Type extends Record<string, unknown>> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Should return a PostgrestFilter for the given query.\n * This is exposed as a function so results can be cached by the cache library.\n */\n getPostgrestFilter: (\n query: string,\n opts?: PostgrestQueryParserOptions,\n ) => Pick<\n PostgrestFilter<Type>,\n | 'applyFilters'\n | 'denormalize'\n | 'hasFiltersOnPaths'\n | 'applyFiltersOnPaths'\n | 'apply'\n | 'hasWildcardPath'\n | 'hasAggregatePath'\n >;\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The mutation function from the cache library\n */\n mutate: (key: KeyType, fn: MutatorFn<Type>) => Promise<void> | void;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\nexport const upsertItem = async <KeyType, Type extends Record<string, unknown>>(\n op: UpsertItemOperation<Type>,\n cache: UpsertItemCache<KeyType, Type>,\n) => {\n const {\n revalidateRelations: revalidateRelationsOpt,\n revalidateTables: revalidateTablesOpt,\n schema,\n table,\n primaryKeys,\n } = op;\n const { cacheKeys, decode, getPostgrestFilter, mutate, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n const filter = getPostgrestFilter(key.queryKey);\n if (key.schema === schema && key.table === table) {\n // parse input into expected target format\n const transformedInput = filter.denormalize(op.input);\n if (\n filter.applyFilters(transformedInput) ||\n // also allow upsert if either the filter does not apply eq filters on any pk\n !filter.hasFiltersOnPaths(op.primaryKeys as string[]) ||\n // or input matches all pk filters\n filter.applyFiltersOnPaths(transformedInput, op.primaryKeys as string[])\n ) {\n const merge = op.merge ?? (mergeAnything as MergeFn<Type>);\n const limit = key.limit ?? 1000;\n const orderBy = key.orderByKey\n ? parseOrderByKey(key.orderByKey)\n : undefined;\n\n if (\n key.isHead === true ||\n filter.hasWildcardPath ||\n filter.hasAggregatePath\n ) {\n // we cannot know whether the new item after merging still has all paths required for a query if it contains a wildcard,\n // because we do not know what columns a table has. we must always revalidate then.\n mutations.push(revalidate(k));\n } else {\n mutations.push(\n mutate(k, (currentData) => {\n // Return early if undefined or null\n if (!currentData) return currentData;\n\n if (isPostgrestHasMorePaginationCacheData<Type>(currentData)) {\n return toHasMorePaginationCacheData(\n upsert<Type>(\n transformedInput,\n currentData.flatMap((p) => p.data),\n primaryKeys,\n filter,\n merge,\n orderBy,\n ),\n currentData,\n limit,\n );\n } else if (isPostgrestPaginationCacheData<Type>(currentData)) {\n return toPaginationCacheData(\n upsert<Type>(\n transformedInput,\n currentData.flat(),\n primaryKeys,\n filter,\n merge,\n orderBy,\n ),\n limit,\n );\n } else if (isAnyPostgrestResponse<Type>(currentData)) {\n const { data } = currentData;\n\n if (!Array.isArray(data)) {\n if (data === null) {\n return {\n data,\n count: currentData.count,\n };\n }\n const newData = merge(data, transformedInput);\n return {\n // Check if the new data is still valid given the key\n data: filter.apply(newData) ? newData : null,\n count: currentData.count,\n };\n }\n\n const newData = upsert<Type>(\n transformedInput,\n // deep copy data to avoid mutating the original\n JSON.parse(JSON.stringify(data)),\n primaryKeys,\n filter,\n merge,\n orderBy,\n );\n\n return {\n data: newData,\n count: newData.length,\n };\n }\n return currentData;\n }),\n );\n }\n }\n }\n\n if (\n revalidateTablesOpt &&\n shouldRevalidateTable(revalidateTablesOpt, { decodedKey: key })\n ) {\n mutations.push(revalidate(k));\n }\n\n if (\n revalidateRelationsOpt &&\n shouldRevalidateRelation(revalidateRelationsOpt, {\n input: op.input,\n getPostgrestFilter,\n decodedKey: key,\n })\n ) {\n mutations.push(revalidate(k));\n }\n }\n await Promise.all(mutations);\n};\n","import {\n RevalidateTables,\n shouldRevalidateTable,\n} from './mutate/should-revalidate-table';\nimport type { DecodedKey } from './mutate/types';\n\nexport type RevalidateTablesOperation = RevalidateTables;\n\nexport type RevalidateTablesCache<KeyType> = {\n /**\n * The keys currently present in the cache\n */\n cacheKeys: KeyType[];\n /**\n * Decode a key. Should return null if not a PostgREST key.\n */\n decode: (k: KeyType) => DecodedKey | null;\n /**\n * The revalidation function from the cache library\n */\n revalidate: (key: KeyType) => Promise<void> | void;\n};\n\nexport const revalidateTables = async <KeyType>(\n tables: RevalidateTablesOperation,\n cache: RevalidateTablesCache<KeyType>,\n) => {\n const { cacheKeys, decode, revalidate } = cache;\n\n const mutations = [];\n for (const k of cacheKeys) {\n const key = decode(k);\n\n // Exit early if not a postgrest key\n if (!key) continue;\n\n if (shouldRevalidateTable(tables, { decodedKey: key })) {\n mutations.push(revalidate(k));\n }\n }\n\n await Promise.all(mutations);\n};\n","import {\n type DeleteItemOperation,\n deleteItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { flatten } from 'flat';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\n\n/**\n * Convenience hook to delete an item from the react query cache. Does not make any http requests, and is supposed to be used for custom cache updates.\n * @param opts The mutation options\n * @returns void\n */\nexport function useDeleteItem<Type extends Record<string, unknown>>(\n opts: Omit<DeleteItemOperation<Type>, 'input'>,\n) {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Type) =>\n await deleteItem(\n {\n input: flatten(input) as Type,\n ...opts,\n },\n {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n getPostgrestFilter,\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n mutate: (key, fn) => {\n queryClient.setQueriesData({ queryKey: key }, fn);\n },\n decode,\n },\n );\n}\n","import {\n PostgrestFilter,\n type PostgrestQueryParserOptions,\n encodeObject,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\n\nexport const POSTGREST_FILTER_KEY_PREFIX = 'postgrest-filter';\n\nexport const usePostgrestFilterCache = <\n R extends Record<string, unknown>,\n>() => {\n const queryClient = useQueryClient();\n\n return (query: string, opts?: PostgrestQueryParserOptions) => {\n const key = [\n POSTGREST_FILTER_KEY_PREFIX,\n query,\n opts ? encodeObject(opts) : null,\n ];\n const cacheData = queryClient.getQueryData(key);\n if (cacheData instanceof PostgrestFilter) {\n return cacheData;\n }\n const filter = PostgrestFilter.fromQuery(query, opts);\n queryClient.setQueryData(key, filter);\n return filter as PostgrestFilter<R>;\n };\n};\n","import {\n type DecodedKey,\n PostgrestParser,\n isPostgrestBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\n\nexport const KEY_PREFIX = 'postgrest';\nexport const INFINITE_KEY_PREFIX = 'page';\n\nexport type DecodedReactQueryKey = DecodedKey & {\n isInfinite: boolean;\n key: string[];\n};\n\nexport const encode = <Result>(key: unknown, isInfinite: boolean): string[] => {\n if (!isPostgrestBuilder<Result>(key)) {\n throw new Error('Key is not a PostgrestBuilder');\n }\n\n const parser = new PostgrestParser<Result>(key);\n return [\n KEY_PREFIX,\n isInfinite ? INFINITE_KEY_PREFIX : 'null',\n parser.schema,\n parser.table,\n parser.queryKey,\n parser.bodyKey ?? 'null',\n `count=${parser.count}`,\n `head=${parser.isHead}`,\n parser.orderByKey,\n ];\n};\n\nexport const decode = (key: unknown): DecodedReactQueryKey | null => {\n if (!Array.isArray(key)) return null;\n\n const [\n prefix,\n infinitePrefix,\n schema,\n table,\n queryKey,\n bodyKey,\n count,\n head,\n orderByKey,\n ] = key;\n\n // Exit early if not a postgrest key\n if (prefix !== KEY_PREFIX) return null;\n\n const params = new URLSearchParams(queryKey);\n const limit = params.get('limit');\n const offset = params.get('offset');\n\n const countValue = count.replace('count=', '');\n\n return {\n limit: limit ? Number(limit) : undefined,\n offset: offset ? Number(offset) : undefined,\n bodyKey,\n count: countValue === 'null' ? null : countValue,\n isHead: head === 'head=true',\n isInfinite: infinitePrefix === INFINITE_KEY_PREFIX,\n key,\n queryKey,\n schema,\n table,\n orderByKey,\n };\n};\n","import type { BuildNormalizedQueryOps } from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { decode } from './key';\nimport { usePostgrestFilterCache } from './use-postgrest-filter-cache';\n\nexport const useQueriesForTableLoader = (table: string) => {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return () =>\n queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey)\n .reduce<ReturnType<BuildNormalizedQueryOps['queriesForTable']>>(\n (prev, curr) => {\n const decodedKey = decode(curr);\n if (decodedKey?.table === table) {\n prev.push(getPostgrestFilter(decodedKey.queryKey).params);\n }\n return prev;\n },\n [],\n );\n};\n","import {\n type MutateItemOperation,\n mutateItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { flatten } from 'flat';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\n\n/**\n * Convenience hook to mutate an item within the react query cache. Does not make any http requests, and is supposed to be used for custom cache updates.\n * @param opts The mutation options\n * @returns void\n */\nexport function useMutateItem<Type extends Record<string, unknown>>(\n opts: Omit<MutateItemOperation<Type>, 'input' | 'mutate'>,\n): (input: Partial<Type>, mutateFn: (current: Type) => Type) => Promise<void> {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Partial<Type>, mutateFn: (current: Type) => Type) =>\n await mutateItem(\n {\n input: flatten(input) as Partial<Type>,\n mutate: mutateFn,\n ...opts,\n },\n {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n getPostgrestFilter,\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n mutate: (key, fn) => {\n queryClient.setQueriesData({ queryKey: key }, fn);\n },\n decode,\n },\n );\n}\n","import {\n type RevalidateTablesOperation,\n revalidateTables,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\n\nimport { decode } from '../lib';\n\n/**\n * Returns a function that can be used to revalidate all queries in the cache that match the tables provided in the `RevalidateTablesOperation`\n * This hook does not make any HTTP requests and is intended to be used for custom cache revalidations.\n *\n * @param opts - The tables to revalidate\n *\n * @returns A function that will revalidate all defined tables when called.\n * **/\nexport function useRevalidateTables(\n tables: RevalidateTablesOperation,\n): () => Promise<void> {\n const queryClient = useQueryClient();\n\n return async () =>\n await revalidateTables(tables, {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n decode,\n });\n}\n","import {\n type UpsertItemOperation,\n upsertItem,\n} from '@supabase-cache-helpers/postgrest-core';\nimport { useQueryClient } from '@tanstack/react-query';\nimport { flatten } from 'flat';\n\nimport { decode, usePostgrestFilterCache } from '../lib';\n\n/**\n * Convenience hook to upsert an item into the react query cache. Does not make any http requests, and is supposed to be used for custom cache updates.\n * @param opts The mutation options\n * @returns void\n */\nexport function useUpsertItem<Type extends Record<string, unknown>>(\n opts: Omit<UpsertItemOperation<Type>, 'input'>,\n) {\n const queryClient = useQueryClient();\n const getPostgrestFilter = usePostgrestFilterCache();\n\n return async (input: Type) =>\n await upsertItem(\n {\n input: flatten(input) as Type,\n ...opts,\n },\n {\n cacheKeys: queryClient\n .getQueryCache()\n .getAll()\n .map((c) => c.queryKey),\n getPostgrestFilter,\n revalidate: (key) => queryClient.invalidateQueries({ queryKey: key }),\n mutate: (key, fn) => {\n queryClient.setQueriesData({ queryKey: key }, fn);\n },\n decode,\n },\n );\n}\n","import {\n buildDeleteFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useDeleteItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a DELETE mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the DELETE mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'DeleteOne', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useDeleteManyMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'DeleteMany', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const result = await buildDeleteFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(input);\n\n if (result) {\n for (const r of result) {\n deleteItem(r.normalizedData as T['Row']);\n }\n }\n\n if (!result || result.every((r) => !r.userQueryData)) return null;\n\n return result.map((r) => r.userQueryData as R);\n },\n ...opts,\n });\n}\n\nexport { useDeleteManyMutation };\n","import {\n buildDeleteFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useDeleteItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a DELETE mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the DELETE mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'DeleteOne', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useDeleteMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'DeleteOne', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const r = await buildDeleteFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n primaryKeys,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )([input]);\n\n if (!r) return null;\n\n const result = r[0];\n\n if (result) {\n await deleteItem(result.normalizedData as T['Row']);\n }\n return result?.userQueryData ?? null;\n },\n ...opts,\n });\n}\n\nexport { useDeleteMutation };\n","import {\n buildInsertFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport { getUserResponse } from './get-user-response';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a INSERT mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the INSERT mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'Insert', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useInsertMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'Insert', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const result = await buildInsertFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(input);\n\n if (result) {\n await Promise.all(\n result.map(\n async (d) => await upsertItem(d.normalizedData as T['Row']),\n ),\n );\n }\n return getUserResponse(result) ?? null;\n },\n ...opts,\n });\n}\n\nexport { useInsertMutation };\n","import type { MutationFetcherResponse } from '@supabase-cache-helpers/postgrest-core';\n\ntype Truthy<T> = T extends false | '' | 0 | null | undefined ? never : T; // from lodash\n\nexport function truthy<T>(value: T): value is Truthy<T> {\n return !!value;\n}\n\nexport const getUserResponse = <R>(\n d: MutationFetcherResponse<R>[] | null | undefined,\n) => {\n if (!d) return d;\n return d.map((r) => r.userQueryData).filter(truthy);\n};\n","import {\n buildUpdateFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a UPDATE mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the UPDATE mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'UpdateOne', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useUpdateMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Relationships = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<\n S,\n T['Row'],\n RelationName,\n Relationships,\n Q extends '*' ? '*' : Q,\n O\n >,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Relationships>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<\n 'UpdateOne',\n S,\n T,\n RelationName,\n Relationships,\n Q,\n R\n >,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input) => {\n const result = await buildUpdateFetcher<\n O,\n S,\n T,\n RelationName,\n Relationships,\n Q,\n R\n >(qb, primaryKeys, {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n })(input);\n if (result) {\n await upsertItem(result.normalizedData as T['Row']);\n }\n return result?.userQueryData ?? null;\n },\n ...opts,\n });\n}\n\nexport { useUpdateMutation };\n","import {\n buildUpsertFetcher,\n getTable,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestClientOptions,\n PostgrestQueryBuilder,\n} from '@supabase/postgrest-js';\nimport { UnstableGetResult as GetResult } from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport { useMutation } from '@tanstack/react-query';\n\nimport { useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\nimport { getUserResponse } from './get-user-response';\nimport type { UsePostgrestMutationOpts } from './types';\n\n/**\n * Hook to execute a UPSERT mutation\n *\n * @param {PostgrestQueryBuilder<S, T>} qb PostgrestQueryBuilder instance for the table\n * @param {Array<keyof T['Row']>} primaryKeys Array of primary keys of the table\n * @param {string | null} query Optional PostgREST query string for the UPSERT mutation\n * @param {Omit<UsePostgrestMutationOpts<S, T, 'Upsert', Q, R>, 'mutationFn'>} [opts] Options to configure the hook\n */\nfunction useUpsertMutation<\n O extends PostgrestClientOptions,\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<S, T['Row'], RelationName, Re, Q extends '*' ? '*' : Q, O>,\n>(\n qb: PostgrestQueryBuilder<O, S, T, RelationName, Re>,\n primaryKeys: (keyof T['Row'])[],\n query?: Q | null,\n opts?: Omit<\n UsePostgrestMutationOpts<'Upsert', S, T, RelationName, Re, Q, R>,\n 'mutationFn'\n >,\n) {\n const queriesForTable = useQueriesForTableLoader(getTable(qb));\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: getTable(qb),\n schema: qb.schema as string,\n });\n\n return useMutation({\n mutationFn: async (input: T['Insert'][]) => {\n const data = await buildUpsertFetcher<O, S, T, RelationName, Re, Q, R>(\n qb,\n {\n query: query ?? undefined,\n queriesForTable,\n disabled: opts?.disableAutoQuery,\n ...opts,\n },\n )(input);\n if (data) {\n await Promise.all(\n data.map(async (d) => await upsertItem(d.normalizedData as T['Row'])),\n );\n }\n return getUserResponse(data) ?? null;\n },\n ...opts,\n });\n}\n\nexport { useUpsertMutation };\n","import {\n type AnyPostgrestResponse,\n isPostgrestBuilder,\n isPostgrestTransformBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type { PostgrestError } from '@supabase/postgrest-js';\nimport type { UseQueryOptions as UseReactQueryOptions } from '@tanstack/react-query';\n\nimport { encode } from '../lib/key';\n\nexport function buildQueryOpts<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError> {\n return {\n queryKey: encode<Result>(query, false),\n queryFn: async ({ signal }) => {\n if (isPostgrestTransformBuilder(query)) {\n query = query.abortSignal(signal);\n }\n if (isPostgrestBuilder(query)) {\n query = query.throwOnError();\n }\n return await query;\n },\n ...config,\n };\n}\n","import type { AnyPostgrestResponse } from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport type { FetchQueryOptions, QueryClient } from '@tanstack/react-query';\n\nimport { buildQueryOpts } from './build-query-opts';\n\nfunction fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<PostgrestSingleResponse<Result>>;\nfunction fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<PostgrestMaybeSingleResponse<Result>>;\nfunction fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<PostgrestResponse<Result>>;\n\nasync function fetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<AnyPostgrestResponse<Result>> {\n return await queryClient.fetchQuery<\n AnyPostgrestResponse<Result>,\n PostgrestError\n >(buildQueryOpts(query, config));\n}\n\nexport { fetchQuery };\n","import {\n type AnyPostgrestResponse,\n isPostgrestBuilder,\n} from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport type { FetchQueryOptions, QueryClient } from '@tanstack/react-query';\n\nimport { encode } from '../lib';\nimport { buildQueryOpts } from './build-query-opts';\n\nfunction prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<void>;\nfunction prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<void>;\nfunction prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<PostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<PostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): Promise<void>;\n\nasync function prefetchQuery<Result>(\n queryClient: QueryClient,\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n FetchQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n) {\n await queryClient.prefetchQuery<AnyPostgrestResponse<Result>, PostgrestError>(\n buildQueryOpts(query, config),\n );\n}\n\nfunction fetchQueryInitialData<Result>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n): Promise<[string[], PostgrestSingleResponse<Result>]>;\n\nfunction fetchQueryInitialData<Result>(\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n): Promise<[string[], PostgrestMaybeSingleResponse<Result>]>;\n\nfunction fetchQueryInitialData<Result>(\n query: PromiseLike<PostgrestResponse<Result>>,\n): Promise<[string[], PostgrestResponse<Result>]>;\n\nasync function fetchQueryInitialData<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n): Promise<[string[], AnyPostgrestResponse<Result>]> {\n if (!isPostgrestBuilder<Result>(query)) {\n throw new Error('Query is not a PostgrestBuilder');\n }\n\n return [encode(query, false), await query.throwOnError()];\n}\n\nexport { prefetchQuery, fetchQueryInitialData };\n","import type { AnyPostgrestResponse } from '@supabase-cache-helpers/postgrest-core';\nimport type {\n PostgrestError,\n PostgrestMaybeSingleResponse,\n PostgrestResponse,\n PostgrestSingleResponse,\n} from '@supabase/postgrest-js';\nimport {\n type UseQueryOptions as UseReactQueryOptions,\n type UseQueryResult as UseReactQueryResult,\n useQuery as useReactQuery,\n} from '@tanstack/react-query';\n\nimport { buildQueryOpts } from './build-query-opts';\n\n/**\n * Applies Omit over a union, while preserving its union-ness.\n */\ntype DistributiveOmit<T, K extends keyof any> = T extends any\n ? Omit<T, K>\n : never;\n\n/**\n * Represents the return value of the `useQuery` hook when `query` is expected to return\n * a single row.\n */\nexport type UseQuerySingleReturn<Result> = DistributiveOmit<\n UseReactQueryResult<PostgrestSingleResponse<Result>['data'], PostgrestError>,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<PostgrestSingleResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<PostgrestSingleResponse<Result>, 'count'>;\n\n/**\n * Represents the return value of the `useQuery` hook when `query` is expected to return\n * either a single row or an empty response.\n */\nexport type UseQueryMaybeSingleReturn<Result> = DistributiveOmit<\n UseReactQueryResult<\n PostgrestMaybeSingleResponse<Result>['data'],\n PostgrestError\n >,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<PostgrestMaybeSingleResponse<Result>, 'count'>;\n\n/**\n * Represents the return value of the `useQuery` hook when `query` is expected to return\n * one or more rows.\n */\nexport type UseQueryReturn<Result> = DistributiveOmit<\n UseReactQueryResult<PostgrestResponse<Result>['data'], PostgrestError>,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<PostgrestResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<PostgrestResponse<Result>, 'count'>;\n\n/**\n * Represents the return value of the `useQuery` hook when the type of the query response\n * is not known.\n */\nexport type UseQueryAnyReturn<Result> = DistributiveOmit<\n UseReactQueryResult<AnyPostgrestResponse<Result>['data'], PostgrestError>,\n 'refetch'\n> &\n Pick<\n UseReactQueryResult<AnyPostgrestResponse<Result>, PostgrestError>,\n 'refetch'\n > &\n Pick<AnyPostgrestResponse<Result>, 'count'>;\n\n/**\n * React hook to execute a PostgREST query and return a single item response.\n *\n * @param {PromiseLike<PostgrestSingleResponse<Result>>} query A promise that resolves to a PostgREST single item response.\n * @param {Omit<UseReactQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQuerySingleReturn<Result>} The hook result containing the single item response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<PostgrestSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQuerySingleReturn<Result>;\n/**\n * React hook to execute a PostgREST query and return a maybe single item response.\n *\n * @param {PromiseLike<PostgrestMaybeSingleResponse<Result>>} query A promise that resolves to a PostgREST maybe single item response.\n * @param {Omit<UseReactQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQueryMaybeSingleReturn<Result>} The hook result containing the maybe single item response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestMaybeSingleResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<PostgrestMaybeSingleResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQueryMaybeSingleReturn<Result>;\n/**\n * React hook to execute a PostgREST query.\n *\n * @template Result The expected response data type.\n * @param {PromiseLike<PostgrestResponse<Result>>} query A promise that resolves to a PostgREST response.\n * @param {Omit<UseReactQueryOptions<PostgrestResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQueryReturn<Result>} The hook result containing the response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<PostgrestResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<PostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQueryReturn<Result>;\n\n/**\n * React hook to execute a PostgREST query.\n *\n * @template Result The expected response data type.\n * @param {PromiseLike<AnyPostgrestResponse<Result>>} query A promise that resolves to a PostgREST response of any kind.\n * @param {Omit<UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>, 'queryKey' | 'queryFn'>} [config] The React Query options.\n * @returns {UseQueryAnyReturn<Result>} The hook result containing the response data.\n */\nfunction useQuery<Result>(\n query: PromiseLike<AnyPostgrestResponse<Result>>,\n config?: Omit<\n UseReactQueryOptions<AnyPostgrestResponse<Result>, PostgrestError>,\n 'queryKey' | 'queryFn'\n >,\n): UseQueryAnyReturn<Result> {\n const result = useReactQuery<AnyPostgrestResponse<Result>, PostgrestError>(\n buildQueryOpts<Result>(query, config),\n );\n\n // isPending and isLoadingError are the only cases in which no data is present\n if (result.isPending || result.isLoadingError) {\n return {\n ...result,\n data: undefined,\n count: null,\n } as UseQueryAnyReturn<Result>;\n }\n\n return {\n ...result,\n data: result.data?.data,\n count: result.data?.count,\n } as UseQueryAnyReturn<Result>;\n}\n\nexport { useQuery };\n","import {\n type RevalidateOpts,\n buildNormalizedQuery,\n normalizeResponse,\n} from '@supabase-cache-helpers/postgrest-core';\nimport {\n UnstableGetResult as GetResult,\n PostgrestClientOptions,\n} from '@supabase/postgrest-js';\nimport {\n GenericSchema,\n GenericTable,\n} from '@supabase/postgrest-js/dist/cjs/types';\nimport {\n REALTIME_LISTEN_TYPES,\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimeChannel,\n type RealtimePostgresChangesFilter,\n type RealtimePostgresChangesPayload,\n type SupabaseClient,\n} from '@supabase/supabase-js';\nimport type { MutationOptions as ReactQueryMutatorOptions } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\n\nimport { useDeleteItem, useUpsertItem } from '../cache';\nimport { useQueriesForTableLoader } from '../lib';\n\n/**\n * Options for `useSubscriptionQuery` hook\n */\nexport type UseSubscriptionQueryOpts<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<\n S,\n T['Row'],\n RelationName,\n Re,\n Q extends '*' ? '*' : Q,\n PostgrestClientOptions\n >,\n> = RevalidateOpts<T['Row']> &\n ReactQueryMutatorOptions & {\n /**\n * A callback that will be called whenever a realtime event occurs for the given channel.\n * The callback will receive the event payload with an additional \"data\" property, which will be\n * the affected row of the event (or a modified version of it, if a select query is provided).\n */\n callback?: (\n event: RealtimePostgresChangesPayload<T['Row']> & { data: T['Row'] | R },\n ) => void | Promise<void>;\n };\n\n/**\n * A hook for subscribing to realtime Postgres events on a given channel.\n *\n * The subscription will automatically update the cache for the specified table in response\n * to incoming Postgres events, and optionally run a user-provided callback function with the\n * event and the updated data.\n *\n * This hook works by creating a Supabase Realtime channel for the specified table and\n * subscribing to Postgres changes on that channel. When an event is received, the hook\n * fetches the updated data from the database (using a `select` query generated from the cache\n * configuration), and then updates the cache accordingly.\n *\n * @param client - The Supabase client instance.\n * @param channelName - The name of the channel to subscribe to.\n * @param filter - The filter object to use when listening for changes.\n * @param primaryKeys - An array of the primary keys for the table being listened to.\n * @param query - An optional PostgREST query to use when selecting data for an event.\n * @param opts - Additional options to pass to the hook.\n * @returns An object containing the RealtimeChannel and the current status of the subscription.\n */\nfunction useSubscriptionQuery<\n S extends GenericSchema,\n T extends GenericTable,\n RelationName extends string,\n Re = T extends { Relationships: infer R } ? R : unknown,\n Q extends string = '*',\n R = GetResult<\n S,\n T['Row'],\n RelationName,\n Re,\n Q extends '*' ? '*' : Q,\n PostgrestClientOptions\n >,\n>(\n client: SupabaseClient | null,\n channelName: string,\n filter: Omit<\n RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n 'table'\n > & {\n table: RelationName;\n },\n primaryKeys: (keyof T['Row'])[],\n query?: Q extends '*' ? \"'*' is not allowed\" : Q | null,\n opts?: UseSubscriptionQueryOpts<S, T, RelationName, Re, Q, R>,\n) {\n const [status, setStatus] = useState<string>();\n const [channel, setChannel] = useState<RealtimeChannel>();\n const queriesForTable = useQueriesForTableLoader(filter.table);\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n\n useEffect(() => {\n if (!client) return;\n\n const c = client\n .channel(channelName)\n .on<T['Row']>(\n REALTIME_LISTEN_TYPES.POSTGRES_CHANGES,\n filter,\n async (payload) => {\n let data: T['Row'] | R = payload.new ?? payload.old;\n const selectQuery = buildNormalizedQuery({ queriesForTable, query });\n if (\n payload.eventType !==\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE &&\n selectQuery\n ) {\n const qb = client\n .from(payload.table)\n .select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(selectQuery.groupedPaths, res.data) as R;\n }\n }\n\n if (\n payload.eventType ===\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT ||\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n ) {\n await upsertItem(data as Record<string, unknown>);\n } else if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n if (opts?.callback) {\n opts.callback({\n ...payload,\n data,\n });\n }\n },\n )\n .subscribe((status: string) => setStatus(status));\n\n setChannel(c);\n\n return () => {\n if (c) c.unsubscribe();\n };\n }, []);\n\n return { channel, status };\n}\n\nexport { useSubscriptionQuery };\n","import type { RevalidateOpts } from '@supabase-cache-helpers/postgrest-core';\nimport type { GenericTable } from '@supabase/postgrest-js/dist/cjs/types';\nimport {\n REALTIME_LISTEN_TYPES,\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimePostgresChangesFilter,\n type RealtimePostgresChangesPayload,\n type SupabaseClient,\n} from '@supabase/supabase-js';\nimport type { MutationOptions as ReactQueryMutatorOptions } from '@tanstack/react-query';\nimport { useEffect, useState } from 'react';\n\nimport { useDeleteItem, useUpsertItem } from '../cache';\n\n/**\n * Options for the `useSubscription` hook.\n */\nexport type UseSubscriptionOpts<T extends GenericTable> = RevalidateOpts<\n T['Row']\n> &\n ReactQueryMutatorOptions & {\n callback?: (\n event: RealtimePostgresChangesPayload<T['Row']>,\n ) => void | Promise<void>;\n };\n\n/**\n * Hook that sets up a real-time subscription to a Postgres database table.\n *\n * @param channel - The real-time channel to subscribe to.\n * @param filter - A filter that specifies the table and conditions for the subscription.\n * @param primaryKeys - An array of primary key column names for the table.\n * @param opts - Options for the mutation function used to upsert or delete rows in the cache.\n *\n * @returns An object containing the current status of the subscription.\n */\nfunction useSubscription<T extends GenericTable>(\n client: SupabaseClient | null,\n channelName: string,\n filter: Omit<\n RealtimePostgresChangesFilter<`${REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.ALL}`>,\n 'table'\n > & {\n table: string;\n },\n primaryKeys: (keyof T['Row'])[],\n opts?: UseSubscriptionOpts<T>,\n) {\n const [status, setStatus] = useState<string>();\n const deleteItem = useDeleteItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n const upsertItem = useUpsertItem({\n ...opts,\n primaryKeys,\n table: filter.table,\n schema: filter.schema,\n });\n\n useEffect(() => {\n if (!client) return;\n\n const c = client\n .channel(channelName)\n .on<T['Row']>(\n REALTIME_LISTEN_TYPES.POSTGRES_CHANGES,\n filter,\n async (payload) => {\n if (\n payload.eventType ===\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.INSERT ||\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.UPDATE\n ) {\n await upsertItem(payload.new);\n } else if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n if (opts?.callback) {\n opts.callback({\n ...payload,\n });\n }\n },\n )\n .subscribe((status: string) => setStatus(status));\n\n return () => {\n if (c) c.unsubscribe();\n };\n }, []);\n\n return { status };\n}\n\nexport { useSubscription };\n","import {\n useDeleteItem,\n useQueriesForTableLoader,\n useUpsertItem,\n} from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useEffect, useState, useRef } from \"react\";\nimport useSupabase, { UserSessionId } from \"../useSupabase\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport {\n buildNormalizedQuery,\n normalizeResponse,\n} from \"@supabase-cache-helpers/postgrest-core\";\nimport {\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT,\n type RealtimePostgresChangesPayload,\n} from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\n\nexport default function useRealtime(\n key: string,\n query: string,\n table: string | { table: string; schema: string },\n primaryKeys: string[],\n options?: {\n filter?: string;\n enabled?: boolean;\n onChange?: (\n payload: RealtimePostgresChangesPayload<{\n [key: string]: any;\n }>,\n ) => any;\n },\n) {\n const supabase = useSupabase();\n\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n\n const deleteItem = useDeleteItem({\n primaryKeys: primaryKeys,\n table: tableNameValue,\n schema: schemaValue,\n });\n const upsertItem = useUpsertItem({\n primaryKeys: primaryKeys,\n table: tableNameValue,\n schema: schemaValue,\n });\n\n const [realtimeState, setRealtimeState] = useState<\n \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\"\n >(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n\n const channelRef = useRef<ReturnType<typeof supabase.channel> | null>(null);\n const lastRetryTimeRef = useRef<number>(0);\n const retryCountRef = useRef<number>(0);\n\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n\n // Debounce the key to prevent rapid subscription churn during fast navigation\n const debouncedKey = useDelayedValue(key, 50);\n\n useEffect(() => {\n if (!enabled) {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n setRealtimeState(\"CLOSED\");\n return;\n }\n\n // Prevent rapid retries - throttle to at least 2 seconds between attempts\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n const minRetryInterval = 2000;\n\n if (timeSinceLastRetry < minRetryInterval && retryTick > 0) {\n return;\n }\n\n // Clean up existing channel before creating a new one\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n\n lastRetryTimeRef.current = now;\n retryCountRef.current += 1;\n\n const channel = supabase\n .channel(newUuid())\n .on(\n \"postgres_changes\",\n {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter: filter,\n },\n async (payload) => {\n let data: any = payload.new ?? payload.old;\n\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query,\n });\n\n if (\n payload.eventType !==\n REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE &&\n selectQuery\n ) {\n if (\n selectQuery.groupedUserQueryPaths.every((x) =>\n x.path in data\n ) === false\n ) {\n const qb = supabase\n .schema(payload.schema as any)\n .from(payload.table as any)\n .select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(\n selectQuery.groupedPaths,\n res.data,\n );\n }\n }\n }\n\n if (\"changedBySessionId\" in data) {\n const sessionId = data[\"changedBySessionId\"];\n if (sessionId !== UserSessionId) {\n await upsertItem(data);\n }\n } else {\n await upsertItem(data);\n }\n }\n\n if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n\n if (onChange) {\n onChange(payload);\n }\n },\n )\n .on(\n \"postgres_changes\",\n {\n event: \"DELETE\",\n schema: schemaValue,\n table: tableNameValue,\n },\n async (payload) => {\n if (\n payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE\n ) {\n await deleteItem(payload.old);\n }\n },\n )\n .subscribe((status) => {\n setRealtimeState(status);\n\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n\n channelRef.current = channel;\n\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n }, [\n supabase,\n tableNameValue,\n schemaValue,\n enabled,\n filter,\n query,\n primaryKeys.join(\",\"),\n retryTick,\n debouncedKey,\n ]);\n\n useEffect(() => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n\n // Exponential backoff: start at 5 seconds, max 60 seconds\n const baseDelay = 5000;\n const maxDelay = 60000;\n const delay = Math.min(\n baseDelay * Math.pow(2, retryCountRef.current),\n maxDelay\n );\n\n const id = setTimeout(() => {\n setRetryTick((t) => t + 1);\n }, delay);\n\n return () => clearTimeout(id);\n }, [realtimeState, enabled]);\n\n return realtimeState;\n}\n","import {\n createContext,\n ReactNode,\n useContext,\n useEffect,\n useMemo,\n useState,\n} from \"react\";\nimport {\n createClient,\n SupabaseClient,\n SupabaseClientOptions,\n} from \"@supabase/supabase-js\";\nimport { getSupabaseUrl, getSupabaseKey } from \"./config\";\nimport { generateUUID } from \"../utils/uuid\";\n\n// This interface is augmented by consumers to provide their database types\n// Example: declare module '@pol-studios/db' { interface SupabaseDatabaseTypes { Database: MyDatabaseType } }\n// eslint-disable-next-line @typescript-eslint/no-empty-object-type\nexport interface SupabaseDatabaseTypes {}\n\nexport type Database = SupabaseDatabaseTypes extends { Database: infer D }\n ? D\n : any;\n\nexport type TypedSupabaseClient = SupabaseClient<Database>;\n\nfunction newUuid(): string {\n return generateUUID();\n}\n\nfunction isUsable<T>(value: T | null | undefined): value is T {\n return value !== null && value !== undefined;\n}\n\nfunction delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport const UserSessionId = newUuid();\nlet defaultOptions: any = {\n auth: {\n autoRefreshToken: true,\n persistSession: true,\n detectSessionInUrl: true,\n },\n global: {\n headers: { \"x-session-id\": UserSessionId },\n },\n realtime: {},\n};\n\nexport function createNewSupabaseClient<\n SchemaName extends string & keyof Database = \"public\" extends keyof Database\n ? \"public\"\n : string & keyof Database,\n>(options?: SupabaseClientOptions<SchemaName>) {\n const client = createClient<Database, SchemaName>(\n getSupabaseUrl()!,\n getSupabaseKey()!,\n {\n ...defaultOptions,\n ...options,\n }\n );\n\n onSupabaseInitializedAction && onSupabaseInitializedAction(client as any);\n\n return client;\n}\n\nlet onSupabaseInitializedAction:\n | ((supabase: SupabaseClient) => any)\n | undefined = undefined;\n\nexport function onSupabaseInitialized(\n afterInitialize: (supabase: SupabaseClient) => any\n) {\n onSupabaseInitializedAction = afterInitialize;\n}\n\nexport function setDefaultOptions(\n options: SupabaseClientOptions<string & keyof Database>\n) {\n defaultOptions = options;\n}\n\nexport let typedSupabase: SupabaseClient<Database> = null!;\n\nconst context = createContext({\n supabaseClient: typedSupabase as SupabaseClient<Database> | null,\n});\n\nexport default function useSupabase() {\n const supabaseContext = useContext(context);\n if (isUsable(supabaseContext?.supabaseClient) === false) {\n throw new Error(\"Hook not inside a supabase context provider.\");\n }\n\n return supabaseContext.supabaseClient!;\n}\n\nexport function SupabaseProvider({\n children,\n options,\n afterInitialize,\n supabaseClient: supabaseClientProp,\n}: {\n children: ReactNode;\n options?: SupabaseClientOptions<string & keyof Database>;\n afterInitialize?: (supabase: SupabaseClient<Database>) => any;\n supabaseClient?: SupabaseClient<Database>;\n}) {\n const [supabaseClient, setSupabaseClient] = useState(\n () =>\n supabaseClientProp ??\n (createNewSupabaseClient({\n ...defaultOptions,\n ...(options ? options : {}),\n }) as unknown as SupabaseClient<Database>)\n );\n\n const [wasHidden, setWasHidden] = useState<boolean>(false);\n const [connected, setConnected] = useState<boolean>(true);\n\n useEffect(() => {\n afterInitialize && afterInitialize(supabaseClient);\n }, [supabaseClient]);\n\n useEffect(() => {\n const checkVisibility = async () => {\n if (typeof window.document === \"undefined\") return;\n if (document?.hidden) {\n await delay(60 * 1000).then((x) => {\n if (document.hidden) {\n setWasHidden(true);\n }\n });\n } else if (wasHidden) {\n setWasHidden(false);\n try {\n setConnected(true);\n } catch (error) {\n console.error(\"Reconnection failed:\", error);\n setConnected(false);\n }\n }\n };\n\n const intervalId = setInterval(checkVisibility, 1000);\n\n return () => {\n clearInterval(intervalId);\n };\n }, [wasHidden]);\n\n return (\n <context.Provider\n value={useMemo(() => ({ supabaseClient }), [supabaseClient])}\n >\n {children}\n </context.Provider>\n );\n}\n","let supabaseUrl = process.env.SUPABASE_URL;\nlet supabaseKey = process.env.SUPABASE_ANON_KEY ?? \"\";\n\nexport function setSupabaseUrl(url: string) {\n supabaseUrl = url;\n}\n\nexport function getSupabaseUrl() {\n return supabaseUrl;\n}\n\nexport function setSupabaseKey(key: string) {\n supabaseKey = key;\n}\n\nexport function getSupabaseKey() {\n return supabaseKey;\n}\n","/**\n * Generate a UUID that works across all environments\n * (Browser, React Native, Node.js)\n */\nexport function generateUUID(): string {\n // Try Web Crypto API first (browsers, modern Node.js)\n if (typeof crypto !== 'undefined' && typeof crypto.randomUUID === 'function') {\n return crypto.randomUUID();\n }\n\n // Fallback for React Native and older environments\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {\n const r = (Math.random() * 16) | 0;\n const v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","var __defProp = Object.defineProperty;\nvar __export = (target, all) => {\n for (var name in all)\n __defProp(target, name, { get: all[name], enumerable: true });\n};\n\n// src/string/index.ts\nvar string_exports = {};\n__export(string_exports, {\n camelize: () => camelize,\n generateSlug: () => generateSlug,\n isBlank: () => isBlank,\n isNullOrWhitespace: () => isNullOrWhitespace,\n pascalize: () => pascalize,\n pascalizeWithSpaces: () => pascalizeWithSpaces,\n sanitizeInput: () => sanitizeInput,\n slugify: () => slugify\n});\n\n// src/string/camelize.ts\nfunction camelize(str) {\n return str.replace(/(?:^\\w|[A-Z]|\\b\\w)/g, function(word, index) {\n return index === 0 ? word.toLowerCase() : word.toUpperCase();\n }).replace(/\\s+/g, \"\");\n}\n\n// src/internal/isUsable.ts\nfunction isUsable(value) {\n return value !== void 0 && value !== null && (typeof value !== \"number\" || isNaN(value) === false);\n}\n\n// src/string/pascalize.ts\nfunction pascalize(str) {\n return str.replace(/(\\w)(\\w*)/g, function(g0, g1, g2) {\n return g1.toUpperCase() + g2.toLowerCase();\n });\n}\nfunction pascalizeWithSpaces(input) {\n if (isUsable(input) === false) return input;\n return input.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").split(/[^A-Za-z0-9]+/).filter(Boolean).map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()).join(\" \");\n}\n\n// src/string/slugify.ts\nfunction slugify(text) {\n return text.toLowerCase().trim().replace(/[^\\w\\s-]/g, \"\").replace(/[\\s_-]+/g, \"-\").replace(/^-+|-+$/g, \"\");\n}\nvar generateSlug = slugify;\n\n// src/string/sanitize.ts\nfunction sanitizeInput(value) {\n return value.replace(/\"/g, '\"\"').replace(/'/g, \"''\");\n}\n\n// src/string/isBlank.ts\nfunction isBlank(value) {\n if (value === null || value === void 0) {\n return true;\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return true;\n }\n return false;\n}\nvar isNullOrWhitespace = isBlank;\n\n// src/array/index.ts\nvar array_exports = {};\n__export(array_exports, {\n chunk: () => chunk,\n chunkArray: () => chunkArray,\n convertArrayToObject: () => convertArrayToObject,\n getAverage: () => getAverage,\n groupBy: () => groupBy,\n groupByMultipleCriteria: () => groupByMultipleCriteria,\n mapUnique: () => mapUnique,\n mapUnqiue: () => mapUnqiue,\n range: () => range,\n selectByMin: () => selectByMin,\n sort: () => sort,\n sortBy: () => sortBy,\n tryGetAverage: () => tryGetAverage,\n tryGetSum: () => tryGetSum,\n unique: () => unique\n});\n\n// src/array/sortBy.ts\nfunction sortBy(items, property, isAscending = false) {\n if (items === null || items === void 0) return [];\n return [...items]?.sort((a, b) => {\n const aProp = a[property];\n const bProp = b[property];\n if (isAscending) {\n return aProp === bProp ? 0 : aProp < bProp ? 1 : -1;\n }\n return aProp === bProp ? 0 : aProp < bProp ? -1 : 1;\n });\n}\nfunction sort(items, func, isAscending = false) {\n const startingValue = isAscending ? 1 : -1;\n const endingValue = isAscending ? -1 : 1;\n return [...items].sort(\n (a, b) => func(a) === func(b) ? 0 : func(a) < func(b) ? startingValue : endingValue\n );\n}\nfunction selectByMin(items, action) {\n return items.reduce((min, current) => {\n return action(current) < action(min) ? current : min;\n });\n}\n\n// src/array/groupBy.ts\nfunction groupBy(list, key) {\n const map = /* @__PURE__ */ new Map();\n if (isUsable(list) === false) return map;\n list.forEach((item) => {\n const keyValue = typeof key === \"function\" ? key(item) : item[key];\n const collection = map.get(keyValue);\n if (!collection) {\n map.set(keyValue, [item]);\n } else {\n collection.push(item);\n }\n });\n return map;\n}\nfunction groupByMultipleCriteria(items, criteria) {\n if (isUsable(items) === false) return [];\n const grouped = {};\n items.forEach((item) => {\n const key = criteria.map((criterion) => item[criterion]).join(\"|\");\n if (!grouped[key]) {\n grouped[key] = [];\n }\n grouped[key].push(item);\n });\n const results = Object.values(grouped).map((group) => ({\n items: Array.isArray(group) ? group : []\n }));\n return results;\n}\n\n// src/array/chunk.ts\nfunction chunk(array, chunkSize) {\n if (chunkSize <= 0) throw new Error(\"chunkSize must be greater than 0\");\n const chunks = [];\n for (let i = 0; i < array.length; i += chunkSize) {\n chunks.push(array.slice(i, i + chunkSize));\n }\n return chunks;\n}\nvar chunkArray = chunk;\n\n// src/array/unique.ts\nfunction unique(array, key) {\n if (isUsable(array) === false) return [];\n return Array.from(new Set(array.map((x) => x[key])));\n}\nvar mapUnique = unique;\nvar mapUnqiue = unique;\n\n// src/array/range.ts\nfunction range(size, startAt = 0) {\n return [...Array(size).keys()].map((i, index) => index + startAt);\n}\n\n// src/array/sum.ts\nfunction tryGetSum(itemsArray, defaultValue = 0) {\n if (isUsable(itemsArray) === false) return defaultValue;\n if (itemsArray.length === 0) return defaultValue;\n const results = itemsArray.reduce((a, b) => a + b, defaultValue);\n if (Number.isNaN(results)) {\n return defaultValue;\n }\n return results;\n}\n\n// src/array/average.ts\nfunction tryGetAverage(items, defaultValue = 0) {\n if (isUsable(items) === false) return defaultValue;\n if (items.length === 0) return defaultValue;\n const sum = tryGetSum(items, defaultValue);\n const response = sum / items.length;\n return response;\n}\nfunction getAverage(arr) {\n const sum = arr.reduce((acc, curr) => acc + curr, 0);\n return sum / arr.length;\n}\n\n// src/array/convertToObject.ts\nfunction convertArrayToObject(array, key) {\n return array?.reduce(\n (obj, item) => {\n obj[item[key]] = item;\n return obj;\n },\n {}\n );\n}\n\n// src/object/index.ts\nvar object_exports = {};\n__export(object_exports, {\n deepEquals: () => deepEquals,\n diff: () => diff,\n getPath: () => getPath,\n getValueByPath: () => getValueByPath,\n includeOnly: () => includeOnly,\n isDeepEqual: () => isDeepEqual,\n omit: () => omit,\n pick: () => pick,\n setPath: () => setPath,\n setValueByPath: () => setValueByPath\n});\n\n// src/object/omit.ts\nfunction omit(obj, keys) {\n const keysArray = Array.isArray(keys) ? keys : [keys];\n const newObj = { ...obj };\n keysArray.forEach((key) => {\n if (key in newObj) {\n delete newObj[key];\n }\n });\n return newObj;\n}\n\n// src/object/pick.ts\nfunction pick(obj, keys) {\n const newValue = {};\n keys.forEach((key) => {\n if (key in obj) {\n newValue[key] = obj[key];\n }\n });\n return newValue;\n}\nvar includeOnly = pick;\n\n// src/object/diff.ts\nfunction diff(oldValue, newValue) {\n if (isUsable(oldValue) === false) {\n return { ...newValue };\n }\n const result = {};\n function compare(o1, o2, res) {\n for (const key in o1) {\n if (o1.hasOwnProperty(key)) {\n if (typeof o1[key] === \"object\" && o1[key] !== null && typeof o2[key] === \"object\" && o2[key] !== null) {\n const nestedDiff = diff(o1[key], o2[key]);\n if (Object.keys(nestedDiff).length > 0) {\n res[key] = nestedDiff;\n }\n } else if (o1[key] !== o2[key]) {\n res[key] = o2[key];\n }\n }\n }\n for (const key in o2) {\n if (o2.hasOwnProperty(key) && !o1.hasOwnProperty(key)) {\n res[key] = o2[key];\n }\n }\n }\n compare(oldValue, newValue, result);\n return result;\n}\n\n// src/object/getPath.ts\nfunction getPath(obj, path) {\n const keys = path.split(\".\");\n let current = obj;\n for (const key of keys) {\n if (current[key] === void 0) {\n return void 0;\n }\n current = current[key];\n }\n return current;\n}\nvar getValueByPath = getPath;\n\n// src/object/setPath.ts\nfunction setPath(obj, path, value) {\n const keys = path.split(\".\");\n let current = obj;\n for (let i = 0; i < keys.length - 1; i++) {\n const key = keys[i];\n if (current[key] === void 0) {\n current[key] = {};\n }\n current = current[key];\n }\n const lastKey = keys[keys.length - 1];\n current[lastKey] = value;\n}\nvar setValueByPath = setPath;\n\n// src/object/deepEqual.ts\nfunction deepEquals(obj1, obj2) {\n const keys1 = Object.keys(obj1);\n const keys2 = Object.keys(obj2);\n if (keys1.length !== keys2.length) {\n return false;\n }\n for (const key of keys1) {\n if (obj1[key] !== obj2[key]) {\n return false;\n }\n }\n return true;\n}\nvar isDeepEqual = deepEquals;\n\n// src/date/index.ts\nvar date_exports = {};\n__export(date_exports, {\n addDates: () => addDates,\n addDays: () => addDays,\n areDatesEqual: () => areDatesEqual,\n dateReviver: () => dateReviver,\n getUtcDate: () => getUtcDate,\n getUtcMoment: () => getUtcMoment,\n isValidDate: () => isValidDate,\n parseWithDate: () => parseWithDate,\n toUtcDate: () => toUtcDate\n});\n\n// src/date/utc.ts\nimport moment from \"moment\";\nfunction getUtcDate() {\n const now = /* @__PURE__ */ new Date();\n return new Date(\n Date.UTC(\n now.getUTCFullYear(),\n now.getUTCMonth(),\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds()\n )\n );\n}\nfunction toUtcDate(date) {\n if (isUsable(date) === false) return null;\n return new Date(\n Date.UTC(\n date.getUTCFullYear(),\n date.getUTCMonth(),\n date.getUTCDate(),\n date.getUTCHours(),\n date.getUTCMinutes(),\n date.getUTCSeconds()\n )\n );\n}\nfunction getUtcMoment() {\n return moment.utc(moment.now());\n}\n\n// src/date/compare.ts\nfunction areDatesEqual(date1, date2) {\n return date1 === date2;\n}\n\n// src/date/parse.ts\nimport moment2 from \"moment\";\nfunction dateReviver(key, value) {\n if (typeof value !== \"string\") return value;\n const isUtcOrLocalDate = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z)?$/.test(value);\n if (isUtcOrLocalDate) {\n return moment2.utc(value);\n } else {\n const isTimeZoneDate = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?[+-]\\d{2}:\\d{2}$/.test(\n value\n );\n if (isTimeZoneDate) {\n return moment2(value);\n }\n }\n return value;\n}\nfunction parseWithDate(key, value) {\n if (typeof value !== \"string\") return value;\n const isUtcOrLocalDate = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?(Z)?$/.test(value);\n if (isUtcOrLocalDate) {\n return new Date(value);\n } else {\n const isTimeZoneDate = /^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{1,7})?[+-]\\d{2}:\\d{2}$/.test(\n value\n );\n if (isTimeZoneDate) {\n return new Date(value);\n }\n }\n return value;\n}\nfunction isValidDate(date) {\n if (isUsable(date) === false) return false;\n return date.getTime() === date.getTime();\n}\n\n// src/date/add.ts\nimport moment3 from \"moment\";\nfunction addDates(date1, date2) {\n const duration = moment3.duration(date2.diff(date1));\n return date1.add(duration);\n}\nfunction addDays(date1, days) {\n const newDate = date1.add(days, \"days\");\n return newDate;\n}\n\n// src/async/index.ts\nvar async_exports = {};\n__export(async_exports, {\n Semaphore: () => Semaphore,\n concurrent: () => concurrent,\n debounce: () => debounce,\n delay: () => delay,\n promiseAllWithConcurrencyLimit: () => promiseAllWithConcurrencyLimit\n});\n\n// src/async/delay.ts\nfunction delay(ms) {\n return new Promise((resolve) => {\n setTimeout(resolve, ms);\n });\n}\n\n// src/async/debounce.ts\nvar timeoutId = null;\nfunction debounce(func, wait) {\n if (timeoutId !== null) {\n clearTimeout(timeoutId);\n }\n timeoutId = setTimeout(() => {\n func();\n }, wait);\n}\n\n// src/async/concurrent.ts\nasync function concurrent(tasks, concurrency) {\n const results = [];\n let current = 0;\n async function worker() {\n while (current < tasks.length) {\n const index = current++;\n results[index] = await tasks[index]();\n }\n }\n const workers = [];\n for (let i = 0; i < concurrency; i++) {\n workers.push(worker());\n }\n await Promise.all(workers);\n return results;\n}\nvar promiseAllWithConcurrencyLimit = concurrent;\n\n// src/async/semaphore.ts\nvar Semaphore = class {\n constructor(count) {\n this.tasks = [];\n this.count = count;\n }\n acquire() {\n if (this.count > 0) {\n this.count--;\n return Promise.resolve();\n } else {\n return new Promise((resolve) => this.tasks.push(resolve));\n }\n }\n release() {\n if (this.tasks.length > 0) {\n const resolve = this.tasks.shift();\n if (resolve) resolve();\n } else {\n this.count++;\n }\n }\n};\n\n// src/format/index.ts\nvar format_exports = {};\n__export(format_exports, {\n formatCurrency: () => formatCurrency,\n toDecimalString: () => toDecimalString,\n toNumberString: () => toNumberString,\n toUsdString: () => toUsdString\n});\n\n// src/format/currency.ts\nfunction formatCurrency(value) {\n if (isUsable(value) === false) return \"\";\n const formatter = new Intl.NumberFormat(\"en-US\", {\n style: \"currency\",\n currency: \"USD\"\n });\n return formatter.format(value);\n}\nvar toUsdString = formatCurrency;\nfunction toNumberString(value) {\n const formatter = new Intl.NumberFormat(\"en-US\", {\n maximumFractionDigits: 2\n });\n return formatter.format(value);\n}\n\n// src/format/decimal.ts\nfunction toDecimalString(num, decimalPlaces) {\n if (isUsable(num) === false) return \"\";\n return num.toLocaleString(\"en-US\", {\n minimumFractionDigits: decimalPlaces,\n maximumFractionDigits: decimalPlaces\n });\n}\n\n// src/tailwind/index.ts\nvar tailwind_exports = {};\n__export(tailwind_exports, {\n cn: () => cn\n});\nimport { clsx } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\nfunction cn(...inputs) {\n return twMerge(clsx(inputs));\n}\n\n// src/cache/index.ts\nvar cache_exports = {};\n__export(cache_exports, {\n cacheFunction: () => cacheFunction,\n clearAllCache: () => clearAllCache,\n clearCache: () => clearCache\n});\nvar cacheStore = /* @__PURE__ */ new Map();\nasync function cacheFunction(key, fn, duration) {\n const now = Date.now();\n const cached = cacheStore.get(key);\n if (cached) {\n if (now < cached.expiresAt) {\n return cached.data;\n }\n if (cached.promise) {\n return cached.promise;\n }\n }\n const promise = fn().then((result) => {\n cacheStore.set(key, {\n data: result,\n expiresAt: Date.now() + duration\n });\n return result;\n }).catch((error) => {\n cacheStore.delete(key);\n throw error;\n });\n cacheStore.set(key, {\n data: cached?.data,\n // Retain existing data until new data is fetched\n expiresAt: cached?.expiresAt || now,\n promise\n });\n return promise;\n}\nfunction clearCache(key) {\n cacheStore.delete(key);\n}\nfunction clearAllCache() {\n cacheStore.clear();\n}\n\n// src/types/index.ts\nvar types_exports = {};\n__export(types_exports, {\n getContentType: () => getContentType,\n isImageType: () => isImageType,\n isPdfType: () => isPdfType,\n isRenderableType: () => isRenderableType,\n isUsable: () => isUsable2,\n isVideoType: () => isVideoType\n});\n\n// src/types/guards.ts\nfunction isUsable2(value) {\n return value !== void 0 && value !== null && (typeof value !== \"number\" || isNaN(value) === false);\n}\n\n// src/types/StorageObjectMetadata.ts\nfunction getContentType(metadata, path) {\n if (metadata?.contentType) {\n return metadata.contentType;\n }\n const ext = path.split(\".\").pop()?.toUpperCase();\n return ext || \"Unknown\";\n}\nfunction isImageType(contentType) {\n return [\"JPEG\", \"JPG\", \"PNG\", \"GIF\", \"WEBP\", \"SVG\", \"HEIC\", \"HEIF\"].includes(\n contentType.toUpperCase()\n );\n}\nfunction isVideoType(contentType) {\n return [\"MP4\", \"QUICKTIME\", \"MOV\", \"WEBM\", \"AVI\", \"MKV\"].includes(\n contentType.toUpperCase()\n );\n}\nfunction isPdfType(contentType) {\n return contentType.toUpperCase() === \"PDF\";\n}\nfunction isRenderableType(contentType) {\n return isImageType(contentType) || isVideoType(contentType) || isPdfType(contentType);\n}\n\n// src/color/index.ts\nvar color_exports = {};\n__export(color_exports, {\n isDarkColor: () => isDarkColor\n});\nfunction isDarkColor(c) {\n c = c.substring(1);\n const rgb = parseInt(c, 16);\n const r = rgb >> 16 & 255;\n const g = rgb >> 8 & 255;\n const b = rgb >> 0 & 255;\n const luma = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n if (luma < 70) {\n return true;\n }\n return false;\n}\n\n// src/validation/index.ts\nvar validation_exports = {};\n__export(validation_exports, {\n calculatePasswordStrength: () => calculatePasswordStrength,\n validateEmail: () => validateEmail,\n validateMaxLength: () => validateMaxLength,\n validateMinLength: () => validateMinLength,\n validatePattern: () => validatePattern,\n validateRequired: () => validateRequired,\n validateValue: () => validateValue\n});\n\n// src/validation/validators.ts\nfunction validateValue(value, rules) {\n for (const rule of rules) {\n if (!rule.validate(value)) {\n return { isValid: false, error: rule.message };\n }\n }\n return { isValid: true };\n}\nfunction validateEmail(email) {\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!email || email.trim().length === 0) {\n return { isValid: false, error: \"Email is required\" };\n }\n if (!emailRegex.test(email)) {\n return { isValid: false, error: \"Please enter a valid email address\" };\n }\n return { isValid: true };\n}\nfunction validateRequired(value) {\n if (value === null || value === void 0 || value === \"\") {\n return { isValid: false, error: \"This field is required\" };\n }\n if (typeof value === \"string\" && value.trim().length === 0) {\n return { isValid: false, error: \"This field is required\" };\n }\n return { isValid: true };\n}\nfunction validateMinLength(min) {\n return (value) => {\n if (!value || value.length < min) {\n return {\n isValid: false,\n error: `Must be at least ${min} characters`\n };\n }\n return { isValid: true };\n };\n}\nfunction validateMaxLength(max) {\n return (value) => {\n if (value && value.length > max) {\n return {\n isValid: false,\n error: `Must be no more than ${max} characters`\n };\n }\n return { isValid: true };\n };\n}\nfunction validatePattern(pattern, message) {\n return (value) => {\n if (value && !pattern.test(value)) {\n return { isValid: false, error: message };\n }\n return { isValid: true };\n };\n}\n\n// src/validation/password.ts\nfunction calculatePasswordStrength(password) {\n if (!password || password.length === 0) {\n return {\n strength: \"weak\",\n score: 0,\n feedback: []\n };\n }\n let score = 0;\n const feedback = [];\n if (password.length >= 8) {\n score += 1;\n } else {\n feedback.push(\"Use at least 8 characters\");\n }\n if (password.length >= 12) {\n score += 1;\n }\n if (/[a-z]/.test(password)) {\n score += 1;\n } else {\n feedback.push(\"Add lowercase letters\");\n }\n if (/[A-Z]/.test(password)) {\n score += 1;\n } else {\n feedback.push(\"Add uppercase letters\");\n }\n if (/[0-9]/.test(password)) {\n score += 1;\n } else {\n feedback.push(\"Add numbers\");\n }\n if (/[^a-zA-Z0-9]/.test(password)) {\n score += 1;\n } else {\n feedback.push(\"Add special characters\");\n }\n let strength;\n if (score <= 2) {\n strength = \"weak\";\n } else if (score <= 3) {\n strength = \"fair\";\n } else if (score <= 4) {\n strength = \"good\";\n } else {\n strength = \"strong\";\n }\n return {\n strength,\n score,\n feedback: feedback.length > 0 ? feedback : []\n };\n}\n\n// src/error/index.ts\nvar error_exports = {};\n__export(error_exports, {\n extractFieldName: () => extractFieldName,\n getFormFieldError: () => getFormFieldError,\n getUserFriendlyError: () => getUserFriendlyError,\n isNetworkError: () => isNetworkError,\n isPostgrestError: () => isPostgrestError\n});\n\n// src/error/mapper.ts\nvar errorMappings = [\n // Unique constraint violation\n {\n code: \"23505\",\n message: \"This item already exists\",\n action: \"Please use a different name or value\"\n },\n // Foreign key violation\n {\n code: \"23503\",\n message: \"Cannot delete: this item is in use\",\n action: \"Remove all references to this item before deleting\"\n },\n // Check constraint violation\n {\n code: \"23514\",\n message: \"Invalid value provided\",\n action: \"Please check your input and try again\"\n },\n // Undefined table\n {\n code: \"42P01\",\n message: \"Service temporarily unavailable\",\n action: \"Please try again in a moment\"\n },\n // Insufficient privilege\n {\n code: \"42501\",\n message: \"You don't have permission to perform this action\",\n action: \"Contact your administrator if you need access\"\n },\n // Not found (PostgREST)\n {\n code: \"PGRST116\",\n message: \"Item not found\",\n action: \"The item may have been deleted or moved\"\n },\n // Network errors\n {\n pattern: /network|connection|fetch|timeout|offline/i,\n message: \"Connection problem\",\n action: \"Please check your internet connection and try again\"\n },\n // Authentication errors\n {\n pattern: /unauthorized|authentication|token|session/i,\n message: \"Your session has expired\",\n action: \"Please sign in again\"\n },\n // Validation errors\n {\n pattern: /validation|invalid|required|missing/i,\n message: \"Please check your input\",\n action: \"Make sure all required fields are filled correctly\"\n },\n // Generic fallback\n {\n message: \"Something went wrong\",\n action: \"Please try again\"\n }\n];\nfunction extractErrorCode(error) {\n if (error?.code) return error.code;\n if (error?.error?.code) return error.error.code;\n return void 0;\n}\nfunction extractErrorMessage(error) {\n if (error?.message) return error.message;\n if (error?.error?.message) return error.error.message;\n if (typeof error === \"string\") return error;\n return \"An unknown error occurred\";\n}\nfunction getUserFriendlyError(error) {\n const errorCode = extractErrorCode(error);\n const errorMessage = extractErrorMessage(error);\n if (errorCode) {\n const codeMatch = errorMappings.find((mapping) => mapping.code === errorCode);\n if (codeMatch) {\n return {\n message: codeMatch.message,\n action: codeMatch.action\n };\n }\n }\n const patternMatch = errorMappings.find(\n (mapping) => mapping.pattern && mapping.pattern.test(errorMessage)\n );\n if (patternMatch) {\n return {\n message: patternMatch.message,\n action: patternMatch.action\n };\n }\n const fallback = errorMappings[errorMappings.length - 1];\n return {\n message: fallback.message,\n action: fallback.action\n };\n}\nfunction isPostgrestError(error) {\n return error && typeof error === \"object\" && \"code\" in error && \"message\" in error && typeof error.code === \"string\";\n}\nfunction isNetworkError(error) {\n const message = extractErrorMessage(error).toLowerCase();\n return /network|connection|fetch|timeout|offline|failed to fetch/i.test(message);\n}\n\n// src/error/form.ts\nvar validationMappings = [\n {\n pattern: /required|missing|empty/i,\n message: \"This field is required\",\n action: \"Please fill in this field\"\n },\n {\n pattern: /min.*length|too short/i,\n message: \"This field is too short\",\n action: \"Please enter more characters\"\n },\n {\n pattern: /max.*length|too long/i,\n message: \"This field is too long\",\n action: \"Please enter fewer characters\"\n },\n {\n pattern: /email|invalid.*email/i,\n message: \"Please enter a valid email address\",\n action: \"Example: name@example.com\"\n },\n {\n pattern: /password|weak/i,\n message: \"Password is too weak\",\n action: \"Use at least 8 characters with numbers and letters\"\n },\n {\n pattern: /match|doesn't match/i,\n message: \"Values don't match\",\n action: \"Please check that both fields match\"\n },\n {\n pattern: /number|numeric/i,\n message: \"Please enter a valid number\",\n action: \"Only numbers are allowed\"\n },\n {\n pattern: /date|invalid.*date/i,\n message: \"Please enter a valid date\",\n action: \"Use format: MM/DD/YYYY\"\n },\n {\n pattern: /url|invalid.*url/i,\n message: \"Please enter a valid URL\",\n action: \"Example: https://example.com\"\n },\n {\n pattern: /phone|invalid.*phone/i,\n message: \"Please enter a valid phone number\",\n action: \"Example: (555) 123-4567\"\n },\n {\n message: \"Invalid value\",\n action: \"Please check your input\"\n }\n];\nfunction getFormFieldError(error) {\n if (!error) return null;\n const errorMessage = typeof error === \"string\" ? error : error.message || \"\";\n if (!errorMessage) return null;\n const patternMatch = validationMappings.find(\n (mapping) => mapping.pattern && mapping.pattern.test(errorMessage)\n );\n if (patternMatch) {\n return {\n message: patternMatch.message,\n action: patternMatch.action\n };\n }\n const fallback = validationMappings[validationMappings.length - 1];\n return {\n message: fallback.message,\n action: fallback.action\n };\n}\nfunction extractFieldName(errorMessage) {\n const fieldMatch = errorMessage.match(/(?:field|property|column)\\s+['\"]?(\\w+)['\"]?/i);\n if (fieldMatch && fieldMatch[1]) {\n return fieldMatch[1];\n }\n return null;\n}\n\n// src/device/index.ts\nvar device_exports = {};\n__export(device_exports, {\n hasCameraAsync: () => hasCameraAsync,\n isIphone: () => isIphone,\n isPwaLaunched: () => isPwaLaunched,\n isSmallDevice: () => isSmallDevice\n});\nfunction isSmallDevice() {\n return window.innerWidth <= 640;\n}\nfunction isIphone() {\n return /iPhone/.test(navigator.userAgent);\n}\nfunction isPwaLaunched() {\n if (window.navigator.standalone) {\n return true;\n }\n if (window.matchMedia(\"(display-mode: standalone)\").matches) {\n return true;\n }\n return false;\n}\nasync function hasCameraAsync() {\n try {\n const devices = await navigator.mediaDevices?.enumerateDevices();\n return devices?.some((device) => device.kind === \"videoinput\") ?? false;\n } catch (error) {\n console.error(\"Error checking for camera:\", error);\n return false;\n }\n}\n\n// src/uuid/index.ts\nvar uuid_exports = {};\n__export(uuid_exports, {\n newUuid: () => newUuid\n});\nfunction newUuid() {\n return \"xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\".replace(/[x]/g, () => {\n const r = Math.random() * 16 | 0;\n return r.toString(16);\n });\n}\n\n// src/state/index.ts\nvar state_exports = {};\n__export(state_exports, {\n getObjectChanges: () => getObjectChanges,\n withUpdate: () => withUpdate\n});\nfunction withUpdate(item, updates) {\n return { ...item, ...updates };\n}\nfunction getObjectChanges(oldObj, newObj) {\n const changes = {};\n for (const key of Object.keys(newObj)) {\n if (newObj[key] !== oldObj[key]) {\n changes[key] = newObj[key];\n }\n }\n return changes;\n}\n\n// src/enum/index.ts\nvar enum_exports = {};\n__export(enum_exports, {\n getEnumValues: () => getEnumValues,\n parseStringToEnum: () => parseStringToEnum\n});\nfunction getEnumValues(enumObject) {\n const values = Object.values(enumObject);\n return values.filter((value) => typeof value !== \"number\");\n}\nfunction parseStringToEnum(enumType, value) {\n if (value in enumType) {\n return enumType[value];\n }\n const numericValue = parseInt(value, 10);\n if (!isNaN(numericValue) && Object.values(enumType).includes(numericValue)) {\n return numericValue;\n }\n return void 0;\n}\n\n// src/dev/index.ts\nvar dev_exports = {};\n__export(dev_exports, {\n debugLog: () => debugLog,\n isDev: () => isDev,\n isDevEnvironment: () => isDevEnvironment\n});\nfunction isDevEnvironment() {\n if (typeof process === \"undefined\") return false;\n const development = (process.env.WITH_MODE ?? \"\") === \"development\";\n return development;\n}\nfunction isDev() {\n if (typeof process === \"undefined\") return false;\n const development = (process.env.WITH_MODE ?? \"\") === \"development\";\n return development;\n}\nfunction debugLog(message, ...optionalParams) {\n if (isDevEnvironment()) {\n console.log(message, ...optionalParams);\n }\n}\n\n// src/constants/index.ts\nvar constants_exports = {};\n__export(constants_exports, {\n AccessKeys: () => AccessKeys\n});\n\n// src/constants/AccessKeys.ts\nvar AccessKeys = {\n Timesheet: \"timesheet\",\n TimesheetAdmin: \"admin_timesheet\",\n InternalAdmin: \"internal\",\n Invoicing: \"invoicing\",\n ExpenseReport: \"expense_report\",\n ExpenseReportAdmin: \"admin_expense_report\",\n ProjectAdmin: \"admin_project\",\n FixtureCatalog: \"fixture_catalog\",\n ProjectDatabase: \"project_database\",\n Owner: \"owner\",\n User: \"user\"\n};\n\n// src/download/index.ts\nvar download_exports = {};\n__export(download_exports, {\n downloadFile: () => downloadFile,\n getFile: () => getFile,\n getFilePost: () => getFilePost\n});\nasync function getFile(url, fileName) {\n const response = await fetch(url);\n const blob = await response.blob();\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n URL.revokeObjectURL(link.href);\n}\nasync function downloadFile(text) {\n const blob = new Blob([text], { type: \"text/plain\" });\n const link = document.createElement(\"a\");\n link.style.display = \"none\";\n link.href = URL.createObjectURL(blob);\n document.body.appendChild(link);\n link.click();\n URL.revokeObjectURL(link.href);\n document.body.removeChild(link);\n}\nasync function getFilePost(url, fileName, queryParams) {\n const response = await fetch(url, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\"\n },\n body: JSON.stringify(queryParams)\n });\n if (response.ok === false) {\n if (response.status === 404) throw new Error(response.statusText);\n if (response.status === 500) throw new Error(response.statusText);\n throw new Error(response.statusText);\n }\n const blob = await response.blob();\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download = fileName;\n link.click();\n URL.revokeObjectURL(link.href);\n}\n\n// src/meta/index.ts\nvar meta_exports = {};\n__export(meta_exports, {\n getCallerUniqueKey: () => getCallerUniqueKey\n});\nfunction getCallerUniqueKey() {\n const err = new Error();\n let stack = err.stack;\n if (stack === void 0) {\n try {\n throw err;\n } catch (e) {\n stack = e.stack;\n }\n }\n stack = stack || \"\";\n const lines = stack.split(\"\\n\");\n let earliestExecutionLine = 10;\n const filteredLines = lines.filter((line, index) => {\n const isIncluded = (line.includes(\"React\") || line.trim().startsWith(\"at commitHook\") || line.trim().includes(\"MountEffects\")) === false;\n if (index < earliestExecutionLine && isIncluded === false) {\n earliestExecutionLine = index;\n }\n return isIncluded;\n });\n const result = filteredLines.filter((x, index) => index < earliestExecutionLine).join(\"-\");\n return result;\n}\nexport {\n AccessKeys,\n Semaphore,\n addDates,\n addDays,\n areDatesEqual,\n array_exports as array,\n async_exports as async,\n cache_exports as cache,\n cacheFunction,\n calculatePasswordStrength,\n camelize,\n chunk,\n chunkArray,\n clearAllCache,\n clearCache,\n cn,\n color_exports as color,\n concurrent,\n constants_exports as constants,\n convertArrayToObject,\n date_exports as date,\n dateReviver,\n debounce,\n debugLog,\n deepEquals,\n delay,\n dev_exports as dev,\n device_exports as device,\n diff,\n download_exports as download,\n downloadFile,\n enum_exports as enumUtils,\n error_exports as error,\n extractFieldName,\n format_exports as format,\n formatCurrency,\n generateSlug,\n getAverage,\n getCallerUniqueKey,\n getContentType,\n getEnumValues,\n getFile,\n getFilePost,\n getFormFieldError,\n getObjectChanges,\n getPath,\n getUserFriendlyError,\n getUtcDate,\n getUtcMoment,\n getValueByPath,\n groupBy,\n groupByMultipleCriteria,\n hasCameraAsync,\n includeOnly,\n isBlank,\n isDarkColor,\n isDeepEqual,\n isDev,\n isDevEnvironment,\n isImageType,\n isIphone,\n isNetworkError,\n isNullOrWhitespace,\n isPdfType,\n isPostgrestError,\n isPwaLaunched,\n isRenderableType,\n isSmallDevice,\n isUsable,\n isValidDate,\n isVideoType,\n mapUnique,\n mapUnqiue,\n meta_exports as meta,\n newUuid,\n object_exports as object,\n omit,\n parseStringToEnum,\n parseWithDate,\n pascalize,\n pascalizeWithSpaces,\n pick,\n promiseAllWithConcurrencyLimit,\n range,\n sanitizeInput,\n selectByMin,\n setPath,\n setValueByPath,\n slugify,\n sort,\n sortBy,\n state_exports as state,\n string_exports as string,\n tailwind_exports as tailwind,\n toDecimalString,\n toNumberString,\n toUsdString,\n toUtcDate,\n tryGetAverage,\n tryGetSum,\n types_exports as types,\n unique,\n uuid_exports as uuid,\n validateEmail,\n validateMaxLength,\n validateMinLength,\n validatePattern,\n validateRequired,\n validateValue,\n validation_exports as validation,\n withUpdate\n};\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","import {\n AnyClassGroupIds,\n AnyConfig,\n AnyThemeGroupIds,\n ClassGroup,\n ClassValidator,\n Config,\n ThemeGetter,\n ThemeObject,\n} from './types'\n\nexport interface ClassPartObject {\n nextPart: Map<string, ClassPartObject>\n validators: ClassValidatorObject[]\n classGroupId?: AnyClassGroupIds\n}\n\ninterface ClassValidatorObject {\n classGroupId: AnyClassGroupIds\n validator: ClassValidator\n}\n\nconst CLASS_PART_SEPARATOR = '-'\n\nexport const createClassGroupUtils = (config: AnyConfig) => {\n const classMap = createClassMap(config)\n const { conflictingClassGroups, conflictingClassGroupModifiers } = config\n\n const getClassGroupId = (className: string) => {\n const classParts = className.split(CLASS_PART_SEPARATOR)\n\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and remove it from classParts.\n if (classParts[0] === '' && classParts.length !== 1) {\n classParts.shift()\n }\n\n return getGroupRecursive(classParts, classMap) || getGroupIdForArbitraryProperty(className)\n }\n\n const getConflictingClassGroupIds = (\n classGroupId: AnyClassGroupIds,\n hasPostfixModifier: boolean,\n ) => {\n const conflicts = conflictingClassGroups[classGroupId] || []\n\n if (hasPostfixModifier && conflictingClassGroupModifiers[classGroupId]) {\n return [...conflicts, ...conflictingClassGroupModifiers[classGroupId]!]\n }\n\n return conflicts\n }\n\n return {\n getClassGroupId,\n getConflictingClassGroupIds,\n }\n}\n\nconst getGroupRecursive = (\n classParts: string[],\n classPartObject: ClassPartObject,\n): AnyClassGroupIds | undefined => {\n if (classParts.length === 0) {\n return classPartObject.classGroupId\n }\n\n const currentClassPart = classParts[0]!\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart)\n const classGroupFromNextClassPart = nextClassPartObject\n ? getGroupRecursive(classParts.slice(1), nextClassPartObject)\n : undefined\n\n if (classGroupFromNextClassPart) {\n return classGroupFromNextClassPart\n }\n\n if (classPartObject.validators.length === 0) {\n return undefined\n }\n\n const classRest = classParts.join(CLASS_PART_SEPARATOR)\n\n return classPartObject.validators.find(({ validator }) => validator(classRest))?.classGroupId\n}\n\nconst arbitraryPropertyRegex = /^\\[(.+)\\]$/\n\nconst getGroupIdForArbitraryProperty = (className: string) => {\n if (arbitraryPropertyRegex.test(className)) {\n const arbitraryPropertyClassName = arbitraryPropertyRegex.exec(className)![1]\n const property = arbitraryPropertyClassName?.substring(\n 0,\n arbitraryPropertyClassName.indexOf(':'),\n )\n\n if (property) {\n // I use two dots here because one dot is used as prefix for class groups in plugins\n return 'arbitrary..' + property\n }\n }\n}\n\n/**\n * Exported for testing only\n */\nexport const createClassMap = (config: Config<AnyClassGroupIds, AnyThemeGroupIds>) => {\n const { theme, prefix } = config\n const classMap: ClassPartObject = {\n nextPart: new Map<string, ClassPartObject>(),\n validators: [],\n }\n\n const prefixedClassGroupEntries = getPrefixedClassGroupEntries(\n Object.entries(config.classGroups),\n prefix,\n )\n\n prefixedClassGroupEntries.forEach(([classGroupId, classGroup]) => {\n processClassesRecursively(classGroup, classMap, classGroupId, theme)\n })\n\n return classMap\n}\n\nconst processClassesRecursively = (\n classGroup: ClassGroup<AnyThemeGroupIds>,\n classPartObject: ClassPartObject,\n classGroupId: AnyClassGroupIds,\n theme: ThemeObject<AnyThemeGroupIds>,\n) => {\n classGroup.forEach((classDefinition) => {\n if (typeof classDefinition === 'string') {\n const classPartObjectToEdit =\n classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition)\n classPartObjectToEdit.classGroupId = classGroupId\n return\n }\n\n if (typeof classDefinition === 'function') {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(\n classDefinition(theme),\n classPartObject,\n classGroupId,\n theme,\n )\n return\n }\n\n classPartObject.validators.push({\n validator: classDefinition,\n classGroupId,\n })\n\n return\n }\n\n Object.entries(classDefinition).forEach(([key, classGroup]) => {\n processClassesRecursively(\n classGroup,\n getPart(classPartObject, key),\n classGroupId,\n theme,\n )\n })\n })\n}\n\nconst getPart = (classPartObject: ClassPartObject, path: string) => {\n let currentClassPartObject = classPartObject\n\n path.split(CLASS_PART_SEPARATOR).forEach((pathPart) => {\n if (!currentClassPartObject.nextPart.has(pathPart)) {\n currentClassPartObject.nextPart.set(pathPart, {\n nextPart: new Map(),\n validators: [],\n })\n }\n\n currentClassPartObject = currentClassPartObject.nextPart.get(pathPart)!\n })\n\n return currentClassPartObject\n}\n\nconst isThemeGetter = (func: ClassValidator | ThemeGetter): func is ThemeGetter =>\n (func as ThemeGetter).isThemeGetter\n\nconst getPrefixedClassGroupEntries = (\n classGroupEntries: Array<[classGroupId: string, classGroup: ClassGroup<AnyThemeGroupIds>]>,\n prefix: string | undefined,\n): Array<[classGroupId: string, classGroup: ClassGroup<AnyThemeGroupIds>]> => {\n if (!prefix) {\n return classGroupEntries\n }\n\n return classGroupEntries.map(([classGroupId, classGroup]) => {\n const prefixedClassGroup = classGroup.map((classDefinition) => {\n if (typeof classDefinition === 'string') {\n return prefix + classDefinition\n }\n\n if (typeof classDefinition === 'object') {\n return Object.fromEntries(\n Object.entries(classDefinition).map(([key, value]) => [prefix + key, value]),\n )\n }\n\n return classDefinition\n })\n\n return [classGroupId, prefixedClassGroup]\n })\n}\n","// Export is needed because TypeScript complains about an error otherwise:\n// Error: …/tailwind-merge/src/config-utils.ts(8,17): semantic error TS4058: Return type of exported function has or is using name 'LruCache' from external module \"…/tailwind-merge/src/lru-cache\" but cannot be named.\nexport interface LruCache<Key, Value> {\n get(key: Key): Value | undefined\n set(key: Key, value: Value): void\n}\n\n// LRU cache inspired from hashlru (https://github.com/dominictarr/hashlru/blob/v1.0.4/index.js) but object replaced with Map to improve performance\nexport const createLruCache = <Key, Value>(maxCacheSize: number): LruCache<Key, Value> => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {},\n }\n }\n\n let cacheSize = 0\n let cache = new Map<Key, Value>()\n let previousCache = new Map<Key, Value>()\n\n const update = (key: Key, value: Value) => {\n cache.set(key, value)\n cacheSize++\n\n if (cacheSize > maxCacheSize) {\n cacheSize = 0\n previousCache = cache\n cache = new Map()\n }\n }\n\n return {\n get(key) {\n let value = cache.get(key)\n\n if (value !== undefined) {\n return value\n }\n if ((value = previousCache.get(key)) !== undefined) {\n update(key, value)\n return value\n }\n },\n set(key, value) {\n if (cache.has(key)) {\n cache.set(key, value)\n } else {\n update(key, value)\n }\n },\n }\n}\n","import { AnyConfig } from './types'\n\nexport const IMPORTANT_MODIFIER = '!'\n\nexport const createParseClassName = (config: AnyConfig) => {\n const { separator, experimentalParseClassName } = config\n const isSeparatorSingleCharacter = separator.length === 1\n const firstSeparatorCharacter = separator[0]\n const separatorLength = separator.length\n\n // parseClassName inspired by https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n const parseClassName = (className: string) => {\n const modifiers = []\n\n let bracketDepth = 0\n let modifierStart = 0\n let postfixModifierPosition: number | undefined\n\n for (let index = 0; index < className.length; index++) {\n let currentCharacter = className[index]\n\n if (bracketDepth === 0) {\n if (\n currentCharacter === firstSeparatorCharacter &&\n (isSeparatorSingleCharacter ||\n className.slice(index, index + separatorLength) === separator)\n ) {\n modifiers.push(className.slice(modifierStart, index))\n modifierStart = index + separatorLength\n continue\n }\n\n if (currentCharacter === '/') {\n postfixModifierPosition = index\n continue\n }\n }\n\n if (currentCharacter === '[') {\n bracketDepth++\n } else if (currentCharacter === ']') {\n bracketDepth--\n }\n }\n\n const baseClassNameWithImportantModifier =\n modifiers.length === 0 ? className : className.substring(modifierStart)\n const hasImportantModifier =\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)\n const baseClassName = hasImportantModifier\n ? baseClassNameWithImportantModifier.substring(1)\n : baseClassNameWithImportantModifier\n\n const maybePostfixModifierPosition =\n postfixModifierPosition && postfixModifierPosition > modifierStart\n ? postfixModifierPosition - modifierStart\n : undefined\n\n return {\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n }\n }\n\n if (experimentalParseClassName) {\n return (className: string) => experimentalParseClassName({ className, parseClassName })\n }\n\n return parseClassName\n}\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nexport const sortModifiers = (modifiers: string[]) => {\n if (modifiers.length <= 1) {\n return modifiers\n }\n\n const sortedModifiers: string[] = []\n let unsortedModifiers: string[] = []\n\n modifiers.forEach((modifier) => {\n const isArbitraryVariant = modifier[0] === '['\n\n if (isArbitraryVariant) {\n sortedModifiers.push(...unsortedModifiers.sort(), modifier)\n unsortedModifiers = []\n } else {\n unsortedModifiers.push(modifier)\n }\n })\n\n sortedModifiers.push(...unsortedModifiers.sort())\n\n return sortedModifiers\n}\n","import { createClassGroupUtils } from './class-group-utils'\nimport { createLruCache } from './lru-cache'\nimport { createParseClassName } from './parse-class-name'\nimport { AnyConfig } from './types'\n\nexport type ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport const createConfigUtils = (config: AnyConfig) => ({\n cache: createLruCache<string, string>(config.cacheSize),\n parseClassName: createParseClassName(config),\n ...createClassGroupUtils(config),\n})\n","import { ConfigUtils } from './config-utils'\nimport { IMPORTANT_MODIFIER, sortModifiers } from './parse-class-name'\n\nconst SPLIT_CLASSES_REGEX = /\\s+/\n\nexport const mergeClassList = (classList: string, configUtils: ConfigUtils) => {\n const { parseClassName, getClassGroupId, getConflictingClassGroupIds } = configUtils\n\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict: string[] = []\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX)\n\n let result = ''\n\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index]!\n\n const { modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition } =\n parseClassName(originalClassName)\n\n let hasPostfixModifier = Boolean(maybePostfixModifierPosition)\n let classGroupId = getClassGroupId(\n hasPostfixModifier\n ? baseClassName.substring(0, maybePostfixModifierPosition)\n : baseClassName,\n )\n\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n classGroupId = getClassGroupId(baseClassName)\n\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n continue\n }\n\n hasPostfixModifier = false\n }\n\n const variantModifier = sortModifiers(modifiers).join(':')\n\n const modifierId = hasImportantModifier\n ? variantModifier + IMPORTANT_MODIFIER\n : variantModifier\n\n const classId = modifierId + classGroupId\n\n if (classGroupsInConflict.includes(classId)) {\n // Tailwind class omitted due to conflict\n continue\n }\n\n classGroupsInConflict.push(classId)\n\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier)\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i]!\n classGroupsInConflict.push(modifierId + group)\n }\n\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result)\n }\n\n return result\n}\n","/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards <luke.edwards05@gmail.com> (lukeed.com)\n */\n\nexport type ClassNameValue = ClassNameArray | string | null | undefined | 0 | 0n | false\ntype ClassNameArray = ClassNameValue[]\n\nexport function twJoin(...classLists: ClassNameValue[]): string\nexport function twJoin() {\n let index = 0\n let argument: ClassNameValue\n let resolvedValue: string\n let string = ''\n\n while (index < arguments.length) {\n if ((argument = arguments[index++])) {\n if ((resolvedValue = toValue(argument))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n return string\n}\n\nconst toValue = (mix: ClassNameArray | string) => {\n if (typeof mix === 'string') {\n return mix\n }\n\n let resolvedValue: string\n let string = ''\n\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if ((resolvedValue = toValue(mix[k] as ClassNameArray | string))) {\n string && (string += ' ')\n string += resolvedValue\n }\n }\n }\n\n return string\n}\n","import { createConfigUtils } from './config-utils'\nimport { mergeClassList } from './merge-classlist'\nimport { ClassNameValue, twJoin } from './tw-join'\nimport { AnyConfig } from './types'\n\ntype CreateConfigFirst = () => AnyConfig\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\ntype TailwindMerge = (...classLists: ClassNameValue[]) => string\ntype ConfigUtils = ReturnType<typeof createConfigUtils>\n\nexport function createTailwindMerge(\n createConfigFirst: CreateConfigFirst,\n ...createConfigRest: CreateConfigSubsequent[]\n): TailwindMerge {\n let configUtils: ConfigUtils\n let cacheGet: ConfigUtils['cache']['get']\n let cacheSet: ConfigUtils['cache']['set']\n let functionToCall = initTailwindMerge\n\n function initTailwindMerge(classList: string) {\n const config = createConfigRest.reduce(\n (previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig),\n createConfigFirst() as AnyConfig,\n )\n\n configUtils = createConfigUtils(config)\n cacheGet = configUtils.cache.get\n cacheSet = configUtils.cache.set\n functionToCall = tailwindMerge\n\n return tailwindMerge(classList)\n }\n\n function tailwindMerge(classList: string) {\n const cachedResult = cacheGet(classList)\n\n if (cachedResult) {\n return cachedResult\n }\n\n const result = mergeClassList(classList, configUtils)\n cacheSet(classList, result)\n\n return result\n }\n\n return function callTailwindMerge() {\n return functionToCall(twJoin.apply(null, arguments as any))\n }\n}\n","import { DefaultThemeGroupIds, NoInfer, ThemeGetter, ThemeObject } from './types'\n\nexport const fromTheme = <\n AdditionalThemeGroupIds extends string = never,\n DefaultThemeGroupIdsInner extends string = DefaultThemeGroupIds,\n>(key: NoInfer<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>): ThemeGetter => {\n const themeGetter = (theme: ThemeObject<DefaultThemeGroupIdsInner | AdditionalThemeGroupIds>) =>\n theme[key] || []\n\n themeGetter.isThemeGetter = true as const\n\n return themeGetter\n}\n","const arbitraryValueRegex = /^\\[(?:([a-z-]+):)?(.+)\\]$/i\nconst fractionRegex = /^\\d+\\/\\d+$/\nconst stringLengths = new Set(['px', 'full', 'screen'])\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/\nconst lengthUnitRegex =\n /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch))\\(.+\\)$/\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/\nconst imageRegex =\n /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/\n\nexport const isLength = (value: string) =>\n isNumber(value) || stringLengths.has(value) || fractionRegex.test(value)\n\nexport const isArbitraryLength = (value: string) =>\n getIsArbitraryValue(value, 'length', isLengthOnly)\n\nexport const isNumber = (value: string) => Boolean(value) && !Number.isNaN(Number(value))\n\nexport const isArbitraryNumber = (value: string) => getIsArbitraryValue(value, 'number', isNumber)\n\nexport const isInteger = (value: string) => Boolean(value) && Number.isInteger(Number(value))\n\nexport const isPercent = (value: string) => value.endsWith('%') && isNumber(value.slice(0, -1))\n\nexport const isArbitraryValue = (value: string) => arbitraryValueRegex.test(value)\n\nexport const isTshirtSize = (value: string) => tshirtUnitRegex.test(value)\n\nconst sizeLabels = new Set(['length', 'size', 'percentage'])\n\nexport const isArbitrarySize = (value: string) => getIsArbitraryValue(value, sizeLabels, isNever)\n\nexport const isArbitraryPosition = (value: string) =>\n getIsArbitraryValue(value, 'position', isNever)\n\nconst imageLabels = new Set(['image', 'url'])\n\nexport const isArbitraryImage = (value: string) => getIsArbitraryValue(value, imageLabels, isImage)\n\nexport const isArbitraryShadow = (value: string) => getIsArbitraryValue(value, '', isShadow)\n\nexport const isAny = () => true\n\nconst getIsArbitraryValue = (\n value: string,\n label: string | Set<string>,\n testValue: (value: string) => boolean,\n) => {\n const result = arbitraryValueRegex.exec(value)\n\n if (result) {\n if (result[1]) {\n return typeof label === 'string' ? result[1] === label : label.has(result[1])\n }\n\n return testValue(result[2]!)\n }\n\n return false\n}\n\nconst isLengthOnly = (value: string) =>\n // `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n // For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n // I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\n lengthUnitRegex.test(value) && !colorFunctionRegex.test(value)\n\nconst isNever = () => false\n\nconst isShadow = (value: string) => shadowRegex.test(value)\n\nconst isImage = (value: string) => imageRegex.test(value)\n","import { fromTheme } from './from-theme'\nimport { Config, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\nimport {\n isAny,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isInteger,\n isLength,\n isNumber,\n isPercent,\n isTshirtSize,\n} from './validators'\n\nexport const getDefaultConfig = () => {\n const colors = fromTheme('colors')\n const spacing = fromTheme('spacing')\n const blur = fromTheme('blur')\n const brightness = fromTheme('brightness')\n const borderColor = fromTheme('borderColor')\n const borderRadius = fromTheme('borderRadius')\n const borderSpacing = fromTheme('borderSpacing')\n const borderWidth = fromTheme('borderWidth')\n const contrast = fromTheme('contrast')\n const grayscale = fromTheme('grayscale')\n const hueRotate = fromTheme('hueRotate')\n const invert = fromTheme('invert')\n const gap = fromTheme('gap')\n const gradientColorStops = fromTheme('gradientColorStops')\n const gradientColorStopPositions = fromTheme('gradientColorStopPositions')\n const inset = fromTheme('inset')\n const margin = fromTheme('margin')\n const opacity = fromTheme('opacity')\n const padding = fromTheme('padding')\n const saturate = fromTheme('saturate')\n const scale = fromTheme('scale')\n const sepia = fromTheme('sepia')\n const skew = fromTheme('skew')\n const space = fromTheme('space')\n const translate = fromTheme('translate')\n\n const getOverscroll = () => ['auto', 'contain', 'none'] as const\n const getOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'] as const\n const getSpacingWithAutoAndArbitrary = () => ['auto', isArbitraryValue, spacing] as const\n const getSpacingWithArbitrary = () => [isArbitraryValue, spacing] as const\n const getLengthWithEmptyAndArbitrary = () => ['', isLength, isArbitraryLength] as const\n const getNumberWithAutoAndArbitrary = () => ['auto', isNumber, isArbitraryValue] as const\n const getPositions = () =>\n [\n 'bottom',\n 'center',\n 'left',\n 'left-bottom',\n 'left-top',\n 'right',\n 'right-bottom',\n 'right-top',\n 'top',\n ] as const\n const getLineStyles = () => ['solid', 'dashed', 'dotted', 'double', 'none'] as const\n const getBlendModes = () =>\n [\n 'normal',\n 'multiply',\n 'screen',\n 'overlay',\n 'darken',\n 'lighten',\n 'color-dodge',\n 'color-burn',\n 'hard-light',\n 'soft-light',\n 'difference',\n 'exclusion',\n 'hue',\n 'saturation',\n 'color',\n 'luminosity',\n ] as const\n const getAlign = () =>\n ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch'] as const\n const getZeroAndEmpty = () => ['', '0', isArbitraryValue] as const\n const getBreaks = () =>\n ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'] as const\n const getNumberAndArbitrary = () => [isNumber, isArbitraryValue]\n\n return {\n cacheSize: 500,\n separator: ':',\n theme: {\n colors: [isAny],\n spacing: [isLength, isArbitraryLength],\n blur: ['none', '', isTshirtSize, isArbitraryValue],\n brightness: getNumberAndArbitrary(),\n borderColor: [colors],\n borderRadius: ['none', '', 'full', isTshirtSize, isArbitraryValue],\n borderSpacing: getSpacingWithArbitrary(),\n borderWidth: getLengthWithEmptyAndArbitrary(),\n contrast: getNumberAndArbitrary(),\n grayscale: getZeroAndEmpty(),\n hueRotate: getNumberAndArbitrary(),\n invert: getZeroAndEmpty(),\n gap: getSpacingWithArbitrary(),\n gradientColorStops: [colors],\n gradientColorStopPositions: [isPercent, isArbitraryLength],\n inset: getSpacingWithAutoAndArbitrary(),\n margin: getSpacingWithAutoAndArbitrary(),\n opacity: getNumberAndArbitrary(),\n padding: getSpacingWithArbitrary(),\n saturate: getNumberAndArbitrary(),\n scale: getNumberAndArbitrary(),\n sepia: getZeroAndEmpty(),\n skew: getNumberAndArbitrary(),\n space: getSpacingWithArbitrary(),\n translate: getSpacingWithArbitrary(),\n },\n classGroups: {\n // Layout\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{ aspect: ['auto', 'square', 'video', isArbitraryValue] }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{ columns: [isTshirtSize] }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{ 'break-after': getBreaks() }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{ 'break-before': getBreaks() }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{ 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column'] }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{ 'box-decoration': ['slice', 'clone'] }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{ box: ['border', 'content'] }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: [\n 'block',\n 'inline-block',\n 'inline',\n 'flex',\n 'inline-flex',\n 'table',\n 'inline-table',\n 'table-caption',\n 'table-cell',\n 'table-column',\n 'table-column-group',\n 'table-footer-group',\n 'table-header-group',\n 'table-row-group',\n 'table-row',\n 'flow-root',\n 'grid',\n 'inline-grid',\n 'contents',\n 'list-item',\n 'hidden',\n ],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{ float: ['right', 'left', 'none', 'start', 'end'] }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{ clear: ['left', 'right', 'both', 'none', 'start', 'end'] }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{ object: ['contain', 'cover', 'fill', 'none', 'scale-down'] }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{ object: [...getPositions(), isArbitraryValue] }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{ overflow: getOverflow() }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{ 'overflow-x': getOverflow() }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{ 'overflow-y': getOverflow() }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{ overscroll: getOverscroll() }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{ 'overscroll-x': getOverscroll() }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{ 'overscroll-y': getOverscroll() }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{ inset: [inset] }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{ 'inset-x': [inset] }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{ 'inset-y': [inset] }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{ start: [inset] }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{ end: [inset] }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{ top: [inset] }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{ right: [inset] }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{ bottom: [inset] }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{ left: [inset] }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{ z: ['auto', isInteger, isArbitraryValue] }],\n // Flexbox and Grid\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{ basis: getSpacingWithAutoAndArbitrary() }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{ flex: ['row', 'row-reverse', 'col', 'col-reverse'] }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{ flex: ['wrap', 'wrap-reverse', 'nowrap'] }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{ flex: ['1', 'auto', 'initial', 'none', isArbitraryValue] }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{ grow: getZeroAndEmpty() }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{ shrink: getZeroAndEmpty() }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{ order: ['first', 'last', 'none', isInteger, isArbitraryValue] }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{ 'grid-cols': [isAny] }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [\n {\n col: [\n 'auto',\n { span: ['full', isInteger, isArbitraryValue] },\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{ 'col-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{ 'col-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{ 'grid-rows': [isAny] }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [\n { row: ['auto', { span: [isInteger, isArbitraryValue] }, isArbitraryValue] },\n ],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{ 'row-start': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{ 'row-end': getNumberWithAutoAndArbitrary() }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{ 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense'] }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{ 'auto-cols': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{ 'auto-rows': ['auto', 'min', 'max', 'fr', isArbitraryValue] }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{ gap: [gap] }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{ 'gap-x': [gap] }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{ 'gap-y': [gap] }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{ justify: ['normal', ...getAlign()] }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{ 'justify-items': ['start', 'end', 'center', 'stretch'] }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{ 'justify-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{ content: ['normal', ...getAlign(), 'baseline'] }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{ items: ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{ self: ['auto', 'start', 'end', 'center', 'stretch', 'baseline'] }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{ 'place-content': [...getAlign(), 'baseline'] }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{ 'place-items': ['start', 'end', 'center', 'baseline', 'stretch'] }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{ 'place-self': ['auto', 'start', 'end', 'center', 'stretch'] }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{ p: [padding] }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{ px: [padding] }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{ py: [padding] }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{ ps: [padding] }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{ pe: [padding] }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{ pt: [padding] }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{ pr: [padding] }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{ pb: [padding] }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{ pl: [padding] }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{ m: [margin] }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{ mx: [margin] }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{ my: [margin] }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{ ms: [margin] }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{ me: [margin] }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{ mt: [margin] }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{ mr: [margin] }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{ mb: [margin] }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{ ml: [margin] }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x': [{ 'space-x': [space] }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y': [{ 'space-y': [space] }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/space\n */\n 'space-y-reverse': ['space-y-reverse'],\n // Sizing\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [\n {\n w: [\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svw',\n 'lvw',\n 'dvw',\n isArbitraryValue,\n spacing,\n ],\n },\n ],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{ 'min-w': [isArbitraryValue, spacing, 'min', 'max', 'fit'] }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [\n {\n 'max-w': [\n isArbitraryValue,\n spacing,\n 'none',\n 'full',\n 'min',\n 'max',\n 'fit',\n 'prose',\n { screen: [isTshirtSize] },\n isTshirtSize,\n ],\n },\n ],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [\n {\n h: [\n isArbitraryValue,\n spacing,\n 'auto',\n 'min',\n 'max',\n 'fit',\n 'svh',\n 'lvh',\n 'dvh',\n ],\n },\n ],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [\n { 'min-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [\n { 'max-h': [isArbitraryValue, spacing, 'min', 'max', 'fit', 'svh', 'lvh', 'dvh'] },\n ],\n /**\n * Size\n * @see https://tailwindcss.com/docs/size\n */\n size: [{ size: [isArbitraryValue, spacing, 'auto', 'min', 'max', 'fit'] }],\n // Typography\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{ text: ['base', isTshirtSize, isArbitraryLength] }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [\n {\n font: [\n 'thin',\n 'extralight',\n 'light',\n 'normal',\n 'medium',\n 'semibold',\n 'bold',\n 'extrabold',\n 'black',\n isArbitraryNumber,\n ],\n },\n ],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{ font: [isAny] }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [\n {\n tracking: [\n 'tighter',\n 'tight',\n 'normal',\n 'wide',\n 'wider',\n 'widest',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{ 'line-clamp': ['none', isNumber, isArbitraryNumber] }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [\n {\n leading: [\n 'none',\n 'tight',\n 'snug',\n 'normal',\n 'relaxed',\n 'loose',\n isLength,\n isArbitraryValue,\n ],\n },\n ],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{ 'list-image': ['none', isArbitraryValue] }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{ list: ['none', 'disc', 'decimal', isArbitraryValue] }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{ list: ['inside', 'outside'] }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{ placeholder: [colors] }],\n /**\n * Placeholder Opacity\n * @see https://tailwindcss.com/docs/placeholder-opacity\n */\n 'placeholder-opacity': [{ 'placeholder-opacity': [opacity] }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{ text: ['left', 'center', 'right', 'justify', 'start', 'end'] }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{ text: [colors] }],\n /**\n * Text Opacity\n * @see https://tailwindcss.com/docs/text-opacity\n */\n 'text-opacity': [{ 'text-opacity': [opacity] }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{ decoration: [...getLineStyles(), 'wavy'] }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [\n { decoration: ['auto', 'from-font', isLength, isArbitraryLength] },\n ],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{ 'underline-offset': ['auto', isLength, isArbitraryValue] }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{ decoration: [colors] }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{ text: ['wrap', 'nowrap', 'balance', 'pretty'] }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{ indent: getSpacingWithArbitrary() }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [\n {\n align: [\n 'baseline',\n 'top',\n 'middle',\n 'bottom',\n 'text-top',\n 'text-bottom',\n 'sub',\n 'super',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [\n { whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces'] },\n ],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{ break: ['normal', 'words', 'all', 'keep'] }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{ hyphens: ['none', 'manual', 'auto'] }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{ content: ['none', isArbitraryValue] }],\n // Backgrounds\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{ bg: ['fixed', 'local', 'scroll'] }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{ 'bg-clip': ['border', 'padding', 'content', 'text'] }],\n /**\n * Background Opacity\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/background-opacity\n */\n 'bg-opacity': [{ 'bg-opacity': [opacity] }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{ 'bg-origin': ['border', 'padding', 'content'] }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{ bg: [...getPositions(), isArbitraryPosition] }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{ bg: ['no-repeat', { repeat: ['', 'x', 'y', 'round', 'space'] }] }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{ bg: ['auto', 'cover', 'contain', isArbitrarySize] }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [\n {\n bg: [\n 'none',\n { 'gradient-to': ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl'] },\n isArbitraryImage,\n ],\n },\n ],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{ bg: [colors] }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{ from: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{ via: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{ to: [gradientColorStopPositions] }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{ from: [gradientColorStops] }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{ via: [gradientColorStops] }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{ to: [gradientColorStops] }],\n // Borders\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{ rounded: [borderRadius] }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{ 'rounded-s': [borderRadius] }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{ 'rounded-e': [borderRadius] }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{ 'rounded-t': [borderRadius] }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{ 'rounded-r': [borderRadius] }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{ 'rounded-b': [borderRadius] }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{ 'rounded-l': [borderRadius] }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{ 'rounded-ss': [borderRadius] }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{ 'rounded-se': [borderRadius] }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{ 'rounded-ee': [borderRadius] }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{ 'rounded-es': [borderRadius] }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{ 'rounded-tl': [borderRadius] }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{ 'rounded-tr': [borderRadius] }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{ 'rounded-br': [borderRadius] }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{ 'rounded-bl': [borderRadius] }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{ border: [borderWidth] }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{ 'border-x': [borderWidth] }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{ 'border-y': [borderWidth] }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{ 'border-s': [borderWidth] }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{ 'border-e': [borderWidth] }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{ 'border-t': [borderWidth] }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{ 'border-r': [borderWidth] }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{ 'border-b': [borderWidth] }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{ 'border-l': [borderWidth] }],\n /**\n * Border Opacity\n * @see https://tailwindcss.com/docs/border-opacity\n */\n 'border-opacity': [{ 'border-opacity': [opacity] }],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{ border: [...getLineStyles(), 'hidden'] }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x': [{ 'divide-x': [borderWidth] }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y': [{ 'divide-y': [borderWidth] }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/divide-width\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Divide Opacity\n * @see https://tailwindcss.com/docs/divide-opacity\n */\n 'divide-opacity': [{ 'divide-opacity': [opacity] }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/divide-style\n */\n 'divide-style': [{ divide: getLineStyles() }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{ border: [borderColor] }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{ 'border-x': [borderColor] }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{ 'border-y': [borderColor] }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{ 'border-s': [borderColor] }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{ 'border-e': [borderColor] }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{ 'border-t': [borderColor] }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{ 'border-r': [borderColor] }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{ 'border-b': [borderColor] }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{ 'border-l': [borderColor] }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{ divide: [borderColor] }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{ outline: ['', ...getLineStyles()] }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{ 'outline-offset': [isLength, isArbitraryValue] }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{ outline: [isLength, isArbitraryLength] }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{ outline: [colors] }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w': [{ ring: getLengthWithEmptyAndArbitrary() }],\n /**\n * Ring Width Inset\n * @see https://tailwindcss.com/docs/ring-width\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/ring-color\n */\n 'ring-color': [{ ring: [colors] }],\n /**\n * Ring Opacity\n * @see https://tailwindcss.com/docs/ring-opacity\n */\n 'ring-opacity': [{ 'ring-opacity': [opacity] }],\n /**\n * Ring Offset Width\n * @see https://tailwindcss.com/docs/ring-offset-width\n */\n 'ring-offset-w': [{ 'ring-offset': [isLength, isArbitraryLength] }],\n /**\n * Ring Offset Color\n * @see https://tailwindcss.com/docs/ring-offset-color\n */\n 'ring-offset-color': [{ 'ring-offset': [colors] }],\n // Effects\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{ shadow: ['', 'inner', 'none', isTshirtSize, isArbitraryShadow] }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow-color\n */\n 'shadow-color': [{ shadow: [isAny] }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{ opacity: [opacity] }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{ 'mix-blend': [...getBlendModes(), 'plus-lighter', 'plus-darker'] }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{ 'bg-blend': getBlendModes() }],\n // Filters\n /**\n * Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{ filter: ['', 'none'] }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{ blur: [blur] }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{ brightness: [brightness] }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{ contrast: [contrast] }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{ 'drop-shadow': ['', 'none', isTshirtSize, isArbitraryValue] }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{ grayscale: [grayscale] }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{ 'hue-rotate': [hueRotate] }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{ invert: [invert] }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{ saturate: [saturate] }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{ sepia: [sepia] }],\n /**\n * Backdrop Filter\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{ 'backdrop-filter': ['', 'none'] }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{ 'backdrop-blur': [blur] }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{ 'backdrop-brightness': [brightness] }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{ 'backdrop-contrast': [contrast] }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{ 'backdrop-grayscale': [grayscale] }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{ 'backdrop-hue-rotate': [hueRotate] }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{ 'backdrop-invert': [invert] }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{ 'backdrop-opacity': [opacity] }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{ 'backdrop-saturate': [saturate] }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{ 'backdrop-sepia': [sepia] }],\n // Tables\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{ border: ['collapse', 'separate'] }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{ 'border-spacing': [borderSpacing] }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{ 'border-spacing-x': [borderSpacing] }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{ 'border-spacing-y': [borderSpacing] }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{ table: ['auto', 'fixed'] }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{ caption: ['top', 'bottom'] }],\n // Transitions and Animation\n /**\n * Tranisition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [\n {\n transition: [\n 'none',\n 'all',\n '',\n 'colors',\n 'opacity',\n 'shadow',\n 'transform',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{ duration: getNumberAndArbitrary() }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{ ease: ['linear', 'in', 'out', 'in-out', isArbitraryValue] }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{ delay: getNumberAndArbitrary() }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{ animate: ['none', 'spin', 'ping', 'pulse', 'bounce', isArbitraryValue] }],\n // Transforms\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{ transform: ['', 'gpu', 'none'] }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{ scale: [scale] }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{ 'scale-x': [scale] }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{ 'scale-y': [scale] }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{ rotate: [isInteger, isArbitraryValue] }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{ 'translate-x': [translate] }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{ 'translate-y': [translate] }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{ 'skew-x': [skew] }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{ 'skew-y': [skew] }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [\n {\n origin: [\n 'center',\n 'top',\n 'top-right',\n 'right',\n 'bottom-right',\n 'bottom',\n 'bottom-left',\n 'left',\n 'top-left',\n isArbitraryValue,\n ],\n },\n ],\n // Interactivity\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{ accent: ['auto', colors] }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{ appearance: ['none', 'auto'] }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [\n {\n cursor: [\n 'auto',\n 'default',\n 'pointer',\n 'wait',\n 'text',\n 'move',\n 'help',\n 'not-allowed',\n 'none',\n 'context-menu',\n 'progress',\n 'cell',\n 'crosshair',\n 'vertical-text',\n 'alias',\n 'copy',\n 'no-drop',\n 'grab',\n 'grabbing',\n 'all-scroll',\n 'col-resize',\n 'row-resize',\n 'n-resize',\n 'e-resize',\n 's-resize',\n 'w-resize',\n 'ne-resize',\n 'nw-resize',\n 'se-resize',\n 'sw-resize',\n 'ew-resize',\n 'ns-resize',\n 'nesw-resize',\n 'nwse-resize',\n 'zoom-in',\n 'zoom-out',\n isArbitraryValue,\n ],\n },\n ],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{ caret: [colors] }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{ 'pointer-events': ['none', 'auto'] }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{ resize: ['none', 'y', 'x', ''] }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{ scroll: ['auto', 'smooth'] }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{ 'scroll-m': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{ 'scroll-mx': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{ 'scroll-my': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{ 'scroll-ms': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{ 'scroll-me': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{ 'scroll-mt': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{ 'scroll-mr': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{ 'scroll-mb': getSpacingWithArbitrary() }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{ 'scroll-ml': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{ 'scroll-p': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{ 'scroll-px': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{ 'scroll-py': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{ 'scroll-ps': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{ 'scroll-pe': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{ 'scroll-pt': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{ 'scroll-pr': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{ 'scroll-pb': getSpacingWithArbitrary() }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{ 'scroll-pl': getSpacingWithArbitrary() }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{ snap: ['start', 'end', 'center', 'align-none'] }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{ snap: ['normal', 'always'] }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{ snap: ['none', 'x', 'y', 'both'] }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{ snap: ['mandatory', 'proximity'] }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [\n {\n touch: ['auto', 'none', 'manipulation'],\n },\n ],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [\n {\n 'touch-pan': ['x', 'left', 'right'],\n },\n ],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [\n {\n 'touch-pan': ['y', 'up', 'down'],\n },\n ],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{ select: ['none', 'text', 'all', 'auto'] }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [\n { 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryValue] },\n ],\n // SVG\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{ fill: [colors, 'none'] }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{ stroke: [isLength, isArbitraryLength, isArbitraryNumber] }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{ stroke: [colors, 'none'] }],\n // Accessibility\n /**\n * Screen Readers\n * @see https://tailwindcss.com/docs/screen-readers\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{ 'forced-color-adjust': ['auto', 'none'] }],\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': [\n 'fvn-ordinal',\n 'fvn-slashed-zero',\n 'fvn-figure',\n 'fvn-spacing',\n 'fvn-fraction',\n ],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: [\n 'rounded-s',\n 'rounded-e',\n 'rounded-t',\n 'rounded-r',\n 'rounded-b',\n 'rounded-l',\n 'rounded-ss',\n 'rounded-se',\n 'rounded-ee',\n 'rounded-es',\n 'rounded-tl',\n 'rounded-tr',\n 'rounded-br',\n 'rounded-bl',\n ],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': [\n 'border-w-s',\n 'border-w-e',\n 'border-w-t',\n 'border-w-r',\n 'border-w-b',\n 'border-w-l',\n ],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': [\n 'border-color-s',\n 'border-color-e',\n 'border-color-t',\n 'border-color-r',\n 'border-color-b',\n 'border-color-l',\n ],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n 'scroll-m': [\n 'scroll-mx',\n 'scroll-my',\n 'scroll-ms',\n 'scroll-me',\n 'scroll-mt',\n 'scroll-mr',\n 'scroll-mb',\n 'scroll-ml',\n ],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': [\n 'scroll-px',\n 'scroll-py',\n 'scroll-ps',\n 'scroll-pe',\n 'scroll-pt',\n 'scroll-pr',\n 'scroll-pb',\n 'scroll-pl',\n ],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch'],\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading'],\n },\n } as const satisfies Config<DefaultClassGroupIds, DefaultThemeGroupIds>\n}\n","import { AnyConfig, ConfigExtension } from './types'\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nexport const mergeConfigs = <ClassGroupIds extends string, ThemeGroupIds extends string = never>(\n baseConfig: AnyConfig,\n {\n cacheSize,\n prefix,\n separator,\n experimentalParseClassName,\n extend = {},\n override = {},\n }: ConfigExtension<ClassGroupIds, ThemeGroupIds>,\n) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize)\n overrideProperty(baseConfig, 'prefix', prefix)\n overrideProperty(baseConfig, 'separator', separator)\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName)\n\n for (const configKey in override) {\n overrideConfigProperties(\n baseConfig[configKey as keyof typeof override],\n override[configKey as keyof typeof override],\n )\n }\n\n for (const key in extend) {\n mergeConfigProperties(\n baseConfig[key as keyof typeof extend],\n extend[key as keyof typeof extend],\n )\n }\n\n return baseConfig\n}\n\nconst overrideProperty = <T extends object, K extends keyof T>(\n baseObject: T,\n overrideKey: K,\n overrideValue: T[K] | undefined,\n) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue\n }\n}\n\nconst overrideConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n overrideObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key])\n }\n }\n}\n\nconst mergeConfigProperties = (\n baseObject: Partial<Record<string, readonly unknown[]>>,\n mergeObject: Partial<Record<string, readonly unknown[]>> | undefined,\n) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n const mergeValue = mergeObject[key]\n\n if (mergeValue !== undefined) {\n baseObject[key] = (baseObject[key] || []).concat(mergeValue)\n }\n }\n }\n}\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\nimport { mergeConfigs } from './merge-configs'\nimport { AnyConfig, ConfigExtension, DefaultClassGroupIds, DefaultThemeGroupIds } from './types'\n\ntype CreateConfigSubsequent = (config: AnyConfig) => AnyConfig\n\nexport const extendTailwindMerge = <\n AdditionalClassGroupIds extends string = never,\n AdditionalThemeGroupIds extends string = never,\n>(\n configExtension:\n | ConfigExtension<\n DefaultClassGroupIds | AdditionalClassGroupIds,\n DefaultThemeGroupIds | AdditionalThemeGroupIds\n >\n | CreateConfigSubsequent,\n ...createConfig: CreateConfigSubsequent[]\n) =>\n typeof configExtension === 'function'\n ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig)\n : createTailwindMerge(\n () => mergeConfigs(getDefaultConfig(), configExtension),\n ...createConfig,\n )\n","import { createTailwindMerge } from './create-tailwind-merge'\nimport { getDefaultConfig } from './default-config'\n\nexport const twMerge = createTailwindMerge(getDefaultConfig)\n","import { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport {\n encode,\n useQuery,\n} from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport useRealtime from \"./useRealtime\";\nimport { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { UseDbQuerySingleReturn } from \"../useDbQuery\";\nimport { PostgrestParser } from \"../parser/PostgrestParser\";\n\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\n\ntype FilterOperator =\n | \"or\"\n | \"eq\"\n | \"neq\"\n | \"gt\"\n | \"gte\"\n | \"lt\"\n | \"lte\"\n | \"like\"\n | \"ilike\"\n | \"is\"\n | \"in\"\n | \"cs\"\n | \"cd\"\n | \"fts\"\n | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\n\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\n\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\n\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\n\nexport type UseRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus:\n | \"SUBSCRIBED\"\n | \"TIMED_OUT\"\n | \"CLOSED\"\n | \"CHANNEL_ERROR\"\n | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\n\nexport function convertFilterToRealtimeQuery(\n filters: FilterDefinitions\n): string {\n function convert(filter: FilterComposite | FilterDefinition): string {\n //TODO: I just added this line to make it work\n if (!filter) return \"\";\n if (\"path\" in filter) {\n if (filter.path.includes(\".\")) return \"\";\n\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString =\n '(\"' +\n valueString\n .slice(2, valueString.length - 2)\n .split(\",\")\n .join('\",\"') +\n '\")';\n }\n\n return `${filter.path}=${\n filter.negate ? \"not.\" : \"\"\n }${filter.operator}.${valueString}`;\n } else {\n if (filter.or) {\n return `(${filter.or.map((f) => convert(f)).join(\"|\")})`;\n } else if (filter.and) {\n return `(${filter.and.map((f) => convert(f)).join(\"&\")})`;\n }\n }\n return \"\";\n }\n\n //todo: review later when multiple filters are available\n return convert(filters[0]);\n}\n\nexport function useRealtimeQuery<Result extends DataType>(\n query: PromiseLike<PostgrestSingleResponse<Result>>,\n config?: Omit<\n UseQueryOptions<PostgrestSingleResponse<Result>>,\n \"queryKey\" | \"queryFn\"\n > &\n ConfigurationOptions<Result>,\n primaryKeys: (keyof ItemType<Result> & string)[] = [\"id\" as any]\n): UseRealtimeQueryResult<Result> {\n const parser = useMemo(\n () => new PostgrestParser<Result>(query as any),\n [query]\n );\n\n // Use consumer's config - don't force refetchOnMount: \"always\" which defeats prefetching\n // Realtime subscription will keep data fresh anyway\n const request = useQuery(\n query,\n useMemo(() => config as any, [config])\n );\n const queryKey = encode(query, false);\n\n // Removed: Effect that forced refetch on query key change\n // This was causing double fetches and defeating prefetch optimization\n // Realtime subscription handles keeping data in sync\n\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n let filter: string | undefined =\n request.data && typeof request.data === \"object\" && \"id\" in request.data\n ? \"id=eq.\" + request.data.id\n : filterString;\n\n if (filter.includes('in.(\\\\\"\\\\\")')) {\n filter = undefined;\n }\n if (isNullOrWhitespace(filter)) {\n filter = undefined;\n }\n\n const selectStatement = parser.select;\n\n const realtimeStatus = useRealtime(\n queryKey.join(\"-\"),\n selectStatement,\n { schema: parser.schema, table: parser.table },\n primaryKeys,\n {\n filter: filter,\n enabled: typeof config?.enabled === \"boolean\" ? config.enabled : true,\n }\n );\n const outputRealtimeStatus: typeof realtimeStatus | \"Loading...\" =\n request.isFetching ? \"Loading...\" : realtimeStatus;\n\n return {\n ...request,\n data: request.data as Result | null | undefined,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: realtimeStatus == \"SUBSCRIBED\",\n isRealtimeLoading: request.isFetching,\n } as UseRealtimeQueryResult<Result>;\n}\n","export const sortSearchParams = (params: URLSearchParams) =>\n new URLSearchParams(\n Array.from(params.entries()).sort((a, b) => {\n const x = `${a[0]}${a[1]}`;\n const y = `${b[0]}${b[1]}`;\n return x > y ? 1 : -1;\n }),\n );\n","import { flatten } from \"flat\";\n\nimport { sortSearchParams } from \"./sort-search-param\";\n\n/**\n * Encodes an object by url-encoding an ordered lists of all paths and their values.\n */\nexport const encodeObject = (obj: Record<string, unknown>): string => {\n const sortedEntries = Object.entries(flatten(obj) as Record<string, unknown>).sort(([a], [b]) => a.length - b.length);\n const bodyParams = new URLSearchParams();\n sortedEntries.forEach(([key, value]) => {\n bodyParams.append(key, String(value));\n });\n return sortSearchParams(bodyParams).toString();\n};\n","export const isObject = (v: unknown): v is Record<string, unknown> =>\n typeof v === 'object' && !Array.isArray(v) && v !== null;\n","/**\n * Returns the index of the last element in the array where predicate is true, and -1\n * otherwise.\n * @param array The source array to search in\n * @param predicate find calls predicate once for each element of the array, in descending\n * order, until it finds one where predicate returns true. If such an element is found,\n * findLastIndex immediately returns that element index. Otherwise, findLastIndex returns -1.\n */\nexport function findLastIndex<T>(\n array: T[],\n predicate: (value: T, index: number, obj: T[]) => boolean,\n): number {\n let l = array.length;\n while (l--) {\n if (predicate(array[l], l, array)) return l;\n }\n return -1;\n}\n","/**\n *\n * @param i Ahhh gotta love typescript\n * @returns\n */\nexport const isNotNull = <I>(i: I | null): i is I => i !== null;\n","import { deepEqual } from 'fast-equals';\n\nimport { PostgrestFilterOperator, OperatorFn } from './query-types';\n\n/**\n * Builds a regex for a (i)like postgres operator by replacing the \"%\" with a regex wildcard \".*\"\n * @param search The search value\n * @returns A RegExp representing the (i)like operation\n */\nconst buildLikeRegex = (search: string) =>\n new RegExp(`^${search.replace(/%/g, '.*')}$`);\n\n/**\n * A poor humans attempt to implement postgres text search in javascript.\n * Converts the search string into a regex before testing it against all tokens.\n */\nconst textSearch: OperatorFn = (c, v) => {\n const regExp = `^${v\n .split('&')\n .map((v: string) => v.trim().toLowerCase())\n .join('|')\n .replace(/:\\*/g, '.*')}$`;\n const tokens = c\n .match(/'(.*?)'/g)\n .map((t: string) => t.replace(/'/g, '').toLowerCase());\n return tokens.some((t: string) => new RegExp(regExp).test(t));\n};\n\n/**\n * Date instances do not work with equality operators, which is why their times are compared instead.\n *\n * ref: https://stackoverflow.com/questions/492994/compare-two-dates-with-javascript\n * @param v The input value\n * @returns If the input value is an instanceof Date, return v.getTime(), else the input value\n */\nconst ifDateGetTime = (v: any) => (v instanceof Date ? v.getTime() : v);\n\nconst enclose = (v: string, char: string) => {\n if (!v.startsWith(char)) v = `${char}${v}`;\n if (!v.endsWith(char)) v = `${v}${char}`;\n return v;\n};\n\n/**\n * An object containing all PostgrestFilterOperator implementations\n */\nexport const OPERATOR_MAP: { [Key in PostgrestFilterOperator]?: OperatorFn } = {\n eq: (c, v) => ifDateGetTime(c) === ifDateGetTime(v),\n neq: (c, v) => ifDateGetTime(c) !== ifDateGetTime(v),\n gt: (c, v) => c > v,\n gte: (c, v) => c >= v,\n lt: (c, v) => c < v,\n lte: (c, v) => c <= v,\n like: (c, v) => buildLikeRegex(v).test(c.toString()),\n ilike: (c, v) =>\n buildLikeRegex(v.toLowerCase()).test(c.toString().toLowerCase()),\n is: (c, v) => c === v,\n in: (c, v) => {\n const parsedValue = v.slice(1, -1).split(',');\n return parsedValue.some((i: string) => i === c);\n },\n // contains\n cs: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return v.every((i: string) => c.some((colVal) => deepEqual(colVal, i)));\n },\n // containedBy\n cd: (c, v) => {\n if (!Array.isArray(c)) return false;\n if (!Array.isArray(v)) v = v.slice(1, -1).split(',');\n return c.every((i: string) =>\n v.some((cmpVal: any) => deepEqual(cmpVal, i)),\n );\n },\n fts: textSearch,\n plfts: (c, v) =>\n buildLikeRegex(enclose(v.toLowerCase(), '%')).test(\n c.toString().toLowerCase(),\n ),\n};\n","import XRegExp from \"xregexp\";\n\nimport { Path } from \"./query-types\";\n\nexport const parseSelectParam = (s: string, currentPath?: Path): Path[] => {\n s = s.replace(/\\s/g, \"\");\n\n const foreignTables = XRegExp.matchRecursive(`,${s}`, \",[^,]*\\\\(\", \"\\\\)\", \"g\", {\n valueNames: {\n \"0\": null,\n \"1\": \"tableName\",\n \"2\": \"selectedColumns\",\n \"3\": null,\n },\n }).reduce((prev, curr, idx, matches) => {\n if (curr.name === \"selectedColumns\") {\n const name = matches[idx - 1].value.slice(1, -1);\n prev = { ...prev, [name]: curr.value };\n }\n return prev;\n }, {});\n\n const columns = s\n .replace(\n new RegExp(\n `${Object.entries(foreignTables)\n .map(([table, selectedColumns]) => `${table}(${selectedColumns})`.replace(/\\(/g, \"\\\\(\").replace(/\\)/g, \"\\\\)\"))\n .join(\"|\")}`,\n \"g\",\n ),\n \"\",\n )\n .replace(/(,)\\1+/g, \",\")\n .split(\",\")\n .filter((c) => c.length > 0)\n .map((c) => {\n const split = c.split(\":\");\n const hasAlias = split.length > 1;\n return {\n declaration: [currentPath?.declaration, c].filter(Boolean).join(\".\"),\n alias:\n hasAlias || currentPath?.alias\n ? [currentPath?.alias ?? currentPath?.path, split[0]].filter(Boolean).join(\".\")\n : undefined,\n path: [currentPath?.path, split[hasAlias ? 1 : 0]].filter(Boolean).join(\".\"),\n };\n });\n\n // if (columns.find((c) => c.path.includes('*')))\n // throw new Error('Wildcard selector is not supported');\n\n return [\n ...columns,\n ...Object.entries(foreignTables).flatMap(([currentDeclaration, selectedColumns]) => {\n // example for declaration\n // alias:organisation!contact_organisation_id_fkey!inner\n const aliasSplit = currentDeclaration.split(\":\");\n\n const currentAliasElem = aliasSplit.length > 1 ? aliasSplit[0] : undefined;\n\n const currentPathDeclaration = aliasSplit[aliasSplit.length - 1];\n const currentPathElem = currentPathDeclaration.split(\"!\")[0];\n\n const path = [currentPath?.path, currentPathElem].filter(Boolean).join(\".\");\n\n const alias = [currentPath?.alias ?? currentPath?.path, currentAliasElem ?? currentPathElem]\n .filter(Boolean)\n .join(\".\");\n\n const declaration = [currentPath?.declaration, currentDeclaration].filter(Boolean).join(\".\");\n\n return parseSelectParam(`${selectedColumns}`, {\n path,\n alias: currentPath?.alias || currentAliasElem ? alias : undefined,\n declaration,\n });\n }),\n ];\n};\n","/**\n * Check if a value is a valid ISO DateTime string\n * @param v\n * @returns\n */\nexport const isISODateString = (v: unknown): boolean =>\n typeof v === 'string' &&\n /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/.test(\n v,\n );\n","import { isISODateString } from './is-iso-date-string';\nimport { ValueType } from './query-types';\n\n/**\n * Safely parse any value to a ValueType\n * @param v Any value\n * @returns a ValueType\n */\nexport const parseValue = (v: any): ValueType => {\n if (isISODateString(v)) return new Date(v);\n try {\n return JSON.parse(v);\n } catch {\n return v;\n }\n};\n","import { findLastIndex } from './lib/find-last-index';\nimport { isNotNull } from './lib/is-not-null';\nimport { OPERATOR_MAP } from './lib/operators';\nimport { parseSelectParam } from './lib/parse-select-param';\nimport { parseValue } from './lib/parse-value';\nimport {\n FilterDefinition,\n FilterDefinitions,\n PostgrestFilterOperator,\n Path,\n} from './lib/query-types';\n\nexport const SUPPORTED_OPERATORS = ['or', ...Object.keys(OPERATOR_MAP)];\n\nexport type PostgrestQueryParserOptions = {\n /**\n * If defined, will use only filters that apply to the given paths\n */\n exclusivePaths?: string[];\n};\n\nexport class PostgrestQueryParser {\n private readonly _params: URLSearchParams;\n\n private _filters: FilterDefinitions | undefined;\n private _paths: Path[] | undefined;\n\n constructor(\n query: string,\n public readonly opts?: PostgrestQueryParserOptions,\n ) {\n this._params = new URLSearchParams(query);\n }\n\n /**\n * Getter that returns the paths and their aliases that the query selects. Will do the computation only once.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\")\n * .select(\n * `name,\n * city:cities (\n * test:name\n * ),\n * countries (\n * capital,\n * population,\n * some_ref (\n * test:first,\n * second\n * )\n * )`\n * );\n * console.log(p.paths);\n * // [\n * // { alias: undefined, path: \"name\" },\n * // { alias: \"city.test\", path: \"cities.name\" },\n * // { alias: undefined, path: \"countries.capital\" },\n * // { alias: undefined, path: \"countries.population\" },\n * // {\n * // alias: \"countries.some_ref.test\",\n * // path: \"countries.some_ref.first\",\n * // },\n * // { alias: undefined, path: \"countries.some_ref.second\" },\n * // ];\n * ```\n *\n * @returns an array of paths that the query selects, containing the columns and aliases\n */\n get paths(): Path[] {\n if (!this._paths) {\n const select = this._params.get('select');\n this._paths = select ? parseSelectParam(select) : [];\n }\n return this._paths;\n }\n\n /**\n * Getter that returns the filters that this query applies in a json object.\n *\n * ```js\n * const p = new PostgrestParser(\n * supabaseClient.from(\"test\").select('*')\n * .or(\"full_name.eq.20,test.neq.true,and(full_name.eq.Test Name,email.eq.test@mail.com)\")\n * .eq(\"id\", \"123\")\n * .contains(\"id\", \"456\")\n * );\n *\n * console.log(p.filters);\n *\n * // [\n * // {\n * // or: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 20,\n * // },\n * // {\n * // path: \"test\",\n * // negate: false,\n * // operator: \"neq\",\n * // value: true,\n * // },\n * // {\n * // and: [\n * // {\n * // path: \"full_name\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"Test Name\",\n * // },\n * // {\n * // path: \"email\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: \"test@mail.com\",\n * // },\n * // ],\n * // },\n * // ],\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"eq\",\n * // value: 123,\n * // },\n * // {\n * // path: \"id\",\n * // negate: false,\n * // operator: \"cs\",\n * // value: 456,\n * // },\n * // ];\n * ```\n *\n * @returns a FilterDefinitions object\n */\n get filters(): FilterDefinitions {\n if (!this._filters) {\n const filters: FilterDefinitions = [];\n this._params.forEach((value, key) => {\n if (\n SUPPORTED_OPERATORS.some(\n (f) => key === f || value.split('.').includes(f),\n )\n ) {\n const filter = this.parseFilterString(`${key}.${value}`, undefined);\n if (filter !== null) filters.push(filter);\n }\n });\n this._filters = filters;\n }\n return this._filters;\n }\n\n private parseFilterString(\n filter: string,\n prefix?: string,\n ):\n | FilterDefinition\n | { or: FilterDefinitions }\n | { and: FilterDefinitions }\n | null {\n if (filter.startsWith('and(') && filter.endsWith(')')) {\n // nested and\n const andFilters = filter\n .slice(4, -1)\n .split(',')\n .map((s) => this.parseFilterString(s, prefix))\n .filter(isNotNull);\n if (andFilters.length === 0) return null;\n else return { and: andFilters };\n }\n\n const split = filter.split('.');\n\n // or\n if ([split[0], split[1]].includes('or')) {\n let foreignTable: string | undefined;\n if (split[1] === 'or') {\n // with foreign table\n foreignTable = split[0];\n }\n\n const orFilters = filter\n .slice(4 + (foreignTable ? foreignTable.length + 1 : 0), -1)\n .split(',')\n .reduce<string[]>((prev, curr, idx, filters) => {\n if (curr.startsWith('and(')) {\n // nested and\n prev = [...prev, [curr, filters[idx + 1]].join()];\n } else if (!curr.endsWith(')')) {\n prev = [...prev, curr];\n }\n return prev;\n }, [])\n .map((s) => this.parseFilterString(s, foreignTable))\n .filter(isNotNull);\n if (orFilters.length === 0) return null;\n else return { or: orFilters };\n }\n\n const operatorIdx = findLastIndex(split, (s) =>\n SUPPORTED_OPERATORS.includes(s),\n );\n if (operatorIdx === -1)\n throw new Error(\n `Could not find a valid operator in ${split.join(\n '.',\n )}. Supported are ${SUPPORTED_OPERATORS.join(',')}.`,\n );\n const negate = split[operatorIdx - 1] === 'not';\n\n const pathOrAlias = [\n prefix,\n ...split.slice(0, negate ? operatorIdx - 1 : operatorIdx),\n ]\n .filter(Boolean)\n .join('.')\n .replace(/\\s/g, '');\n\n let path = pathOrAlias;\n let alias;\n // filter paths can use either the real path or the alias\n // search for alias and path in paths of query\n // if none is found, its a path because the alias would need to be defined\n // in the query\n for (const p of this.paths) {\n if (p.path === pathOrAlias) {\n alias = p.alias;\n break;\n }\n if (p.alias === pathOrAlias) {\n path = p.path;\n alias = p.alias;\n break;\n }\n }\n\n if (\n this.opts &&\n Array.isArray(this.opts.exclusivePaths) &&\n !this.opts.exclusivePaths.includes(path)\n ) {\n return null;\n }\n\n const operator = split[operatorIdx] as PostgrestFilterOperator;\n const value = split.slice(operatorIdx + 1).join('.');\n return {\n path,\n alias,\n negate,\n operator,\n value: parseValue(value),\n };\n }\n}\n","import { PostgrestBuilder } from \"@supabase/postgrest-js\";\n\nimport { encodeObject } from \"./lib/encode-object\";\nimport { isObject } from \"./lib/is-object\";\nimport { OrderDefinition } from \"./lib/query-types\";\nimport { sortSearchParams } from \"./lib/sort-search-param\";\nimport {\n PostgrestQueryParser,\n PostgrestQueryParserOptions,\n} from \"./postgrest-query-parser\";\n\nexport class PostgrestParser<Result> extends PostgrestQueryParser {\n private readonly _url: URL;\n private readonly _headers: { [key: string]: string };\n private readonly _body: object | undefined;\n public readonly method: \"GET\" | \"HEAD\" | \"POST\" | \"PATCH\" | \"DELETE\";\n\n public readonly select: string;\n public readonly queryKey: string;\n public readonly bodyKey: string | undefined;\n public readonly count: string | null;\n public readonly schema: string;\n public readonly table: string;\n public readonly isHead: boolean | undefined;\n public readonly limit: number | undefined;\n public readonly offset: number | undefined;\n public readonly orderBy: OrderDefinition[] = [];\n public readonly orderByKey: string;\n public readonly searchParams: URLSearchParams;\n\n constructor(\n fb: PostgrestBuilder<any, Result>,\n public readonly opts?: PostgrestQueryParserOptions,\n ) {\n super(new URL(fb[\"url\"]).searchParams.toString(), opts);\n\n this._url = new URL(fb[\"url\"]);\n // Convert Headers object to plain object\n const headers = fb[\"headers\"] as Headers;\n this._headers = Object.fromEntries(headers.entries());\n this._body = isObject(fb[\"body\"]) ? { ...fb[\"body\"] } : undefined;\n this.method = fb[\"method\"];\n\n this.searchParams = this._url.searchParams;\n this.queryKey = sortSearchParams(this._url.searchParams).toString();\n this.select = this._url.searchParams.get(\"select\")?.toString() ?? \"*\";\n this.table = (this._url.toString().split(\"/rest/v1/\").pop() as string)\n .split(\"?\").shift() as string;\n\n if (this._body) {\n this.bodyKey = encodeObject(this._body as Record<string, unknown>);\n }\n\n // 'Prefer': return=minimal|representation,count=exact|planned|estimated\n const preferHeaders: Record<string, string> =\n (this._headers[\"Prefer\"] ?? \"\")\n .split(\",\")\n .reduce<Record<string, string>>((prev, curr) => {\n const s = curr.split(\"=\");\n return {\n ...prev,\n [s[0]]: s[1],\n };\n }, {});\n this.count = preferHeaders[\"count\"] ?? null;\n\n this.schema = fb[\"schema\"] as string;\n\n this.isHead = this.method === \"HEAD\";\n\n const limit = this._url.searchParams.get(\"limit\");\n this.limit = limit ? Number(limit) : undefined;\n const offset = this._url.searchParams.get(\"offset\");\n this.offset = offset ? Number(offset) : undefined;\n\n this._url.searchParams.forEach((value, key) => {\n const split = key.split(\".\");\n if (split[split.length === 2 ? 1 : 0] === \"order\") {\n // separated by ,\n const orderByDefs = value.split(\",\");\n orderByDefs.forEach((def) => {\n const [column, ascending, nullsFirst] = def.split(\".\");\n this.orderBy.push({\n ascending: ascending === \"asc\",\n column,\n nullsFirst: nullsFirst === \"nullsfirst\",\n foreignTable: split.length === 2 ? split[0] : undefined,\n });\n });\n }\n });\n this.orderByKey = this.orderBy\n .map(\n ({ column, ascending, nullsFirst, foreignTable }) =>\n `${foreignTable ? `${foreignTable}.` : \"\"}${column}:${\n ascending ? \"asc\" : \"desc\"\n }.${nullsFirst ? \"nullsFirst\" : \"nullsLast\"}`,\n )\n .join(\"|\");\n }\n}\n"],"mappings":"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AAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,OAAO;AAAA,MACX;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,QAAQ;AAAA,QACR,UAAU;AAAA,MACd;AAAA,MACA;AAAA,QACI,Q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","names":["isArray","isObject","isUndefined","isNumber","format","locale","to","from","keys","now","sign","token","ordinal","i","diff","localeData","tokens","get","hours","minutes","meridiem","years","months","weeks","days","seconds","milliseconds","offset","chunk","properties","thresholds","hex","dec","context","r","n","XRegExp","REGEX_DATA","XRegExp","XRegExp","dec","hex","pad4","range","XRegExp","categories","XRegExp","properties","XRegExp","scripts","target","result","isArray","isObject","properties","areArraysEqual","areDatesEqual","areErrorsEqual","areFunctionsEqual","areMapsEqual","areNumbersEqual","areObjectsEqual","arePrimitiveWrappersEqual","areRegExpsEqual","areSetsEqual","areTypedArraysEqual","areUrlsEqual","areObjectsEqualStrictDefault","areArraysEqualDefault","areMapsEqualDefault","areObjectsEqualDefault","areSetsEqualDefault","areTypedArraysEqualDefault","_a","p","isPlainObject","isPlainObject","flatten","r","decode","prev","isArray","unflatten","v","tokens","ifDateGetTime","obj","merge","decode","useQueryClient","useQueryClient","useQueryClient","useQueryClient","useQueryClient","useMutation","useMutation","useMutation","useMutation","REALTIME_LISTEN_TYPES","REALTIME_POSTGRES_CHANGES_LISTEN_EVENT","useEffect","useState","useQueryClient","__async","__spreadValues","useQueryClient","__async","__spreadValues","flatten","__spreadValues","__async","isPostgrestBuilder","__spreadProps","__spreadValues","useEffect","useState","useEffect","useState","r","import_moment","CLASS_PART_SEPARATOR","createClassGroupUtils","config","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getClassGroupId","className","classParts","split","length","shift","getGroupRecursive","getGroupIdForArbitraryProperty","getConflictingClassGroupIds","classGroupId","hasPostfixModifier","conflicts","classPartObject","currentClassPart","nextClassPartObject","nextPart","get","classGroupFromNextClassPart","slice","undefined","validators","classRest","join","find","validator","arbitraryPropertyRegex","test","arbitraryPropertyClassName","exec","property","substring","indexOf","theme","prefix","Map","prefixedClassGroupEntries","getPrefixedClassGroupEntries","Object","entries","classGroups","forEach","classGroup","processClassesRecursively","classDefinition","classPartObjectToEdit","getPart","isThemeGetter","push","key","path","currentClassPartObject","pathPart","has","set","func","classGroupEntries","map","prefixedClassGroup","fromEntries","value","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","createParseClassName","separator","experimentalParseClassName","isSeparatorSingleCharacter","firstSeparatorCharacter","separatorLength","parseClassName","modifiers","bracketDepth","modifierStart","postfixModifierPosition","index","currentCharacter","baseClassNameWithImportantModifier","hasImportantModifier","startsWith","baseClassName","maybePostfixModifierPosition","sortModifiers","sortedModifiers","unsortedModifiers","modifier","isArbitraryVariant","sort","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","classGroupsInConflict","classNames","trim","result","originalClassName","Boolean","variantModifier","modifierId","classId","includes","conflictGroups","i","group","twJoin","argument","resolvedValue","string","arguments","toValue","mix","k","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","reduce","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","callTailwindMerge","apply","fromTheme","themeGetter","arbitraryValueRegex","fractionRegex","stringLengths","Set","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isLength","isNumber","isArbitraryLength","getIsArbitraryValue","isLengthOnly","Number","isNaN","isArbitraryNumber","isInteger","isPercent","endsWith","isArbitraryValue","isTshirtSize","sizeLabels","isArbitrarySize","isNever","isArbitraryPosition","imageLabels","isArbitraryImage","isImage","isArbitraryShadow","isShadow","isAny","label","testValue","getDefaultConfig","colors","fromTheme","spacing","blur","brightness","borderColor","borderRadius","borderSpacing","borderWidth","contrast","grayscale","hueRotate","invert","gap","gradientColorStops","gradientColorStopPositions","inset","margin","opacity","padding","saturate","scale","sepia","skew","space","translate","getOverscroll","getOverflow","getSpacingWithAutoAndArbitrary","isArbitraryValue","getSpacingWithArbitrary","getLengthWithEmptyAndArbitrary","isLength","isArbitraryLength","getNumberWithAutoAndArbitrary","isNumber","getPositions","getLineStyles","getBlendModes","getAlign","getZeroAndEmpty","getBreaks","getNumberAndArbitrary","cacheSize","separator","theme","isAny","isTshirtSize","isPercent","classGroups","aspect","container","columns","box","display","float","clear","isolation","object","overflow","overscroll","position","start","end","top","right","bottom","left","visibility","z","isInteger","basis","flex","grow","shrink","order","col","span","row","justify","content","items","self","p","px","py","ps","pe","pt","pr","pb","pl","m","mx","my","ms","me","mt","mr","mb","ml","w","screen","h","size","text","font","isArbitraryNumber","tracking","leading","list","placeholder","decoration","indent","align","whitespace","break","hyphens","bg","isArbitraryPosition","repeat","isArbitrarySize","isArbitraryImage","from","via","to","rounded","border","divide","outline","ring","shadow","isArbitraryShadow","filter","table","caption","transition","duration","ease","delay","animate","transform","rotate","origin","accent","appearance","cursor","caret","resize","scroll","snap","touch","select","fill","stroke","sr","conflictingClassGroups","conflictingClassGroupModifiers","twMerge","createTailwindMerge","getDefaultConfig","__defProp","isUsable","keys","areDatesEqual","moment","moment2","moment3","isUsable2","r","newUuid","REALTIME_POSTGRES_CHANGES_LISTEN_EVENT","deleteItem","upsertItem","useState","useEffect","newUuid","delay","useMemo","sortSearchParams","encodeObject","sortSearchParams","isObject","findLastIndex","isNotNull","buildLikeRegex","textSearch","v","tokens","ifDateGetTime","enclose","OPERATOR_MAP","parseSelectParam","isISODateString","parseValue","isISODateString","SUPPORTED_OPERATORS","OPERATOR_MAP","PostgrestQueryParser","parseSelectParam","isNotNull","findLastIndex","parseValue","PostgrestParser","PostgrestQueryParser","isObject","sortSearchParams","encodeObject","useMemo","PostgrestParser"]}
|
|
1
|
+
{"version":3,"sources":["../../src/realtime/useRealtime.ts","../../src/realtime/useRealtimeQuery.ts"],"sourcesContent":["import { c as _c } from \"react/compiler-runtime\";\nimport { useDeleteItem, useQueriesForTableLoader, useUpsertItem } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { useEffect, useState, useRef } from \"react\";\nimport useSupabase, { UserSessionId } from \"../useSupabase\";\nimport { newUuid } from \"@pol-studios/utils\";\nimport { buildNormalizedQuery, normalizeResponse } from \"@supabase-cache-helpers/postgrest-core\";\nimport { REALTIME_POSTGRES_CHANGES_LISTEN_EVENT, type RealtimePostgresChangesPayload } from \"@supabase/supabase-js\";\nimport { useDelayedValue } from \"@pol-studios/hooks/state\";\nexport default function useRealtime(key, query, table, primaryKeys, options) {\n const $ = _c(37);\n const supabase = useSupabase();\n const tableNameValue = typeof table === \"string\" ? table : table.table;\n const schemaValue = typeof table === \"string\" ? \"public\" : table.schema;\n const queriesForTable = useQueriesForTableLoader(tableNameValue);\n let t0;\n if ($[0] !== primaryKeys || $[1] !== schemaValue || $[2] !== tableNameValue) {\n t0 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[0] = primaryKeys;\n $[1] = schemaValue;\n $[2] = tableNameValue;\n $[3] = t0;\n } else {\n t0 = $[3];\n }\n const deleteItem = useDeleteItem(t0);\n let t1;\n if ($[4] !== primaryKeys || $[5] !== schemaValue || $[6] !== tableNameValue) {\n t1 = {\n primaryKeys,\n table: tableNameValue,\n schema: schemaValue\n };\n $[4] = primaryKeys;\n $[5] = schemaValue;\n $[6] = tableNameValue;\n $[7] = t1;\n } else {\n t1 = $[7];\n }\n const upsertItem = useUpsertItem(t1);\n const [realtimeState, setRealtimeState] = useState(\"CLOSED\");\n const [retryTick, setRetryTick] = useState(0);\n const channelRef = useRef(null);\n const lastRetryTimeRef = useRef(0);\n const retryCountRef = useRef(0);\n const enabled = options?.enabled ?? true;\n const filter = options?.filter;\n const onChange = options?.onChange;\n const debouncedKey = useDelayedValue(key, 50);\n let t2;\n if ($[8] !== deleteItem || $[9] !== enabled || $[10] !== filter || $[11] !== onChange || $[12] !== primaryKeys || $[13] !== queriesForTable || $[14] !== query || $[15] !== retryTick || $[16] !== schemaValue || $[17] !== supabase || $[18] !== tableNameValue || $[19] !== upsertItem) {\n t2 = () => {\n if (!enabled) {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n setRealtimeState(\"CLOSED\");\n return;\n }\n const now = Date.now();\n const timeSinceLastRetry = now - lastRetryTimeRef.current;\n if (timeSinceLastRetry < 2000 && retryTick > 0) {\n return;\n }\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n lastRetryTimeRef.current = now;\n retryCountRef.current = retryCountRef.current + 1;\n const channel = supabase.channel(newUuid()).on(\"postgres_changes\", {\n event: \"*\",\n schema: schemaValue,\n table: tableNameValue,\n filter\n }, async payload => {\n let data = payload.new ?? payload.old;\n if (payload.new && Object.keys(payload.new).length > 0) {\n const selectQuery = buildNormalizedQuery({\n queriesForTable,\n query\n });\n if (payload.eventType !== REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE && selectQuery) {\n if (selectQuery.groupedUserQueryPaths.every(x => x.path in data) === false) {\n const qb = supabase.schema(payload.schema as any).from(payload.table as any).select(selectQuery.selectQuery);\n for (const pk of primaryKeys) {\n qb.eq(pk.toString(), data[pk]);\n }\n const res = await qb.single();\n if (res.data) {\n data = normalizeResponse(selectQuery.groupedPaths, res.data);\n }\n }\n }\n if (\"changedBySessionId\" in data) {\n const sessionId = data.changedBySessionId;\n if (sessionId !== UserSessionId) {\n await upsertItem(data);\n }\n } else {\n await upsertItem(data);\n }\n }\n if (payload.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload.old);\n }\n if (payload.errors?.length > 0) {\n setRealtimeState(\"CHANNEL_ERROR\");\n }\n if (onChange) {\n onChange(payload);\n }\n }).on(\"postgres_changes\", {\n event: \"DELETE\",\n schema: schemaValue,\n table: tableNameValue\n }, async payload_0 => {\n if (payload_0.eventType === REALTIME_POSTGRES_CHANGES_LISTEN_EVENT.DELETE) {\n await deleteItem(payload_0.old);\n }\n }).subscribe(status => {\n setRealtimeState(status);\n if (status === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n }\n });\n channelRef.current = channel;\n return () => {\n if (channelRef.current) {\n channelRef.current.unsubscribe();\n supabase.removeChannel(channelRef.current);\n channelRef.current = null;\n }\n };\n };\n $[8] = deleteItem;\n $[9] = enabled;\n $[10] = filter;\n $[11] = onChange;\n $[12] = primaryKeys;\n $[13] = queriesForTable;\n $[14] = query;\n $[15] = retryTick;\n $[16] = schemaValue;\n $[17] = supabase;\n $[18] = tableNameValue;\n $[19] = upsertItem;\n $[20] = t2;\n } else {\n t2 = $[20];\n }\n let t3;\n if ($[21] !== primaryKeys) {\n t3 = primaryKeys.join(\",\");\n $[21] = primaryKeys;\n $[22] = t3;\n } else {\n t3 = $[22];\n }\n let t4;\n if ($[23] !== debouncedKey || $[24] !== enabled || $[25] !== filter || $[26] !== query || $[27] !== retryTick || $[28] !== schemaValue || $[29] !== supabase || $[30] !== t3 || $[31] !== tableNameValue) {\n t4 = [supabase, tableNameValue, schemaValue, enabled, filter, query, t3, retryTick, debouncedKey];\n $[23] = debouncedKey;\n $[24] = enabled;\n $[25] = filter;\n $[26] = query;\n $[27] = retryTick;\n $[28] = schemaValue;\n $[29] = supabase;\n $[30] = t3;\n $[31] = tableNameValue;\n $[32] = t4;\n } else {\n t4 = $[32];\n }\n useEffect(t2, t4);\n let t5;\n let t6;\n if ($[33] !== enabled || $[34] !== realtimeState) {\n t5 = () => {\n if (!enabled || realtimeState === \"SUBSCRIBED\") {\n retryCountRef.current = 0;\n return;\n }\n const delay = Math.min(5000 * Math.pow(2, retryCountRef.current), 60000);\n const id = setTimeout(() => {\n setRetryTick(_temp);\n }, delay);\n return () => clearTimeout(id);\n };\n t6 = [realtimeState, enabled];\n $[33] = enabled;\n $[34] = realtimeState;\n $[35] = t5;\n $[36] = t6;\n } else {\n t5 = $[35];\n t6 = $[36];\n }\n useEffect(t5, t6);\n return realtimeState;\n}\nfunction _temp(t) {\n return t + 1;\n}","import { c as _c } from \"react/compiler-runtime\";\nimport { PostgrestSingleResponse } from \"@supabase/supabase-js\";\nimport { useMemo } from \"react\";\nimport { ItemType } from \"@pol-studios/utils\";\nimport { encode, useQuery } from \"@supabase-cache-helpers/postgrest-react-query\";\nimport { UseQueryOptions } from \"@tanstack/react-query\";\nimport useRealtime from \"./useRealtime\";\nimport { isNullOrWhitespace } from \"@pol-studios/utils\";\nimport { UseDbQuerySingleReturn } from \"../useDbQuery\";\nimport { PostgrestParser } from \"../parser/PostgrestParser\";\ntype ConfigurationOptions<T> = {\n crossOrganization?: boolean;\n};\ntype FilterOperator = \"or\" | \"eq\" | \"neq\" | \"gt\" | \"gte\" | \"lt\" | \"lte\" | \"like\" | \"ilike\" | \"is\" | \"in\" | \"cs\" | \"cd\" | \"fts\" | \"plfts\";\ntype ValueType = number | string | boolean | null | Date | object;\ntype FilterDefinition = {\n path: string;\n alias?: string;\n operator: FilterOperator;\n negate: boolean;\n value: ValueType;\n};\ntype FilterDefinitions = (FilterComposite | FilterDefinition)[];\ntype FilterComposite = {\n or?: FilterDefinitions;\n and?: FilterDefinitions;\n};\nexport type UseRealtimeQueryResult<T> = UseDbQuerySingleReturn<T> & {\n realtimeStatus: \"SUBSCRIBED\" | \"TIMED_OUT\" | \"CLOSED\" | \"CHANNEL_ERROR\" | \"Loading...\";\n isRealtimeConnected: boolean;\n isRealtimeLoading: boolean;\n};\ntype DataType = Record<string, any>;\nexport function convertFilterToRealtimeQuery(filters: FilterDefinitions): string {\n function convert(filter: FilterComposite | FilterDefinition): string {\n //TODO: I just added this line to make it work\n if (!filter) return \"\";\n if (\"path\" in filter) {\n if (filter.path.includes(\".\")) return \"\";\n let valueString = filter.value?.toString() ?? \"null\";\n if (filter.operator === \"in\") {\n valueString = '(\"' + valueString.slice(2, valueString.length - 2).split(\",\").join('\",\"') + '\")';\n }\n return `${filter.path}=${filter.negate ? \"not.\" : \"\"}${filter.operator}.${valueString}`;\n } else {\n if (filter.or) {\n return `(${filter.or.map(f => convert(f)).join(\"|\")})`;\n } else if (filter.and) {\n return `(${filter.and.map(f => convert(f)).join(\"&\")})`;\n }\n }\n return \"\";\n }\n\n //todo: review later when multiple filters are available\n return convert(filters[0]);\n}\nexport function useRealtimeQuery(query, config, t0) {\n const $ = _c(27);\n let t1;\n if ($[0] !== t0) {\n t1 = t0 === undefined ? [\"id\" as any] : t0;\n $[0] = t0;\n $[1] = t1;\n } else {\n t1 = $[1];\n }\n const primaryKeys = t1;\n const t2 = query as any;\n let t3;\n if ($[2] !== t2) {\n t3 = new PostgrestParser(t2);\n $[2] = t2;\n $[3] = t3;\n } else {\n t3 = $[3];\n }\n const parser = t3;\n const request = useQuery(query, config as any);\n let filter;\n let selectStatement;\n let t4;\n let t5;\n if ($[4] !== parser.filters || $[5] !== parser.select || $[6] !== query || $[7] !== request.data) {\n const queryKey = encode(query, false);\n let t6;\n if ($[12] !== parser.filters || $[13] !== request.data) {\n const filterString = convertFilterToRealtimeQuery(parser.filters);\n filter = request.data && typeof request.data === \"object\" && \"id\" in request.data ? \"id=eq.\" + request.data.id : filterString;\n if (filter.includes(\"in.(\\\\\\\"\\\\\\\")\")) {\n filter = undefined;\n }\n t6 = isNullOrWhitespace(filter);\n $[12] = parser.filters;\n $[13] = request.data;\n $[14] = filter;\n $[15] = t6;\n } else {\n filter = $[14];\n t6 = $[15];\n }\n if (t6) {\n filter = undefined;\n }\n selectStatement = parser.select;\n t4 = useRealtime;\n t5 = queryKey.join(\"-\");\n $[4] = parser.filters;\n $[5] = parser.select;\n $[6] = query;\n $[7] = request.data;\n $[8] = filter;\n $[9] = selectStatement;\n $[10] = t4;\n $[11] = t5;\n } else {\n filter = $[8];\n selectStatement = $[9];\n t4 = $[10];\n t5 = $[11];\n }\n let t6;\n if ($[16] !== parser.schema || $[17] !== parser.table) {\n t6 = {\n schema: parser.schema,\n table: parser.table\n };\n $[16] = parser.schema;\n $[17] = parser.table;\n $[18] = t6;\n } else {\n t6 = $[18];\n }\n const t7 = typeof config?.enabled === \"boolean\" ? config.enabled : true;\n let t8;\n if ($[19] !== filter || $[20] !== t7) {\n t8 = {\n filter,\n enabled: t7\n };\n $[19] = filter;\n $[20] = t7;\n $[21] = t8;\n } else {\n t8 = $[21];\n }\n const realtimeStatus = t4(t5, selectStatement, t6, primaryKeys, t8);\n const outputRealtimeStatus = request.isFetching ? \"Loading...\" : realtimeStatus;\n const t9 = request.data as Result | null | undefined;\n const t10 = realtimeStatus == \"SUBSCRIBED\";\n let t11;\n if ($[22] !== outputRealtimeStatus || $[23] !== request || $[24] !== t10 || $[25] !== t9) {\n t11 = {\n ...request,\n data: t9,\n realtimeStatus: outputRealtimeStatus,\n isRealtimeConnected: t10,\n isRealtimeLoading: request.isFetching\n };\n $[22] = outputRealtimeStatus;\n $[23] = request;\n $[24] = t10;\n $[25] = t9;\n $[26] = t11;\n } else {\n t11 = $[26];\n }\n return t11 as UseRealtimeQueryResult<Result>;\n}"],"mappings":"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","names":["_c","_c","t6"]}
|